我想使用SKAction.animateWithTextures(textures,timePerFrame,resize,restore)
使用SKTextureAtlas中的纹理为SKSpriteNode设置动画。然而,地图集中的纹理的大小略大于原始纹理(它基本上是一个移动的角色)。当动作运行时,纹理要么被压缩以适应精灵的原始大小,要么在我将resize
设置为false
时重新定位,这会改变角色的位置。但是,我想要的是将纹理锚定在左下角(或者右下角,取决于方向),这样角色的位置就不会与纹理的额外部分分开。
我已经尝试在运行动作之前更改精灵的锚点,但显然也适用于原始纹理。此外,我想改变原始纹理的大小会对物理行为产生影响,我想避免这种影响。
有没有人有关于如何做到这一点的建议?
谢谢!
大卫
答案 0 :(得分:1)
这样可行
只需使用Alpha通道为较小的纹理添加一些填充,即可为您提供透明背景。
E.g。注意第一个纹理有多少负空间 (来自CartoonSmart.com)
创建具有特定大小的物理主体。例如。您可以在没有填充的情况下加载纹理并获得大小。然后根据需要将其放置到带有填充的新的和改进的纹理上。因此,在使用新调整大小的纹理创建Sprite后,您可以
/// load a texture to be a template for the size
let imageTextureSizeTemplate = SKTexture(imageNamed: textureWithoutPadding)
let bodySize = imageTextureSizeTemplate.size()
/// position template texture physics body on texture that will be used
let bodyCenter = CGPointMake(0.5, 0.5)
// create physics body
let body:SKPhysicsBody = SKPhysicsBody(rectangleOfSize: bodySize, center: bodyCeneter)
self.physicsBody = body
在为纹理设置动画时设置resize:false。