Моя CCScene ведет себя странно?

В своем заявлении я замечаю, что в моей CCScene могут быть вещи, которые кажутся неправильными.

Я просто объясню 3 вещи: 1. Мой FPS не отображается нигде в представлении, даже если я делаю это из своего UIViewController (мой CCLayer - это его собственный класс)

.H моего класса CCLayer выглядит так:

@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:)];

Затем в моем игровом цикле я NSLog его, и журнал никогда не отображается в консоли, поэтому я понимаю, что он не вызывается.

Еще одна странность заключается в том, что мой метод делегата UIAccelerometer не вызывается, хотя я и делаю это:

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

Есть причины почему?

  1. И, наконец, ни один из моих CCSprites не показывает. У меня есть несколько CCSprites, которые я добавляю, как [self addChild:mySprite]; Но я их не вижу. Все они привязаны к b2Bodys, а некоторые анимированы, но я вижу только один CCSprite, и я не уверен, почему это единственный, который я вижу.

У кого-нибудь есть идеи, почему происходит что-то из этого?

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 ответ

Решение

Отсутствует отображение FPS: вам нужно добавить "fps_images.png" в ваш проект.


Если вы планируете этот селектор:

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

Убедитесь, что метод реализован следующим образом:

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

Стандартный способ - просто позвонить

[self scheduleSelector];

и реализовать:

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

Это тоже немного быстрее.

Кроме того, используйте точки останова, чтобы проверить, вызывается ли строка кода или нет. Прочтите это руководство, если вы еще не знакомы с отладкой XCode.


Включив акселерометр И установив делегат UIAccelerometer, вы пытаетесь получать события акселерометра через Cocos2D И через UIAccelerometer. Выберите только одно:

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

Кроме того, updateInterval 10/4 = 2,5 … это означает, что вы получаете события акселерометра не чаще, чем каждые 2,5 секунды. Вы хотите, чтобы это было число, которое составляет долю секунды, например 0,1 или меньше.


Если спрайты, прикрепленные к телам b2, не видны, проверьте их положение. У меня есть предчувствие, что вы забыли преобразовать координаты счетчика Box2D в пиксельные координаты. Попробуйте проверить, появляются ли спрайты, если они не связаны с телами Box2D.

Другие вопросы по тегам