1

私は現在、Objective-C で Cocos2D Mac ゲームに取り組んでいます。

ムーブメントは動作していますが、もう1つ質問があります..

このコードを使用してプレーヤーを移動します。これはハエなので、あらゆる方向に自由に移動する必要があります。

キーボード イベント:

- (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;
 }
}

ゲームタイム ループ:

-(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);
 }
}

私の問題は、プレーヤーが左に移動しているときに上キーを同時に追加できないため、プレーヤーが左と上に移動することです。これを達成するための最良の方法は何ですか?

4

1 に答える 1

1

単純なトリックがあります:bool arrows[4]各要素が矢印ボタンの状態でtrue == 押された のように bool の配列を宣言します。ここで、配列要素を keyDown イベントで true に設定し、keyUp イベントで false に設定します。最後に必要なのは、この配列をチェックしてオブジェクトを移動するためのタイマーです。

実際、「キー処理速度」を制御できるため、タイマーは通常のイベント処理よりも優れたソリューションです。

于 2010-12-09T11:42:31.697 に答える