我用Cocos2D编写了一个简单的游戏,在这里我有一个在简单的绿色领域中散步的动画精灵。Cocos2D - 为什么我的FPS如此之低?带地图的单场景
行走精灵是64x64px,游戏杆来自Sneakyjoystick类,绿色字段由5-6个32x32像素组成,使用Tiled制作成tilemap。使用平铺,我创建了一个50 x 50的瓷砖地图。
我得到20-30 FPS,我不知道为什么。我将地图尺寸减小到10x10个瓦片,并且达到50-60 FPS。我不知道该怎么办?
编辑:我已经添加了游戏层的初始化块。我正在模拟器上测试。
-(id) init
{
if((self=[super init]))
{
self.tileMap = [CCTMXTiledMap tiledMapWithTMXFile:@"TileMap.tmx"];
self.background = [_tileMap layerNamed:@"Background"];
self.meta = [_tileMap layerNamed:@"Meta"];
self.topLayer = [_tileMap layerNamed:@"TopLayer"];
_topLayer.visible = YES;
_background.visible = YES;
_meta.visible = YES;
[self addChild:_tileMap z:-1];
[[CCSpriteFrameCache sharedSpriteFrameCache]addSpriteFramesWithFile:@"male_walkcycle.plist"];
sceneSpriteBatchNode = [CCSpriteBatchNode batchNodeWithFile:@"male_walkcycle.png"];
[self addChild:sceneSpriteBatchNode z:0];
CCTMXObjectGroup *objects = [_tileMap objectGroupNamed:@"Objects"];
NSAssert(objects != nil, @"'Objects' object group not found");
NSMutableDictionary *spawnPoint = [objects objectNamed:@"SpawnPoint"];
NSAssert(spawnPoint != nil, @"SpawnPoint object not found");
int x = [[spawnPoint valueForKey:@"x"] intValue];
int y = [[spawnPoint valueForKey:@"y"] intValue];
Caster *casterPlayer = [[[Caster alloc] init] initWithSpriteFrame:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:@"male_walkcycle_19.png"]];
casterPlayer.position = ccp(x, y);
casterPlayer.joystick = nil;
[sceneSpriteBatchNode addChild:casterPlayer z:1000 tag:kCasterTagValue];
[casterPlayer release];
CCSprite *sprite = [CCSprite node];
CGSize size = CGSizeMake(50,50);
GLubyte *buffer = malloc(sizeof(GLubyte)*4);
for (int i=0;i<4;i++) {buffer[i]=255;}
CCTexture2D *tex = [[CCTexture2D alloc] initWithData:buffer pixelFormat:kCCTexture2DPixelFormat_RGB5A1 pixelsWide:1 pixelsHigh:1 contentSize:size];
[sprite setTexture:tex];
[sprite setTextureRect:CGRectMake(0, 0, size.width, size.height)];
free(buffer);
sprite.position = ccp(x, y);
sprite.visible = NO;
[self addChild:sprite z:5 tag:debugBoxTagValue];
[self setViewpointCenter:casterPlayer.position];
[self scheduleUpdate];
}
return self;
}
你能发表一些你的代码吗?很难说明你的问题是什么。你是否也在模拟器或实际设备上测试了这个? – 2013-03-09 20:17:54
我添加了我的游戏层的init代码。我的其他代码只是一个更新循环,它通过场景spritebatchnote的子节点并运行其更新方法。目前,唯一的更新方法是针对单个精灵,该精灵获取虚拟手柄的速度并更新其位置,然后进行边界检查。 – trianta2 2013-03-09 21:15:00