Sprites * bullet1 = [Sprite spriteWithFile:@"bullet.png"];
........
Sprites * bullet8 = [Sprite spriteWithFile:@"bullet.png"];
有没有任何方法可以存储大量的子弹而不是逐个定义它们? 因为敌人也可以射击,我可以想象FPS可能会接近于零.....
任何人都可以帮助我吗?
答案 0 :(得分:3)
你可以在那里做一些“子弹池”,因为你正在使用cocos,我要做的就是在开始游戏时分配很多子弹。检查你需要的子弹数量,预先分配。
当游戏中的实体需要发射子弹时,它只需要向该池发出子弹,将属性提供给“预先分配”的子弹,子弹出现在屏幕上,当它影响/消失时然后你将那颗子弹送回你的子弹池。
如果您需要一些代码:
/*You pre-allocate your bullets.*/
for(int i = 0; i < MAX_BULLETS; i++)
{
Bullet *aBullet = [[Bullet alloc] init];
[bulletsArray addObject:aBullet];
[aBullet release];
}
//Then in game when you fire:
Bullet *aBullet = [PoolManager bulletWithSprite:myBulletSprite]; // Where myBulletSprite is PRE allocated and you don't allocate sprites in Game.
答案 1 :(得分:1)
您可以将精灵存储在数组中:
NSMutableArray * bulletsBuilder = [[NSArray alloc] init];
for(int i = 0; i < MAX_NUMBER_OF_SPRITES; ++i) {
[bullets addObject:[Sprite spriteWithFile:@"bullet.png"]];
}
NSArray * bullets = [NSArray arrayWithArray:bulletsBuilder];
[bulletsBuilder release];
稍后使用其标识符访问它们:
Sprite * spr = [bullets objectAtIndex:spriteIndex];
答案 2 :(得分:0)
有什么问题?使用sprite批处理!它是一种特殊的层,允许您加速多个精灵的渲染。
答案 3 :(得分:-1)
核心动画图层是轻量级的,可以帮助您提高性能。您可以加载图像一次,然后将项目符号图像加载到CALayers数组的内容中。像这样:
// bulletImage is an instance variable
bulletImage = [UIImage imageNamed:@"bullet.png"];
bulletLayers = [[NSMutableArray alloc] init];
for (i = 0; i < 9; ++i)
{
CALayer *bulletLayer = [CALayer layer];
[bulletLayer setBounds:[bulletImage bounds]];
[bulletLayer setPosition:gunBarrelOrigin];
[bulletLayer setContents:(id)[bulletImage CGImage]];
[bulletLayers addObject:bulletLayer];
}
// Use the array of layers.
// ...
您没有指定是否在Sprite类中使用视图或图层,但如果您多次加载相同的图像,则肯定会产生不必要的开销。