我的CCScene表现得很奇怪?

时间:2011-11-17 21:16:24

标签: ios cocos2d-iphone scene cclayer

在我的应用程序中,我注意到在我的CCScene中可能存在一些似乎不正确的事情。

我只是解释三件事: 1.即使我从我的UIViewController(我的CCLayer是它自己的类)执行此操作,我的FPS也不会显示在视图中的任何位置

我的CCLayer类的.h看起来像这样:

@interface CCMyGame : CCLayer {

CCDirector* director = [CCDirector sharedDirector];
    [CCDirector setDirectorType:kCCDirectorTypeDisplayLink];
    [director setAnimationInterval:1.0/60];
    [director setOpenGLView:self.eaglView];
    [director setDisplayFPS:YES];
    [director runWithScene:[CCSceneGame scene]];

我看到了我的一个CCSprite,但就是这样,我什么都看不到。

然后在我的CCLayer课程中,我这样做是为了完全激活CCScene:

+(CCScene *) scene
{
    CCScene *scene = [CCScene node];
    CCSceneGame *layer = [CCSceneGame node];
    [scene addChild:layer];
    return scene;
}

为什么会这样?

  1. 我的游戏循环没有被调用。 我这样做:

    [自我安排:@selector(myGameLoop:)];

  2. 然后在我的游戏循环中我NSLog它并且日志永远不会显示在控制台中,所以我意识到它没有被调用。

    另一件奇怪的事情是,即使我这样做,我的UIAccelerometer委托方法也没有被调用:

    self.isAccelerometerEnabled = YES;
        [UIAccelerometer sharedAccelerometer].delegate = self;
        [UIAccelerometer sharedAccelerometer].updateInterval = 0.10f/4.0f;
    

    有什么原因吗?

    1. 最后,除了我的一位CCSprites之外,其他人都没有。 我有几个CCSprites,我添加像[self addChild:mySprite];但我没有看到它们。它们都附属于b2Bodys,有些是动画,但我只看到一个CCSprite,我不知道为什么这是我唯一看到的。
    2. 有没有人知道为什么会发生这些事情?

      EDIT1:

      #1:已修复!

      #2: 我这样做,它仍然无法正常工作! 我这样做是为了安排它:

      [self schedule:@selector(cocosgameLoop:)];
      

      这是我的方法:

          -(void)cocosgameLoop:(ccTime)delta {
          NSLog(@"cocosgameLoop");
      }
      

      NSLog没有被调用。当你向我展示第二种方式时,通常不会像游戏循环那样获得更新,这只会使方法调用一次。 为什么不调用该方法?

      同样奇怪的是,我的UIAccelerometer委托方法仍未被调用! 我现在正在这样做:

      self.isAccelerometerEnabled = YES;
      [UIAccelerometer sharedAccelerometer].updateInterval = 1/30.0f;
      

      我NSLogged我的UIAccelerometer委托方法,它似乎仍然没有被调用:

      - (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {
          NSLog(@"accelerometer");
      }
      

      Edit2:现在看来我的UIAccelerometer方法会被调用:

      [[UIAccelerometer sharedAccelerometer] setDelegate:self];
      [[UIAccelerometer sharedAccelerometer] setUpdateInterval:1/60];
      

      为什么会这样?我想我在哪里读到我的图层没有添加到我的层次结构中,是真的吗?我从这里得到了这个想法,也许这就是为什么所有这些问题都在发生:http://www.cocos2d-iphone.org/forum/topic/13988

      #3:我的CCSprites没有关注b2Body,相反,它是另一种方式。你在这里给了我这段代码:b2Body Animation?

      我正在设置我的CCSprites的位置,就像UIKit一样,也许这就是原因。这是一个未显示的精灵的例子:

      CGPoint point = CGPointMake(50, 50);
      point = [[CCDirector sharedDirector] convertToGL:point];
      [sprite setPosition:point];
      [self addChild:sprite z:1 tag:1];
      

1 个答案:

答案 0 :(得分:2)

缺少FPS显示:您需要将“fps_images.png”添加到项目中。


如果您安排此选择器:

[self schedule:@selector(myGameLoop:)];

确保方法实现如下:

-(void) myGameLoop:(ccTime)delta
{
}

标准方法是打电话

[self scheduleSelector];

并实施:

-(void) update:(ccTime)delta
{
}

它也有点快。

此外,使用断点来测试是否调用了一行代码。如果您还没有introduced to Xcode debugging,请阅读本指南。


通过启用加速度计并设置UIAccelerometer代表,您尝试通过Cocos2D和UIAccelerometer接收加速度计事件。只选一个:

self.isAccelerometerEnabled = YES;
[UIAccelerometer sharedAccelerometer].updateInterval = 1/30.0f;

此外,updateInterval 10/4 = 2.5 ...这意味着您最多每2.5秒获得一次加速度计事件。你会希望这是一个只有0.1秒或更短时间的数字。


如果看不到附在b2Bodies上的精灵,请检查它们的位置。我有一种预感,你忘了从Box2D仪表坐标转换为像素坐标。如果精灵没有连接到Box2D身体,则尝试进行测试。