首页 > 解决方案 > 在 Swift 中沿用鼠标绘制的线运行 SKSpriteNode 对象

问题描述

如果松开鼠标左键,我的 SKSpriteNode 对象应该沿着之前用鼠标“绘制”的线移动。

我的问题是当我释放鼠标左键时我的精灵节点正在向下移动。

import SpriteKit

class GameScene: SKScene, SKPhysicsContactDelegate {

    let object: SKSpriteNode = SKSpriteNode(imageNamed: "rabbit")

    var actionArray = [SKAction()]

    override func didMove(to view: SKView) {

        physicsWorld.gravity = CGVector(dx: 0, dy: 0)
        physicsWorld.contactDelegate = self

        object.setScale(0.2)
        object.position = CGPoint(x: size.width / 2, y: size.height / 2)
        object.zPosition = 0
        object.physicsBody = SKPhysicsBody(texture: SKTexture(imageNamed: "rabbit"), size: object.size)

        object.physicsBody?.mass = 0
        object.physicsBody?.categoryBitMask = 0
        object.physicsBody?.contactTestBitMask = 1
        object.physicsBody?.collisionBitMask = 0

        addChild(object)
    }

    override func mouseDragged(with event: NSEvent) {

        actionArray.append(SKAction.move(to: event.location(in: self), duration: 1))
    }

    override func mouseUp(with event: NSEvent) {

        object.run(SKAction.sequence(actionArray))

        // Remove all actions from 'actionArray'.
        actionArray.removeAll()
    }
}

我已经尝试过了,如下所示。现在我的精灵节点移动到第一个点,我按下鼠标左键

override func mouseUp(with event: NSEvent) {

    let removeAllFromActionArray = SKAction.run {

        self.actionArray.removeAll()
    }

    actionArray.append(removeAllFromActionArray)
    object.run(SKAction.sequence(actionArray))
}

我已经尝试过view! .Convert (event.locationInWindow, to: view! .Scene!)而不是event.location (in: self),如Position of mouse click relative to scene 中所示,而不是 window,但结果是一样的。

我怀疑错误在于override func mouseUp(with event: event). 错误在哪里或有其他解决方案吗?

标签: xcodemacossprite-kit

解决方案


推荐阅读