【问题标题】:C++ Space Invaders MovementC++ 太空侵略者运动
【发布时间】:2016-11-23 18:44:42
【问题描述】:

我真的是 C++ 的新手,而且很不擅长,但我正在为我的大学项目制作太空入侵者游戏。我在外星人的移动系统以及如何让外星人排成一排生成时遇到了问题(一旦他们到达屏幕的一侧,他们就会向下移动然后穿过)。

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

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

if (currentSpritePos.x == 0)
{
    cout << "Im at the wall wooo and going to move down";
    //AlievVelocity.x*+1;
    setSpritePos({ 0, 75 });
}

我可以让外星人向左移动并向下移动,但由于某种原因他们没有向右移动,我评论了“AlienVelocity.x*+1”这一行,我认为这会让他们向右移动,因为“-1”让他们向左走……

为了让外星人排成一行,我制作了一个数组并设置了两个外星人,仅用于测试目的。

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());
}

在 for 语句的第二行,我输入了“+200+,因为我认为这只会给下一个外星人 +200 分,但显然不是。我也不确定如何解决这个问题......

【问题讨论】:

  • 乘以 1 不会改变速度,-1 也适用于向右移动。在循环中,您可能希望将 200 乘以迭代器值 aly。
  • StackOverflow 不是调试服务;它最适用于特定问题的特定答案。使用调试器,找出哪些事情没有做您认为他们应该做的事情,并提出一个尖锐的问题(除非您首先找到了答案),然后我们可以提供帮助。

标签: c++


【解决方案1】:
if (currentSpritePos.x < 975 || currentSpritePos.x > 0)
{
    this->AlienVelocity.x = this->AlienVelocity.x*-1;
}

这段代码说,每当外星人在 0 到 975 之间时,就可以反转速度。我相信这与您想要的完全相反。这意味着他们应该只是来回走动,永远不要在屏幕上移动。交换比较符号。

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

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

【讨论】:

    猜你喜欢
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多