Как нарисовать много CCSprite без медленной производительности? - PullRequest
0 голосов
/ 17 сентября 2011

Я делаю такую ​​стрелялку. Все хорошо. но я понял, что если я проведу линию, отслеживающую мою стрелу, это будет здорово поэтому в планировщике я поместил некоторый код в мою игру, который должен нарисовать круг, куда идет стрелка. Но мне пришлось нарисовать так много кругов, поэтому игровой кадр не очень хорош, когда я снимаю мульти стрелку.

Есть ли другой лучший способ? Я уже использую CCSpriteBatchNode, plist, CCSpriteFrameCache. Я сделал все, что мог. Мне нужна помощь Большое спасибо

это мой код

...............
    [self schedule:@selector(CollisionDetection:)];
}


- (void)CollisionDetection:(ccTime)dt 
{
    for (CCSprite *arrow in arrows->arrowsArray) 
    {
            CCSprite *track = [CCSprite spriteWithSpriteFrameName:@"WhiteCircle.png"];
            [track setPosition:arrow.position];
            [arrows->rootLayer->arrowsSheet addChild:track];

            id delete = [CCFadeOut actionWithDuration:1.0];
            id deleteAction= [CCSequence actions:delete ,[CCCallFuncN actionWithTarget:self selector:@selector(spriteActionFinished:)], nil];
            [track runAction:deleteAction];
    .......    

Ответы [ 3 ]

1 голос
/ 17 сентября 2011

Распределение объектов - это большие накладные расходы. Если ваша игра работает медленно, вы должны рассмотреть вопрос о создании пула стрелок в начале игры и запускать его только тогда, когда вам это нужно. Если он больше не виден, просто установите его в неактивное состояние и используйте его в следующий раз, когда вам понадобится стрелка.

0 голосов
/ 18 сентября 2011

Когда есть анимация, критичная ко времени, я не обращаю внимания на CCCallFunc (N), так как он может остановить планировщик на заметное количество времени.Когда я читаю ваш код, у вас есть CallFunc через каждый запланированный интервал ... хмммм.Вы пытались запустить это без планировщика, то есть упаковать и запустить все ваши анимации сразу, с одним CallFunc в конце?Вместо изменения позиции в рамках запланированного интервала, используйте CCMoveTo, который вы будете запускать одновременно с анимацией отслеживания.

0 голосов
/ 18 сентября 2011

Похоже, ваша проблема не в стрелках, а в кругах, которые, я думаю, тоже являются объектами Кокоса. Вы бы лучше научились рисовать текстуру окружности прямо на экране, используя команды opengl вместо объектов. Это очень поможет.

...