我正在使用以下代码创建一个爆炸精灵动画,图像为 440x440 像素(110x110 像素帧的 4x4 网格),带有 880x880 的 -hd 图像(正在加载到视网膜设备上);
CCTexture *explosionTexture = [CCTexture textureWithFile:@"explosion.png"];
NSMutableArray *frames = [NSMutableArray array];
int frameCount = 0;
for (int y = 0; y < 4; y++) {
for (int x = 0; x < 4; x++) {
CCSpriteFrame *frame = [CCSpriteFrame frameWithTexture:explosionTexture
rectInPixels:CGRectMake(x*110, y*110, 110, 110)
rotated:NO
offset:CGPointZero
originalSize:CGSizeMake(440, 440)];
[frames addObject:frame];
frameCount++;
if (frameCount == 14) break;
}
}
这在非视网膜 iPhone 上工作正常,但是当我在视网膜 iPhone 上测试时,矩形是错误的(每帧是它应该大小的 1/4)
我已将 for 循环中的 frame.rect 和 x / y 放入 an 中NSLog
,并在视网膜设备上显示;
2014-05-09 23:22:10.872 SimpleGame[4131:70b] x:0, y:0
2014-05-09 23:22:10.872 SimpleGame[4131:70b] frame.rect:{{0, 0}, {55, 55}}
2014-05-09 23:22:10.873 SimpleGame[4131:70b] x:1, y:0
2014-05-09 23:22:10.873 SimpleGame[4131:70b] frame.rect:{{55, 0}, {55, 55}}
2014-05-09 23:22:10.874 SimpleGame[4131:70b] x:2, y:0
2014-05-09 23:22:10.874 SimpleGame[4131:70b] frame.rect:{{110, 0}, {55, 55}}
这在非视网膜设备上;
2014-05-09 23:22:10.872 SimpleGame[4131:70b] x:0, y:0
2014-05-09 23:22:10.872 SimpleGame[4131:70b] frame.rect:{{0, 0}, {110, 110}}
2014-05-09 23:22:10.873 SimpleGame[4131:70b] x:1, y:0
2014-05-09 23:22:10.873 SimpleGame[4131:70b] frame.rect:{{110, 0}, {110, 110}}
2014-05-09 23:22:10.874 SimpleGame[4131:70b] x:2, y:0
2014-05-09 23:22:10.874 SimpleGame[4131:70b] frame.rect:{{220, 0}, {110, 110}}
文档确实说(并且名称很明显)rectInPixels
是以像素(而不是点)计算的。这个对吗?如果是这样,这对我来说似乎完全违反直觉和无益,为什么不简单地计算点数呢?那么我如何计算视网膜和非视网膜的正确矩形?
这真的让我很困惑,因为我很肯定这就像一天前一样工作,自从它工作以来我所做的一切都是图像的尺寸。
已经很晚了,所以我可能只是错过了一些非常明显的东西,但我似乎无法弄清楚这一点,所以任何帮助将不胜感激!