添加项目符号会产生OpenGL错误0x0503 - [EAGLView swapBuffers]

时间:2012-02-15 06:08:18

标签: cocos2d-iphone

我正在尝试使用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 :(得分:0)

这里有一些问题可能会导致您的问题。

首先,虽然不是一个bug而是一个性能问题,但你不应该在你的条件中放置count和其他对象方法,如intValue,因为这会减慢程序的速度。在循环之前定义一个等于此数字的局部变量,然后在循环中使用该变量,这样软件就不会计算相同的数组,也不会在每次循环时反复提取相同的值。

更重要的是,我没有看到你正在使用精灵帧缓存(sprite批处理)的任何地方,如果你使用的是非常大的精灵数组,你的数组数量很高,并且操作和绘制这些精灵很多次通常是子弹操作请求,你可能会不必要地给OpenGL增加很多负担,也许会造成你看到的缓冲区错误。

你应该为你的精灵阵列使用一个cocos sprite批处理,然后再试一次;至少它将大大提高项目的子弹操作性能。