Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift SKSpriteNode';放置后,s的位置发生变化_Swift_Macos_Sprite Kit_Skspritenode_Skphysicsbody - Fatal编程技术网

Swift SKSpriteNode';放置后,s的位置发生变化

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")

我对SKSpriteNode有意见。当我把它放在场景中的某个位置后,它的位置开始慢慢地改变。只有当我将SKPhysicsBody附加到它时,才会发生这种情况,但如果没有SKPhysicsBody,则不会发生这种情况,因此它与此相关

以下是放置的“我的互动程序”的代码:

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,对象在放置时仍会向下移动一点。当动力学为假时,它甚至不应该受到重力的影响。