按下代码按钮

时间:2011-05-04 12:05:50

标签: c++ directx

我正在写一个游戏,并试图让一个人用箭头键移动。

我有这段代码

if (Key_Down(DIK_DOWN))
{movedown(player)}

这样可行但是因为我希望每次按下键时玩家都会采取四个步骤,我创建了动画循环。所以玩家不能再输入任何移动命令,直到动画结束,他们已经采取了四个步骤来制作代码。

if(player.move == false)
{
if (Key_Down(DIK_DOWN))
{movedown(player)}
}

问题在于,现在按下一个按钮后,程序的作用就像按下按钮一样,玩家继续移动直到按下另一个方向。

任何人都可以解释外部循环对代码做了什么并修复了问题吗?

它在visual c ++ 2005中编程并直接编写为x 9.c

编辑:

如果我删除了外循环,那么按下按钮只会注册一次,所以我不认为这是移动功能。

2 个答案:

答案 0 :(得分:1)

只需跟踪变量中的keystate即可。所以你可以重置一个移动计数器。像这样的东西,结合两者:

int MovingDown = 0;
...
if (!Key_Down(DIK_DOWN)) MovingDown = 0;
else if (MovingDown < 4) {
    MovingDown++;
    movedown(player);
}

答案 1 :(得分:0)

很难说没有看到更多的代码库,但我猜你在移动播放器后没有重新设置player.move。你有没有试过在那里贴上一些断裂点以查看被叫的内容以及为什么?

如果删除if(player.move == false)行,是否会出现同样的问题? ..或者你有别的地方改变了吗?如果您可以发布更多的代码库,例如整个moveown函数和任何其他交互的代码(例如动画代码),它将帮助我们帮助您......

[编辑] 移动了一个宏?也许你有一些特殊的副作用从中消失?如果没有,它应该在函数调用后有一个半冒号。

KEY_DOWN返回什么?这是API调用吗?尝试针对您希望返回的确切值进行测试?