Swift SKSpriteNode';放置后,s的位置发生变化
我对SKSpriteNode有意见。当我把它放在场景中的某个位置后,它的位置开始慢慢地改变。只有当我将SKPhysicsBody附加到它时,才会发生这种情况,但如果没有SKPhysicsBody,则不会发生这种情况,因此它与此相关 以下是放置的“我的互动程序”的代码:Swift SKSpriteNode';放置后,s的位置发生变化,swift,macos,sprite-kit,skspritenode,skphysicsbody,Swift,Macos,Sprite Kit,Skspritenode,Skphysicsbody,我对SKSpriteNode有意见。当我把它放在场景中的某个位置后,它的位置开始慢慢地改变。只有当我将SKPhysicsBody附加到它时,才会发生这种情况,但如果没有SKPhysicsBody,则不会发生这种情况,因此它与此相关 以下是放置的“我的互动程序”的代码: import Foundation import SpriteKit class Tile : SKNode { var sprite = SKSpriteNode(imageNamed: "grassMid")
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),并且它一直在缓慢地变化?我不明白。为什么会发生这种行为?这种行为的发生是因为您已将物理环境添加到精灵中,因此这一行为涉及到尊重您的
physicsWorld
和physicsBody
设置的所有参数(重力、恢复、线性阻尼、摩擦…)
事实上,使用SKAction
s是不正确的,因为您可能会有像您这样的奇怪值。最好对精灵使用附加脉冲
或速度
希望它能帮助你了解你的项目中发生了什么 好的
我已经做了一些关于这个问题的研究,并且得出了一个结论,如果一个SKSpriteNode是一个SKNode的父节点,并且您将SKSpriteNode的skphysicobject的dynamic属性设置为false,那么对象仍然会缓慢地向下漂移。当dynamic属性设置为false时,它不应该移动。如果SKSpriteNode的父对象是SKScene,则不会发生此错误
2015年11月27日,苹果开发者论坛上报道了该漏洞。据说它在12月20日仍然存在。我现在可以说,它在2016年7月10日仍然存在。我有Xcode 7.0和OS X 10.11.5,我只熟悉OSX版本的spritekit,我不知道这个bug是否也出现在iOS上
最初,我的地图系统是这样设计的:地图是SKNode,而瓷砖是SKSpriteNodes。由于这个bug,我对其进行了更改,以便将SKSpriteNodes(tiles)直接添加到SKScene中。现在该错误没有发生。有没有办法完全停止移动,但保留碰撞?就像我不想从这个位置移动一样。讨论结束后,你可以将速度设置为0,physicBody.speed问题是,即使我将self.sprite.physicsbody.dynamic设置为false,对象在放置时仍会向下移动一点。当动力学为假时,它甚至不应该受到重力的影响。