0

ブール値の C 配列は、配列を持つ Cocos2d シーンを 2 回目に実行したときに値を保持していません。アプリを初めて起動すると、c 配列は正常に動作し、期待どおりに応答しますが、シーンの割り当てを解除してから再実行すると、c 配列に割り当てられた値が保持されません。以下のコードで間違っていることはありますか?

//.h
@interface GameplayLayer : CCLayer {
  bool playerLog[4];
  Hero *hero;
}

//.m
@implementation 
- (void)ccKeyDown:(NSEvent*)keyDownEvent{
    // Get pressed key (code)
    UInt16 keyCode = [keyDownEvent keyCode];
    // Set pressed key to true
    if (keyCode == 123) playerLog[0] = TRUE; // Left
    if (keyCode == 124) playerLog[1] = TRUE;  // Right
    if (keyCode == 126) playerLog[2] = TRUE;  // up
    if (keyCode == 125) playerLog[3] = TRUE;  // down
    // Other keys
    if (keyCode == 27) { } // Escape
}

 - (void)ccKeyUp:(NSEvent*)keyUpEvent
 {
     UInt16 keyCode = [keyUpEvent keyCode];
     // Set pressed key to true
     if (keyCode == 123) playerLog[0] = FALSE; // Left
     if (keyCode == 124) playerLog[1] = FALSE;  // Right
     if (keyCode == 126) playerLog[2] = FALSE;  // up
     if (keyCode == 125) playerLog[3] = FALSE;  // down
     // Other keys
    if (keyCode == 27) { } // Escape
}

-(void)update:(ccTime)delta {
  if (playerLog[0] == TRUE) {//false on the second run when key is pushed down}
4

3 に答える 3

0

bool playerLog[4]NSMutableArrayに変換して使用するか、このリンクから試すことをお勧めします

于 2012-12-17T06:52:45.030 に答える
0

init メソッドが表示されません。init メソッドを作成して ivar (特にplayerLog[]) を初期化したり、プロパティを作成したりする必要があります。

-(id)init
{
   if (self = [super init])
   {
     playerLog[0]=playerLog[1]=playerLog[2]=playerLog[3]=0;
     hero=nil; // or allocate it, not clear from your ex. how u use that.
   }
   return self;
}
于 2012-12-17T06:44:50.773 に答える
0

理由が何であれ、ゲームの状態をビュー関連のクラス (この場合は CCLayer) に保持しないでください。

ゲームの状態をグループ化する場所が必要です。ここで共有インスタンスに関する私の記事を参照してください: http://www.cocoanetics.com/2009/05/the-death-of-global-variables/

于 2012-12-17T06:17:22.607 に答える