我遇到了 SKSpriteNode 的问题。当我把它放在场景中的某个位置后,它的位置开始变化得很慢。这仅在我将 SKPhysicsBody 附加到它时发生,但并非没有它,所以它与此相关。
这是我放置的图 block 的代码:
import Foundation
import SpriteKit
class Tile : SKNode {
var sprite = SKSpriteNode(imageNamed: "grassMid")
required init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented");
}
override init() {
super.init();
self.sprite.physicsBody = SKPhysicsBody(texture: self.sprite.texture!, size: CGSize(width: 32.0, height: 32.0))
self.sprite.physicsBody?.dynamic = false
self.sprite.physicsBody?.collisionBitMask = 0x0
self.addChild(sprite)
}
}
这是放置对象的代码:
func addNewTile(position: CGPoint) {
let t = Tile()
t.sprite.position = getClosestPointInGrid(position)
t.sprite.size = CGSize(width: 32.0, height: 32.0)
if(!doesPositionContainTile(t.sprite.position)) {
self.addChild(t)
}
print(t.sprite.position)
}
例如:我在位置 (256, 32) 放置了一个瓷砖,很快位置就变成了 (255.990264892578, 31.9987831115723) 并且一直在缓慢变化?我不明白。为什么会发生这种行为?
最佳答案
这种行为的发生是因为你已经为你的 Sprite 添加了物理环境,所以这个涉及尊重你的 physicsWorld
和 physicsBody
设置的所有参数(重力,恢复原状,线性阻尼,摩擦..)。
事实上,使用 SKAction
是不正确的,因为您可能有像您这样的奇怪值。最好对 Sprite 使用 addImpulse
或 velocity
。
希望它能帮助你理解你的项目中发生了什么。
关于swift - SKSpriteNode放置后位置变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38255701/