很难用纯文本来描述,所以我记录了一个GIF来演示.
https://public.lightpic.info/image/2B1F_582465841.gif
我目前正在开展一个需要这种效果的项目.到目前为止,我已经在使用SpriteKit的iOS上完成了类似的效果,但遗憾的是结果并不令人满意.
这是我的工作:在我的项目中有一个具有不规则形状的物体,在物体的重心下方的某处施加恒定的力并且其方向是向下的.我已经规定对象的坐标不能被力改变,因此对象不会被力向下拉.当物体倾斜时,其惯性和力产生角动量,使物体直立.细节:

当物体被操纵时,作用点高于重心.由于物体的惯性和力的组合,角动量使物体倾斜.
然而,事实证明我是对的,因为我从SpriteKit的物理引擎得到的结果是,该对象被证明是一个简单的钟摆.但直觉告诉我,我并没有错,事实上我并没有将物体的重力中心固定在背景上,而我真正做的是每次模拟物理时都将物体放回原来的位置.但结果真的很难打了我的脸:(.因此,钟摆摆动和摆动,最后的物理效果很糟糕.
然后我制定了一个临时解决方案:每次模拟物理时,将角速度乘以0.95.这种解决方案显然不是理想的解决方案,因为当旋转角度倾向于水平时,角速度不够高并且变得缓慢直立.然而有一个进步:至少该物体能够最后停止摆动.
我的进一步解决方案是施加在物体上的力随着倾斜水平而变化.当物体倾向于水平时,力趋于变大,而当物体趋于垂直时,力趋于变小.一个简单的函数可以很好地描述它:F = 1000N×| sin [旋转度] |.这有很大帮助,但不幸的是结果效果似乎根本不是物理效应.
结论:经过多天的研究,我未能实现GIF中显示的效果,我感到非常惭愧.我真的希望有能力的人能帮助我.感谢您阅读我的详细说明,非常感谢您的耐心等待.
加成:
屏幕截图显示了我实现此效果的方法.

增加2:
我上传了我的实现,这是一个Swift Playground文件.下载地址:http://www.mediafire.com/file/qrct5sty2cyvwsy/Swing.playground.zip
PS.由于我的母语不是英语,请原谅我糟糕的语法.