我正在使用Swift子类化SKSpritenode来创建可以拖动的彩色块。这个子类被称为SoundNode。
这可以运行,有些小问题。
soundBlock已添加,可以在场景中拖动。但是它会闪烁并且有时会消失。我已经尝试了touchesMoved中的其他方法,但都没达到平滑效果。
如果我不继承touchesBegan, touchesMoved, touchesEnded并在GameScene中实现操作,则拖动将变得平滑。但未来计划需要能够继承这些操作。
Xcode 8,Swift 3,iOS10。
import SpriteKit
class SoundNode: SKSpriteNode {
init() {
super.init(texture: nil, color: UIColor.blue, size: CGSize(width: 100, height: 100))
self.isUserInteractionEnabled = true
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
print("touch began")
}
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
print("touches moved")
guard let touch = touches.first else {
return
}
let touchLocation = touch.location(in: self)
self.position = touchLocation
}
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
print("touch ended")
}
}
在GameScene.swift文件中
import SpriteKit
class GameScene: SKScene {
override func didMove(to view: SKView) {
addSoundBlock()
}
func addSoundBlock() {
let soundBlock = SoundNode()
soundBlock.position = CGPoint(x: 800, y: 800)
addChild(soundBlock)
}
}
这可以运行,有些小问题。
soundBlock已添加,可以在场景中拖动。但是它会闪烁并且有时会消失。我已经尝试了touchesMoved中的其他方法,但都没达到平滑效果。
如果我不继承touchesBegan, touchesMoved, touchesEnded并在GameScene中实现操作,则拖动将变得平滑。但未来计划需要能够继承这些操作。
Xcode 8,Swift 3,iOS10。
let touchLocation = touch.location(in: self)
应该是指场景框架中的触摸位置,而不是精灵的框架位置(self)。 - Confused