获取 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)的主要内容,如果未能解决你的问题,请参考以下文章

SKPhysicsBody 改变动画/物理速度

将精灵附加到 SKPhysicsBody

unity shader 基础之十一 动画屏幕后处理深度纹理

SpriteKit:SKSpriteNode 包含另一个 SKSpriteNodes 但只有一个 SKPhysicsBody

为 fbo 提供预先存在的纹理以在其上绘制

如何从 Blender 中导出 fbx 纹理以在 Monogame 中使用