swift - 如何在SpriteKit(Swift)中对对象施加力
问题描述
所以我对 SpriteKit 有点陌生,我想知道如何获得物体上的力并将其放入变量中。当你对一个物体施加力时,例如,这段代码,
line.physicsBody?.applyImpulse(CGVector(dx: 0, dy: -30))
它问你每个方向有多少。好吧,我想做相反的事情。我想得到物体的力量大小和方向。
解决方案
冲动是一种持续一瞬间的力量。物体只有在相对于其速度和质量发生碰撞时才能对另一个物理物体施加力。
如果您希望找到您的对象当前的平均速度,您可以使用
sprite.physicsbody?.velocity
或者您可以检查对象是否正在移动
physicsbody?.isResting
如果要计算帧之间施加在对象上的平均力,则必须计算上一次更新周期之间位置变化的幅度,然后像这样乘以对象质量。
var lastPosition: CGPoint?
var avgForce: CGPoint?
func updatedForce(for sprite: SKSprite, timeDelta: Double) {
guard let lastPosition = lastPosition, let currentVelocity = currentVelocity) else {
lastPosition = sprite.position
}
let position = sprite.position
let mass = sprite.physicsbody.mass
var changeInX = position.x - lastPosition.x
var changeInY = position.y - lastPosition.y
avgForce = CGPoint(x: changeInX * mass, y: changeInY * mass)
}`
对于任何格式问题或拼写错误,我深表歉意,这是从我的 iPhone 制作的,稍后会更正。
推荐阅读
- c++ - 如何构建混合的 NET5.0 和 C/C++ 解决方案?
- csv - Zappy SSIS 在前面插入 /
- .net-core - OpenTelemetry .NET Core Autoinstrumentation - 通过 traceid 传播关联日志?
- java - Java 删除重复的对象属性
- c++ - 找不到 CMAKE_CXX_COMPILER。在 EC2 实例中安装 LightGBM 时
- firebase - 如何在flutter中使用flutter_typeahead和firestore?
- excel - 从范围和排除列表中创建具有范围的单元格
- r - 试图在 R 的 POSIXct 函数中获取多个时区
- c++ - 三元表达式返回初始值设定项列表作为范围 for 循环中的范围表达式会产生意外行为
- javascript - 根据另一个数组查找数组中元素的索引