我目前正在使用Objective-C中的Cocos2D Mac游戏。
我的运动正在运转,但我还有一个问题......
我使用此代码移动我的播放器,它是一只苍蝇,所以它需要在所有方向上自由移动。
键盘事件:
- (void)ccKeyDown:(NSEvent*)keyDownEvent
{
// Get pressed key (code)
NSString * character = [keyDownEvent characters];
unichar keyCode = [character characterAtIndex: 0];
// Player movement
if (keyCode == 119) {
playerMoveUp = TRUE;
} else if (keyCode == 115) {
playerMoveDown = TRUE;
}
if (keyCode == 100) {
playerMoveLeft = TRUE;
} else if (keyCode == 97) {
playerMoveRight = TRUE;
}
}
- (void)ccKeyUp:(NSEvent*)keyUpEvent
{
// Get pressed key (code)
NSString * character = [keyUpEvent characters];
unichar keyCode = [character characterAtIndex: 0];
// Player movement
if (keyCode == 119) {
playerMoveUp = FALSE;
} else if (keyCode == 115) {
playerMoveDown = FALSE;
}
if (keyCode == 100) {
playerMoveLeft = FALSE;
} else if (keyCode == 97) {
playerMoveRight = FALSE;
}
}
Gametime循环:
-(void) tick: (ccTime) dt
{
// Get player current position
NSInteger playerPositionX = player.position.x;
NSInteger playerPositionY = player.position.y;
// Player movement
if (playerMoveUp == TRUE) {
player.position = ccp(playerPositionX, playerPositionY + 1);
}
if (playerMoveDown == TRUE) {
player.position = ccp(playerPositionX, playerPositionY - 1);
}
if (playerMoveLeft == TRUE) {
player.position = ccp(playerPositionX + 1, playerPositionY);
}
if (playerMoveRight == TRUE) {
player.position = ccp(playerPositionX - 1, playerPositionY);
}
}
我的问题是当我的播放器向左移动时,无法同时添加向上键,因此播放器将向左和向上移动。实现这一目标的最佳方法是什么?
答案 0 :(得分:1)
有一个简单的技巧:声明一个像bool arrows[4]
这样的bool数组,其中每个元素都是一个箭头按钮状态, true == press 。现在,您在keyDown事件中将数组元素设置为true,并在keyUp中将其设置为false。你需要的最后一件事 - 一个检查这个数组和移动对象的计时器。
实际上,计时器比常规事件处理更好,因为你可以控制“键处理速度”。