我想使用 SKTextureAtlas 中的纹理为 SKSpriteNode 制作动画,使用SKAction.animateWithTextures(textures,timePerFrame,resize,restore)
。然而,图集中的纹理的尺寸比原始纹理稍大(基本上是角色移动)。当动作运行时,纹理要么被压缩以适合精灵的原始大小,要么在我设置时居中resize
to false
,这会改变角色的位置。不过,我想要的是将纹理锚定在左下角(或右下角,取决于方向),以便除了纹理的额外部分之外,角色的位置不会改变。
我尝试在运行动作之前更改精灵的锚点,但显然这也适用于原始纹理。另外,我想改变原始纹理的大小会对物理行为产生影响,这是我想避免的。
有人对如何做到这一点有建议吗?
Thanks!
David
这会起作用
- 编辑所有纹理以匹配最大尺寸纹理的大小。
只需使用 Alpha 通道为较小的纹理提供一些填充即可为您提供透明背景。
例如。注意第一个纹理如何有大量的负空间
(来自CartoonSmart.com)
-
创建具有特定尺寸的物理体。例如。您可以加载没有填充的纹理并获取尺寸。然后根据需要将其放置到带有填充的新的和改进的纹理上。因此,在使用新的调整大小的纹理正常创建精灵后,您可以
/// 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。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)