用矢量对象作为成员的c++精灵类
C++ Sprite class with Vector Object as Member
好吧,我的Sprite类有这个问题。基本上,精灵类应该有一个Vector类的对象作为它的成员,Vector是一个同时具有角度和速度的类。Vector类有一个Vector(double,double)构造函数,所以速度和角度可以在初始化时设置,但当我创建精灵类时。它发送一个错误,表示正在调用Vector(),一个空白构造函数,并且它不存在。我想弄清楚为什么它调用向量()。这是我的代码从Sprite和Vector类。
#Vector.h
#ifndef VECTOR_H
#define VECTOR_H
class Vector
{
public:
Vector(double,double);
double getX();
double getY();
double getSpeed();
double getAngle();
void setSpeed(double);
void setAngle(double);
private:
double speed,angle;
};
#endif
#Vector.h
#include "SDL/SDL.h"
#include "vector.h"
#include "math.h"
Vector::Vector(double speed,double angle)
{
this -> speed = speed;
this -> angle = angle;
}
double Vector::getX()
{
return speed*cos(angle);
}
double Vector::getY()
{
return speed*sin(angle);
}
double Vector::getSpeed()
{
return speed;
}
double Vector::getAngle()
{
return angle;
}
void Vector::setAngle(double angle)
{
this -> angle = angle;
}
void Vector::setSpeed(double speed)
{
this -> speed = speed;
}
#Sprite.h:
#ifndef SPRITE_H
#define SPRITE_H
#include "vector.h"
class Sprite
{
public:
Sprite(int x,int y);
SDL_Rect getRect();
SDL_Surface* getImage();
void setRect(SDL_Rect);
void move();
void draw(SDL_Surface*);
private:
Vector movement;
double x,y,lastX,lastY,angle,speed;
SDL_Rect rect;
SDL_Surface* image;
};
#endif
#Sprite.cpp:
#include "SDL/SDL.h"
#include "sprite.h"
#include "functions.h"
#include <cmath>
Sprite::Sprite(int x, int y)
{
this -> x = x;
this -> y = y;
lastX = x;
lastY = y;
image = loadImage("box.png");
rect.x = x;
rect.y = y;
rect.w = image->w;
rect.h = image->h;
speed = 1;
angle = 0;
}
SDL_Rect Sprite::getRect()
{
return rect;
}
SDL_Surface* Sprite::getImage()
{
return image;
}
void Sprite::setRect(SDL_Rect rect)
{
this -> rect = rect;
}
void Sprite::move()
{
lastX = x;
lastY = y;
x += speed*cos(angle);
y += speed*sin(angle);
rect.x = int(x);
rect.y = int(y);
}
void Sprite::draw(SDL_Surface* dest)
{
blit(image,dest,int(x),int(y));
}
您的Sprite
类有一个Vector
成员,该成员将在Sprite
被构造时被构造。目前,Vector
将使用默认构造函数初始化,因为您没有指定其他方法。如果希望使用Vector
的特定构造函数,则需要在Sprite
的构造函数中添加初始化列表:
Sprite::Sprite(int x, int y)
: movement(1.0, 0.0)
{
// ...
}
将用参数1
和0
初始化movement
。实际上,您还可以在初始化列表中添加其他成员:
Sprite::Sprite(int x, int y)
: movement(1.0, 0.0), x(x), y(y), lastX(x), lastY(y) // and so on...
{
// ...
}
Vector
在Sprite::Sprite(int x, int y)
中创建。调用Vector
的空白构造函数是因为您没有调用初始化列表中的构造函数:事实上,您使Vector movement
完全未初始化!
这样做:
Sprite::Sprite(int x, int y):
movement(3.14, 2.7)
{
...
}
使用双参数构造函数构造movement
。我会选择比3.14
和2.7
更好的值,这些只是样本值。
为了方便使用,我还会考虑在Vector
上创建一个公共的无参数构造函数,将速度和角度初始化为零。
相关文章:
- OpenGL 着色器不绘制任何东西 - 糟糕的精灵类
- 从精灵表在 sfml 中为精灵制作动画
- AABB 碰撞使实际精灵的大小翻倍
- 如何在精灵表上的两个不同部分之间来回切换,同时用户仍使用 SFML 持有密钥
- 我的精灵使用名为 ASGE 的C++框架卡在屏幕边缘
- 如何为精灵编写复制构造函数
- 绘制精灵会导致分割错误
- 精灵动画查看器应该使用哪些Qt小部件
- Eclipse构建但不会启动精灵
- OpenGL 2D游戏只绘制第二个精灵纹理而不是第一个
- 打开 gl 精灵类不起作用
- 有没有办法在链接时设置精灵需要字段?
- 精灵没有动画
- 在不同位置渲染相同精灵的数组
- 如何在 SFML 上添加更多精灵?
- 精灵不显示我希望它们显示的方式
- 为什么精灵在 cocos2d-x 中颤抖
- 我没有看到精灵的动画
- 为什么该代码不绘制精灵C++ SFML
- 添加精灵时窗口关闭