【发布时间】:2011-07-29 13:22:22
【问题描述】:
我正在制作我的第一个游戏,到目前为止我唯一的问题是内存使用(我没有支付开发人员费用,所以我在模拟器中运行它)。到目前为止,它占用了大约 23MB,从我读过的内容来看,这已经很多了。这是真的?首先,在我的主菜单中,我最大的问题是我的背景,它占用了 2MB 以上的内存。那样行吗?其次,我的游戏场景中的背景也占用了 2MB+。那样行吗?第三,我有 2 个 CCSpriteFrameCaches,一个有 55 个 .PNG 文件,另一个有 12 个。有 55 个图像的那个占用了大约 9MB 的内存。这听起来正常吗?第二个占用大约 3MB。这听起来正常吗?
在按下按钮之前,55 张图像不会添加到图层中(这会占用更多大约 7MB 的内存,不知道为什么)。然后当第二个按钮被按下时,第一张图像被删除,第二张图像被添加。然后,当再次按下第一个按钮时,第二个图像被删除并添加第三个图像(依此类推,第四个)。我的问题是使用 CCSpriteFrameCache 或 CCSprite 会更好吗?或者有什么替代方案。
如果有人有更好的方法,请告诉我。非常感谢任何帮助!
示例代码:
-(void)buttons:(CGPoint)touchLocation {
if (CGRectContainsPoint(leftB.boundingBox, touchLocation) && tapP == YES && paused == NO) {
if (count == 1)
{
isBOP = YES;
count = 2;
} else if (count == 3)
{
[bspriteSheet removeChild:_b cleanup:YES];
[pspriteSheet removeChild:_p cleanup:YES];
_p = [CCSprite spriteWithSpriteFrameName:@"p3.png"];
[pspriteSheet addChild:_p];
count = 4;
_p.position = ccp(240, 215);
_b = [CCSprite spriteWithSpriteFrameName:@"b2.png"];
_b.position = ccp(240, 158);
[bspriteSheet addChild:_b];
}
if (CGRectContainsPoint(rightB.boundingBox, touchLocation) && tapP == YES && paused == NO) {
if (count == 2)
{
[self removeChild:gb cleanup:YES];
[pspriteSheet removeChild:_p cleanup:YES];
_p = [CCSprite spriteWithSpriteFrameName:@"p2.png"];
_p.position = ccp(240, 215);
[pspriteSheet addChild:_p];
_b = [CCSprite spriteWithSpriteFrameName:@"b1.png"];
_b.position = ccp(240, 158);
[bspriteSheet addChild:_b];
count = 3;
} else if (count == 4)
{
[bspriteSheet removeChild:_b cleanup:YES];
[pspriteSheet removeChild:_p cleanup:YES];
_p = [CCSprite spriteWithSpriteFrameName:@"p4.png"];
[pspriteSheet addChild:_p];
count = 5;
_p.position = ccp(240, 215);
_b = [CCSprite spriteWithSpriteFrameName:@"b3.png"];
_b.position = ccp(240, 158);
[bspriteSheet addChild:_b];
}
【问题讨论】:
-
只是一个提示,对不需要清晰或高分辨率的精灵使用 pvr 图像格式,因为它们占用的内存更少。祝你的第一场比赛好运! :)
标签: iphone cocos2d-iphone