Моя CCScene ведет себя странно? - PullRequest
0 голосов
/ 18 ноября 2011

В моем приложении я замечаю, что в моей 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;
}

Почему это так?

Мои игровые циклы не получаются.Я делаю это:

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

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

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

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

Любые причиныпочему?

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

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

Редактировать1:

# 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: Itтеперь кажется, что мой метод 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 Ответ

2 голосов
/ 18 ноября 2011

Отсутствует отображение 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 или менее.


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

...