C ++ Space Invaders Movement

时间:2016-11-23 18:44:43

标签: c++

我真的很喜欢c ++而且非常糟糕,但我正在为我的大学项目制作太空入侵者游戏。我对外星人的移动系统遇到了麻烦,以及如何让外星人在一条线上产生(一旦他们到达屏幕的一侧,他们就会向下移动然后穿过)。

首先,这是我用来移动外星人运动的代码

for (int aly = 0; aly < 2; aly++) // Change the 35 to number of desired aliens
{
    theAliens.push_back(new cAliens);
    theAliens[aly]->setSpritePos({ (100, 50) + 200 });
    theAliens[aly]->setSpriteTranslation({ 0, 0 });
    theAliens[aly]->setTexture(theTextureManager->getTexture("alien"));
    theAliens[aly]->setSpriteDimensions(theTextureManager->getTexture("ship")->getTWidth(), theTextureManager->getTexture("alien")->getTHeight());
}

我可以让外星人向左走,然后向下移动,但由于某种原因,他们不能向右移动,我评论出了线路&#34; AlienVelocity.x * + 1&#34;,我认为那样会他们刚刚让他们走得很好,因为&#34; -1&#34;让他们离开...

为了让外星人在一条线上产生,我已经制作了一个阵列并且只设置了2个外星人来产生,仅用于测试目的。

- (nullable NSTouchBarItem *)touchBar:(NSTouchBar *)touchBar makeItemForIdentifier:(NSTouchBarItemIdentifier)identifier

在第二行的旁边,我放了&#34; + 200+,因为我认为这只会让下一个外星人+200点,但显然不是。我不确定如何解决这个问题......

1 个答案:

答案 0 :(得分:0)

if (currentSpritePos.x < 975 || currentSpritePos.x > 0)
{
    this->AlienVelocity.x = this->AlienVelocity.x*-1;
}

此代码表示每当外星人在0到975之间时,反转速度。我相信这与你想要的完全相反。这意味着他们应该来回走动,不要在屏幕上移动。交换比较标志。

对于向下移动,取当前的y位置并向其添加行长度。这应该在速度反转时完成 - 在相同的if语句中。

从这些变化开始,看看你能否弄清楚其余的变化。