Добавление маркеров приводит к ошибке OpenGL 0x0503 в - [EAGLView swapBuffers] - PullRequest
0 голосов
/ 15 февраля 2012

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

OpenGL error 0x0503 in -[EAGLView swapBuffers]

мой класс оружия имеет следующую реализацию пули

if([self.bulletsArray count] <= ([self.numberOfBulletsPerFire intValue]*[self.numberOfBulletsOnScreen intValue]))
{
    for (int i =0; i< [self.numberOfBulletsPerFire intValue]; i++) {
        BulletClass *bullet = [[Bullet alloc]initWithPosition:position Direction:direction strength:self.weaponLevel spriteArray:spriteArray enemyArray:enemyArray base:base];
        [self.bulletsArray addObject:bullet];
        [self addChild:bullet];
        [bullet release];bullet = nil;
    }
}

в BulletClass у меня есть метод init как:

(id)initWithPosition:(CGPoint)position 
        Direction:(KDirectionInput)direction 
         strength:(NSNumber *)strength 
      spriteArray:(NSMutableArray *)sprites 
       enemyArray:(NSMutableArray *)enemyArray 
             base:(CCSprite *)base{
if ((self = [super init])) {
    self.base = base;
    self.strength = strength;
    self.movementDirection = direction;
    self.spriteArray = sprites;
    self.enemyArray = enemyArray;
    self.velocity = 200/1;
    self.bullet.position = position;
    [self addChild:self.bullet z:2];
    }
    return self;
}

Может ли кто-нибудь помочь мне здесь ..

1 Ответ

0 голосов
/ 15 февраля 2012

Здесь есть несколько проблем, которые могут способствовать вашим проблемам.

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

Что еще более важно, я нигде не вижу, чтобы вы использовали кеш спрайтовых кадров (спрайт-пакет), и если вы используете спрайт-массивы очень большого размера, где количество массивов велико, и манипулируете ими и рисуете эти спрайты много раз, как есть.обычно запрашиваемые операциями с маркерами, вы могли бы добавить ненужную нагрузку на OpenGL, возможно, создав ошибку буфера, которую вы видели.

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

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