获取 SKPhysicsBody 以在纹理动画时更新(Swift)
Posted
技术标签:
【中文标题】获取 SKPhysicsBody 以在纹理动画时更新(Swift)【英文标题】:Get SKPhysicsBody to update as textures are animated (Swift) 【发布时间】:2015-01-15 04:03:02 【问题描述】:所以我有一个“SKSpriteNode(texture: someTexture)”对象,我在该对象上运行一个“SKAction”,使用几个纹理对其进行动画处理(行走动画)。
我使用纹理参数设置它的物理体,以便物理体成为我角色的完美轮廓,唯一的事情是我无法弄清楚如何让物理体随着纹理的变化而改变(由于动画)。
我尝试了明显错误的选择,即为对象分配一个新的 SKPhysicsBody(在更新方法中),其纹理为 object.texture(用于动画中的当前纹理),但这并没有保留我最初设置的所有其他属性。我在文档中搜索了一些方法,我可以实现这一点,但一无所获。
解决此问题的最佳方法是什么?
【问题讨论】:
【参考方案1】:通常,您会设计游戏,使相同的物理形状适用于所有动画帧。通常,人物的四肢是否都在形状中正确勾勒出轮廓并不重要,通常矩形通常就足够了。
顺便说一句,您的方法是正确的,您必须每次都创建一个新的物理体,并且必须先复制前一个物理体的属性,然后再将其替换为新物理体。然而,无论如何这都不是一个好的解决方案,因为身体的内部状态无法保留,并且不同的形状不会使现在动画物理形状具有适当的物理行为。例如,如果角色正在挥动球棒,击球,它基本上只是将球从球棒上移开,但不会从挥动动作中施加任何力。
本质上,您想要实现的目标是(真的)不可能的。而是给节点一个形状,该形状是对所有动画帧的良好折衷。通常最好使用尽可能小的形状。或者,您可以组合多个精灵的角色,以便能够由多个(连接的)身体组成。
【讨论】:
以上是关于获取 SKPhysicsBody 以在纹理动画时更新(Swift)的主要内容,如果未能解决你的问题,请参考以下文章
unity shader 基础之十一 动画屏幕后处理深度纹理
SpriteKit:SKSpriteNode 包含另一个 SKSpriteNodes 但只有一个 SKPhysicsBody