Взаимодействие класса C ++

Я продолжаю игру для встроенного микроконтроллера (Arduino), и у меня есть вопрос о взаимодействии классов — этот вопрос продолжается с моего предыдущего вопроса Вот и я основал свой код на предложении sheddenizen (см. ответ на данную ссылку в ‘здесь’):

У меня есть три класса, которые наследуют от базового класса

(я) класс Sprite — (класс баса) имеет растровую форму и (x, y) позицию на ЖК-дисплее

(II) Класс ракетный: общедоступный спрайт — имеет определенную форму, (х, у), а также принимает объект

(III) класс Alien: публичный спрайт — имеет определенную форму и (х, у)

(IV) Класс игрока: публичный спрайт — «»

Все они имеют разные (виртуальные) методы перемещения и отображаются на ЖК-дисплее:

введите описание изображения здесь

Мой упрощенный код приведен ниже — в частности, я хочу, чтобы ракета запускалась только при определенных условиях: когда ракета создается, она принимает значение объектов (x, y), как я могу получить доступ к значению переданных объектов в унаследованном классе?

// Bass class - has a form/shape, x and y position
// also has a method of moving, though its not defined what this is
class Sprite
{
public:
Sprite(unsigned char * const spacePtrIn, unsigned int xInit, unsigned int yInit);
virtual void Move() = 0;
void Render() { display.drawBitmap(x,y, spacePtr, 5, 6, BLACK); }
unsigned int X() const { return x; }
unsigned int Y() const { return y; }
protected:
unsigned char *spacePtr;
unsigned int x, y;
};

// Sprite constructor
Sprite::Sprite(unsigned char * const spacePtrIn, unsigned int xInit, unsigned int yInit)
{
x = xInit;
y = yInit;
spacePtr = spacePtrIn;
}

/*****************************************************************************************/
// Derived class "Missile", also a sprite and has a specific form/shape, and specific (x,y) derived from input sprite
// also has a simple way of moving
class Missile : public Sprite
{
public:
Missile(Sprite const &launchPoint): Sprite(&spaceMissile[0], launchPoint.X(), launchPoint.Y()) {}
virtual void Move();
};

void Missile::Move()
{
// Here - how to access launchPoint.X() and launchPoint.Y() to check for
// "fire conditions"y++;
Render();
}// create objects
Player HERO;
Alien MONSTER;
Missile FIRE(MONSTER);

// moving objects
HERO.Move();
MONSTER.Move();
FIRE.Move();

0

Решение

поскольку Missile это подкласс Sprite вы можете получить доступ Sprite::x а также Sprite::y как будто они были членами Ракеты. Это просто писать x (или же this->x если вы настаиваете).

launchpoint ссылка на то, что вы получили в конструкторе, к настоящему времени исчезла, поэтому ваш Missile::Move memfunction больше не может получить к нему доступ.

Если в то же время члены x а также y изменилось, но вы хотите оригинал значение, вы можете сохранить ссылку на launchpoint (что может быть опасно, оно уничтожено) или вам нужно сохранить копию исходных координат.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]