0

我的 C 布尔值数组在我第二次运行具有该数组的 Cocos2d 场景时没有保持它们的值。应用程序第一次启动时,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

我看不到 init 方法,您应该创建一个 init 方法来初始化您的 ivars(尤其是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

我建议您将您的转换bool playerLog[4]为 NSMutableArray 并使用,或者您可以从此链接尝试

于 2012-12-17T06:52:45.030 回答
0

不管这里的原因是什么:您不应该将游戏状态保存在与视图相关的类中,在本例中为 CCLayer。

您应该有一个地方可以将游戏状态组合在一起,请参阅我在此处共享实例的文章:http: //www.cocoanetics.com/2009/05/the-death-of-global-variables/

于 2012-12-17T06:17:22.607 回答