2012-02-15 41 views
0

我正在尝试使用cocos2d创建我的第一个游戏。我正在尝试插入子弹。当我得到这个错误。问题是只有当一名球员不是为敌方精灵射击才会发生。当这个错误发生时,不仅玩家与另一个玩家交换位置,而且该子弹在击中两个目标后被破坏。添加子弹会产生OpenGL错误0x0503 in - [EAGLView swapBuffers]

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; 
} 

谁能帮助我在这里..

回答

0

这里有几个问题可能会导致你的问题。

首先,虽然不是一个错误,但更多的是性能方面的事情,您不应该在您的条件下放置count s和其他对象方法,如intValue,因为这会降低程序的运行速度。在等于此数字的循环之前定义一个局部变量,然后在循环中使用该变量,以便软件在每次循环时都不会重复计算相同的数组或重复提取相同的值。

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

你应该为你的精灵数组使用一个cocos sprite批处理并给这个另一个尝试;至少它会大大提高项目在子弹操作上的表现。