2

我想使用 SKTextureAtlas 中的纹理为 SKSpriteNode 设置动画,使用SKAction.animateWithTextures(textures,timePerFrame,resize,restore). 但是,图集中的纹理的大小比原始纹理稍大(它基本上是一个移动的角色)。当动作运行时,纹理要么被压缩以适应精灵的原始大小,要么在我设置resize为时重新居中false,这会改变角色的位置。不过,我想要的是将纹理锚定在左下角(或右下角,取决于方向),以便角色的位置不会随着纹理的额外部分而改变。

我已经尝试在运行动作之前更改精灵的锚点,但显然这也适用于原始纹理。另外,我想改变原始纹理的大小会对物理行为产生影响,这是我想避免的。

有没有人有关于如何做到这一点的建议?

谢谢!

大卫

4

1 回答 1

1

这会起作用

  1. 编辑所有纹理以匹配最大尺寸纹理的大小。

只需使用 Alpha 通道为较小的纹理添加一些填充,即可为您提供透明背景。

例如,注意第一个纹理有很多负空间(来自 CartoonSmart.com)

在此处输入图像描述

  1. 创建具有一定大小的物理体。例如,您可以在没有填充的情况下加载纹理并获取大小。然后根据需要将其放置在带有填充的新的和改进的纹理上。因此,在使用新调整大小的纹理正常创建 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
    
  2. 设置 resize: false 为纹理设置动画。

于 2016-06-12T19:50:38.350 回答