gpt4 book ai didi

iOS 和 Cocos2d - 更改 CCSprite 的图像和新尺寸 = 失败

转载 作者:行者123 更新时间:2023-11-28 23:11:05 24 4
gpt4 key购买 nike

我的游戏中的一个增益是主要 sprite 的尺寸减小。所以为了内存起见,我没有在每一帧中循环 sprite.scale,而是以低于原始 Sprite 的百分比大小重新保存了 Sprite ,并且只是想替换它。然后一旦“死亡”发生或计时器用完,原始 Sprite 返回。

所以,我使用这段代码来缩小它:

[player setTexture:[[CCTextureCache sharedTextureCache] addImage:@"player-small.png"]];

以及这段重置为正常的代码:

[player setTexture:[[CCTextureCache sharedTextureCache] addImage:@"player-orig.png"]];

然而,原始图像(在初始化和重置时)看起来很正常。但是当我将它更改为新 Sprite (其尺寸刚好是原始 Sprite 的 75%)时,它会更改它,但只显示新 Sprite 的一个象限,但具有原始尺寸。

我尝试在重新构造 sprite 之前修改 sprite.contentsize,但所做的只是改变大小,但不会影响图像困惑的问题。

下面是一些视觉示例:

原文:

Original


经过 contentSize 修改的重新构造图像:

Retextured Image with contentSize modification


将图像重新纹理化为原始图像,但 contentSize 未正确重置(哎呀,但这根本不是问题 - 我只是忘了读取尺寸代码):

Retexted image to the Original image with the contentSize not reset properly (oops, but this isn't a problem at all - i just forgot to readd the size code):

PS -- 我的所有 Sprite 都有“-hd.png”版本,所以我只是想补充一点,以防有人想知道(到目前为止的图像和测试只在“nonretina”模拟器上进行)。

谢谢!


编辑:在视网膜模拟器上测试期间也会出现问题。

最佳答案

由于您主要关心的是内存,我建议只使用纹理图集。

我将您的原始图像复制到图像编辑程序中以查看其尺寸。该图像的大小为 73x71 像素,这意味着它作为尺寸为 128x128 的纹理存储在内存中,因为纹理将具有二维的幂。这将使纹理使用 64 KB 的内存(假设 32 位颜色深度)。使用纹理图集,您将能够更紧密地打包纹理,并且可以使用 CCSprite setDisplayFrame 更轻松地更改显示的框架。方法。

此外,您正在使用纹理缓存:

[CCTextureCache sharedTextureCache] addImage:@"player-small.png"]
[CCTextureCache sharedTextureCache] addImage:@"player-orig.png"]

除非您明确释放该纹理的内存,否则两个纹理都将保留在内存中。如果您释放当前未使用的纹理的内存,并经常交换这些纹理,您的游戏将花费大量时间释放内存并从设备的闪存重新加载图像 - 即使图像相对较小.

如果有多个 Sprite 使用任一纹理,则尝试卸载/重新加载纹理没有任何意义,因为会出现两个或更多 Sprite 使用任一纹理的情况。

最后,我们说的是最多 64 KB 的内存。如果您担心内存使用和性能,您应该做的是加载 PVR 纹理,它在内存和磁盘上都只是 PNG 文件大小的一小部分(但会失去一些颜色活力)。

看看TexturePacker用于创建纹理图集和 PVR 图像。

关于iOS 和 Cocos2d - 更改 CCSprite 的图像和新尺寸 = 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8252330/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com