swift - SKSpriteNode放置后位置变化

标签 swift macos sprite-kit skspritenode skphysicsbody

我遇到了 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 添加了物理环境,所以这个涉及尊重你的 physicsWorldphysicsBody 设置的所有参数(重力,恢复原状,线性阻尼,摩擦..)。

事实上,使用 SKAction 是不正确的,因为您可能有像您这样的奇怪值。最好对 Sprite 使用 addImpulsevelocity

希望它能帮助你理解你的项目中发生了什么。

关于swift - SKSpriteNode放置后位置变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38255701/

相关文章:

ios - UIAlertView 问题与 session.dataTaskWithRequest

ios - 使用自定义 fillShader 加载 SKShapeNode 会导致程序挂起

python - OSX 上的 Virtualenv 使用与我指定的仅 32 位 Python 二进制文件不同的通用 Python 二进制文件

swift - 如何将 HSplitView 左右固定到窗口范围

objective-c - 如何在使用 SpriteKit 时暂停声音

ios - 如何为倒计时器创建循环进度指示器

ios - Swift 中的 dispatch_once 单例

ios - 以编程方式创建输入附件 View

ios - Swift:如何将单个键映射到多个值?

regex - 使用 sed 替换数字