我正在尝试使用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;
}
任何人都可以帮助我吗...
答案 0 :(得分:0)
这里有一些问题可能会导致您的问题。
首先,虽然不是一个bug而是一个性能问题,但你不应该在你的条件中放置count
和其他对象方法,如intValue
,因为这会减慢程序的速度。在循环之前定义一个等于此数字的局部变量,然后在循环中使用该变量,这样软件就不会计算相同的数组,也不会在每次循环时反复提取相同的值。
更重要的是,我没有看到你正在使用精灵帧缓存(sprite批处理)的任何地方,如果你使用的是非常大的精灵数组,你的数组数量很高,并且操作和绘制这些精灵很多次通常是子弹操作请求,你可能会不必要地给OpenGL增加很多负担,也许会造成你看到的缓冲区错误。
你应该为你的精灵阵列使用一个cocos sprite批处理,然后再试一次;至少它将大大提高项目的子弹操作性能。