【问题标题】:Sprites and Bullets not moving C++精灵和子弹不移动 C++
【发布时间】:2014-04-24 14:35:08
【问题描述】:

我目前正在制作一个自上而下的 2D 游戏,并尝试将子弹和精灵渲染到屏幕上。出于测试目的,我设置了一个新的子弹和精灵来在按下箭头键时渲染,并且两者都应该沿对角线向上移动。

这是我通过将新精灵和子弹添加到矢量来调用它们的地方;

if(inputState->isKeyPressed(VK_UP))
{
    enemys.push_back(Enemy(playerX, playerY, 100));
}
if(inputState->isKeyPressed(VK_DOWN))
{
    bullets.push_back(Bullet(playerX, playerY, 100));
}

然后我在更新方法中更新他们的位置;

for each(Enemy e in enemys)
    {
        float x = e.getEnemyX();
        float y = e.getEnemyY();
        x += PLAYER_MOVEMENT_SPEED * deltaT;
        y += PLAYER_MOVEMENT_SPEED * deltaT;
        e.setEnemyCoord(x,y);
    }

for each(Bullet b in bullets)
{
    float x = b.getX();
    float y = b.getY();
    x += PLAYER_MOVEMENT_SPEED * deltaT;
    y += PLAYER_MOVEMENT_SPEED * deltaT;
    b.setCoord(x,y);
}

然后我渲染向量中的所有对象;

for each(Enemy e in enemys)
{
    float x = e.getEnemyX();
    float y = e.getEnemyY();
    renderEnemy(x,y);
}

for each(Bullet b in bullets)
{
    float x = b.getX();
    float y = b.getY();
    renderBullet(x,y);
}

精灵和子弹出现在屏幕上但不动,我不知道为什么。

【问题讨论】:

  • 您是否定期执行更新?我的意思是,如果你调用 update 1 次,你不应该期待任何动作。
  • 它们只是在更新功能中。
  • *new Bullet(playerX, playerY, 100) 太可怕了,它应该只是Bullet(playerX, playerY, 100),因为它是按值传递的,你正在泄漏新分配的内存。啊。
  • @unwind 它泄漏了......
  • 什么是 deltaT ?记住 0 * x = 0

标签: c++ opengl


【解决方案1】:

您正在使用可怕的for each Microsoft 扩展程序。我认为您还必须使用"tracking reference" 才能修改集合中的对象。我想你现在只是在修改循环变量。

【讨论】:

  • 搞定了。对于我使用的每一件事来说,这都是愚蠢的。正常的 for 循环语法运行良好!
  • 或者,您可以不使用 Microsoft 扩展,而是使用不错的新型 C++11 for (Enemy& e : enemys)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-20
  • 2012-11-27
  • 1970-01-01
  • 2017-06-06
  • 1970-01-01
相关资源
最近更新 更多