我正在从 a 创建一个精灵SKTexture
,而它又是从从图集加载的另一个纹理创建的,如下所示:
SKTexture *textureFromAtlas = [SKTexture textureWithImageNamed:@“MyImage.png”];
CGRect myRect = textureFromAtlas.textureRect;
myRect.size.with *= 0.5;
myRect.size.height *= 0.5;
SKTexture *newTexture = [SKTexture textureWithRect:myRect inTexture:textureFromAtlas];
SKSpriteNode * MySprite = [SKSpriteNode spriteNodeWithTexture:newTexture];
textureFromAtlas
碰巧被旋转了,因为在应用程序包中的文件夹Images.atlasc中, Images.1.png显示MyImage.png已旋转,并且Images.plist的关键textureRotated为该子图像设置为 YES
如何创建MySprite
以使其具有正确的旋转?
(A)是人们所期望的,因为 SpriteKit 做了自动旋转的事情; (B)是实际结果,即从上面的代码得到什么
编辑:
我不得不添加一些代码来获取MyImage.png的大小,但是图集中包含旋转的,看它是否旋转,然后计算一个新的旋转myRect
用于mySrpite
CGRect textureRect = textureFromAtlas.textureRect;
CGSize atlasSize = [[SKTexture textureWithRect:CGRectMake(0, 0, 1, 1)
inTexture:textureFromAtlas] size];
CGSize sizeInAtlas = CGSizeMake(textureRect.size.width * atlasSize.width,
textureRect.size.height * atlasSize.height);
myRect = CGRectMake(myRect.origin.x,
myRect.origin.y+myRect.size.height-sizeInAtlas.height/atlasSize.height);
SKTexture *rotatedTexture = [SKTexture textureWithRect:myRect
inTexture:textureFromAtlas];
mySprite = [SKSpriteNode spriteWithTexture: rotatedTexture];
mySprite.zRotation = M_PI_2;
这有效地将矩形“移动”到Image.1.png中旋转图像的左上角,因此这mySprite
将是(A)中的那个,但是这只适用于 MyImage.png 完全不透明或没有透明边框,因为 SpriteKit 对那些具有透明度的图像做了一些优化,并且 textureRect 比图集中的实际帧小。