gpt4 book ai didi

以 Vector 对象为成员的 C++ Sprite 类

转载 作者:行者123 更新时间:2023-11-28 00:51:13 24 4
gpt4 key购买 nike

好的,我的 Sprite 类遇到了这个问题。基本上 Sprite 类应该有一个 Vector 类的对象作为它的成员,而 Vector 是一个同时具有角度和速度的类。 Vector 类有一个 Vector(double,double) 构造函数,因此可以在其初始化时设置速度和角度,但是当我制作我的 sprite 类时。它发送一个错误,它调用 Vector(),一个空白的构造函数,并且它不存在。我想弄清楚为什么它调用 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)
{
// ...
}

这将使用参数 10 初始化 movement。事实上,您也可以将其他成员添加到您的初始化列表中:

Sprite::Sprite(int x, int y)
: movement(1.0, 0.0), x(x), y(y), lastX(x), lastY(y) // and so on...
{
// ...
}

关于以 Vector 对象为成员的 C++ Sprite 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14015603/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com