在动画期间更改 SKSpriteNode 的锚点?

Posted

技术标签:

【中文标题】在动画期间更改 SKSpriteNode 的锚点?【英文标题】:Changing a SKSpriteNode's anchor point during animation? 【发布时间】:2017-02-03 18:54:30 【问题描述】:

所以我有下面的函数来启动我的角色攻击动画,唯一的问题是两个纹理的大小不同,因此“resize: true”。我想要做的是改变第二个纹理的锚点,这样当我的角色攻击而不是第二个纹理被居中时,移动角色的身体,我希望它稍微向右偏移,以便身体对齐与前一个纹理的主体。

有没有办法让特定于纹理的锚点或我需要在帧之间更改 Sprite 的锚点?

func attackLeft() 
    attackLeftFrames = [attackLeft1, attackLeft2]
    attackLeftAction = SKAction.animate(with: attackLeftFrames, timePerFrame: 0.25, resize:true, restore:true)
    forever = SKAction.repeatForever(attackLeftAction)
    self.run(forever, withKey: "attackLeft")

【问题讨论】:

改变锚点是个坏主意,如果你想处理调整动画的大小,你应该根据某个锚点设计你的所有纹理并相应地计划。 (这在处理 Photoshop 时有点棘手,因为图层不会很好地覆盖自己) 【参考方案1】:

所以因为我使用的是相当简单的精灵 (64x64),所以我只是更改了纹理本身,在图像的任一侧添加特定数量的像素,使其与另一侧一样居中。如果可能的话,我仍然想知道如何以编程方式执行此操作以供将来参考。

【讨论】:

图集应该为你修剪纹理,所以即使它被注册为 64x64 纹理,也不会占用太多空间

以上是关于在动画期间更改 SKSpriteNode 的锚点?的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI 中的锚点

Vue Router-更改滚动中的锚点

ai里的锚点可以分为哪四种

使用自动布局时,如何调整 CALayer 的锚点?

如何将 SKPhysicsBody(texture: size:) 居中于 SKSpriteNode 锚点以外的点

Phaser set group sprites的锚点属性