2010-12-09 61 views
1

Je travaille actuellement sur un jeu Mac Cocos2D en Objective-C.Mouvement du joueur ccKeyDown d'Objective-C

J'ai le mouvement de travail, mais j'ai une question ..

J'utilise ce code pour déplacer mon lecteur, il est une mouche a donc besoin de libre circulation dans toutes les directions.

événement Clavier:

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

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

Mon problème est quand mon joueur déplace vers la gauche, il est impossible d'ajouter la touche haut en même temps, de sorte que le joueur sera se déplacer vers la gauche et vers le haut. Quel est le meilleur moyen d'y parvenir?

Répondre

1

Il existe une astuce simple: déclarer un tableau de type bool arrows[4], où chaque élément est un état de bouton fléché et true ==. Vous définissez maintenant un élément de tableau à true dans l'événement keyDown et à false dans keyUp. La dernière chose dont vous avez besoin - une minuterie pour vérifier ce tableau et déplacer des objets.

En fait, le temporisateur est une meilleure solution que la gestion régulière des événements car vous pouvez contrôler la "vitesse de traitement des clés".