Каковы возможные причины отставания в игре iphone cocos2d? - PullRequest
0 голосов
/ 21 февраля 2011

Я делаю игру, похожую на перебор для iPhone. Я использую cocos2d. Я иногда сталкиваюсь с лагом во время игры. У меня есть 6 различных типов шаров. Я создаю 30 экземпляров каждого типа и использую их повторно. Проблема возникает, когда я стреляю в мяч, и мяч не сталкивается ни со стеной по бокам, ни с шарами на экране. Я считаю, что это может быть связано с отставанием. Когда мяч выстрелил, я запускаю планировщик каждые 0.01 с, чтобы проверить, не сталкивается ли он с другими шарами. В каждом интервале я создаю прямоугольник для шара, который был застрелен, и создаю прямоугольник для всех других шаров и проверяю их пересечение.

Мне было интересно, что может быть причиной отставания. Я также пытаюсь выяснить, есть ли горлышко бутылки, используя Инструменты. Может ли иметь много загруженных изображений вызвать задержку? или причиной могут быть многочисленные численные расчеты?

Было бы полезно, если бы вы могли поделиться подобным опытом или предложить возможные причины отставания и как их избежать.

Спасибо Abhinav

Ответы [ 2 ]

1 голос
/ 21 февраля 2011

Таймер 100 Гц (0,01 с) замедлит вашу игру. Большинство ПК даже не могут работать с планировщиком с такой частотой (главным образом, с накладными расходами ОС, но я отвлекся).

Настоятельно рекомендуем использовать метод CCLayer update вместо планировщика или NSTimer.

0 голосов
/ 26 февраля 2011

ОК, я разобрался с проблемой:)

Дело в том, что в моей игре я загружаю 100 шаров.20 каждого из 5 типов.Кроме того, я также загружаю некоторые анимации взрыва и некоторые другие анимационные существа.Таким образом, проблема возникает потому, что каждая текстура была загружена отдельно, хотя большинство из них используют одну и ту же текстуру.Таким образом, в каждый кадр загружалось 120 нечетных текстур.

Решение - использовать Batchnode.Поэтому вместо 20 теперь я загружаю только 1 текстуру.Таким образом, вместо 120 я теперь загружаю только 6 или 7 :) Теперь все ошибки, связанные с лагом и лагом, исчезли.

[[CCTextureCache sharedTextureCache] addImage:@"ball-black.png"];
SpriteSheet1 = [CCSpriteBatchNode batchNodeWithFile:@"ball-black.png"];
[self addChild:SpriteSheet1 z:4];
//---------FIRE BALLS---------

for (int i = 0; i<20; i++) 
{
    f[i] = [[Fire alloc]init];
    //[f[i] getball] = [CCSprite spriteWithFile:@"ball-black.png"];
    [SpriteSheet1 addChild:[f[i] getball]];
    [[f[i] getball] setPosition:ccp(220,-200)];
    f[i].isBallMoving = FALSE;
}

Надеюсь, это поможет кому-то с такой же проблемой.

Спасибо Стивену за ваши ответы:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...