2011-05-04 86 views
0

我正在写一个游戏,并试图使用箭头键移动一个人。代码按下按钮

我有这样的代码

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

这工作,但我希望玩家把每一个键按下时,我创建和动画循环四个步骤。所以玩家不能输入任何更多的移动命令,直到动画结束,他们已经采取了四个步骤来制作代码。

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

现在的问题是,现在一旦按下按钮,程序就会像按住按钮一样继续移动,直到按下另一个方向。

任何人都可以解释外循环做了什么代码和解决问题?

它是在Visual C++ 2005和编程的Direct X 9.C

编辑:

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

+1

moveDown里面的代码是什么样的? – rzetterberg 2011-05-04 12:07:41

+0

@Ancide world.x + 16 – Skeith 2011-05-04 12:10:35

回答

1

只需跟踪变量中的关键状态。所以你可以重置一个移动计数器。类似这样,结合两者:

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

我曾尝试过,但它仍然执行if移动时的语句内容大于4.我也有一个hack,其中移动函数检查player.move是否为false,但这会导致处理器时间,因为函数需要在每个循环中调用每个对象是否应该是。 – Skeith 2011-05-04 12:59:11

+1

我喜欢我的C++版本比你的更好,至少如果()语句在我使用它们时表现可预测。 – 2011-05-04 13:11:43

+0

它只是一个嵌套的if语句时才会出现问题 – Skeith 2011-05-04 13:16:12

0

很难说没有看到更多的代码库,但我猜你在移动播放器后不会重新设置player.move。你有没有尝试在那里粘贴一些休息点来看看被调用的内容,为什么?

如果您删除if(player.move == false)行,它是否有同样的问题? ..或者你在其他地方改过什么了吗?如果你能发布更多的代码库的喜欢整下移功能和anythnig否则其交互(例如动画代码),这将有助于我们帮助您......

[编辑]是下移的宏?也许你有一些特殊的副作用从那里消失?如果没有,函数调用后它应该有一个分号。

KEY_DOWN返回什么?这是一个API调用?尝试根据您期望它返回的确切值进行测试?

+0

我正在重置player.move,我有突破指出它。一切都按照我的逻辑工作,但是一旦if(Key_Down(DIK_DOWN))语句被读取为真,一旦它永远从那一点开始执行,无论如何。 – Skeith 2011-05-04 12:18:52

+0

那么使用if语句没什么问题。你在这里看到的神器将会由其他东西引起。如果你不准备发布更多的代码,恐怕在黑暗中我们可以提供更多的刺伤。 – 2011-05-04 15:26:40