Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 精灵和子弹不移动C++;_C++_Opengl - Fatal编程技术网

C++ 精灵和子弹不移动C++;

C++ 精灵和子弹不移动C++;,c++,opengl,C++,Opengl,我目前正在制作一个自上而下的2D游戏,并试图将子弹和精灵渲染到屏幕上。出于测试目的,我设置了一个新的项目符号和精灵,以在按下箭头键时进行渲染,并且两者都应沿对角线向上移动 这就是我通过将新精灵和项目符号添加到向量来调用它们的地方 if(inputState->isKeyPressed(VK_UP)) { enemys.push_back(Enemy(playerX, playerY, 100)); } if(inputState->isKeyPressed(VK_DOWN))

我目前正在制作一个自上而下的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);
}

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

您正在为每个Microsoft扩展使用可怕的
。我认为您还必须使用,以便能够修改集合中的对象。我认为您现在只是在修改循环变量。

是否定期执行更新?我的意思是,如果你调用update 1次,你不应该期望任何移动。它们只是在更新函数中。
*new Bullet(playerX,playerY,100)
太可怕了,应该是
Bullet(playerX,playerY,100)
因为它是按值传递的,所以你正在泄漏新分配的内存。啊。@放松,它就会泄漏……什么是德尔塔?记住,0*x=0让它工作。我用的每一样东西都是愚蠢的。正常for循环语法工作正常!或者,您可以为(敌人&e:enemys)
创建一个新型的C++11
,而不是使用Microsoft扩展。