我无法使用Sprite Kit使标准Sprite具有切换功能。我不想使用UIButton。
我尝试在覆盖函数funs touchesBegan中链接代码,但是我很困惑。我一点都不习惯迅速使用spritekit的按钮,事实证明超级困难。
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
if (!isEnabled) {
return
}
isSelected = true
if (targetTouchDown != nil && targetTouchDown!.respondsToSelector(actionTouchDown!)) {
UIApplication.sharedApplication().sendAction(actionTouchDown!, to: targetTouchDown, from: self, forEvent: nil)
}
}
我想点击一个精灵,让它更改颜色并将数据发送到两个不同的数组。我有使用其他语言的数组的经验,因此我只需要接受敲击就不需要那里的帮助。
答案 0 :(得分:1)
Warner创建一个子类并使其可触摸。
import SpriteKit
protocol touchMe: NSObjectProtocol {
func spriteTouched(box: TouchableSprite)
}
class TouchableSprite: SKSpriteNode {
weak var delegate: touchMe!
override init(texture: SKTexture?, color: UIColor, size: CGSize) {
super.init(texture: texture, color: color, size: size)
self.isUserInteractionEnabled = true
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:)has not been implemented")
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
delegate.spriteTouched(box: self)
}
}
并使用...在代码中调用它
let restart = TouchableSprite(imageNamed: "mine")
restart.delegate = self
您需要让您的课程通过touchMe协议进行确认,并添加所需的方法进行确认。
class ViewController, touchMe
必需的方法。
func spriteTouched(box: TouchableSprite) {
print("sprite touched")
}
答案 1 :(得分:0)
如果您想使用touchesBegan()
(并且没有理由不这样做),则需要意识到只要触摸屏幕,它就会触发。因此,您要做的就是获取触摸的位置(坐标),并查看那里是否有精灵:
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
for touch in touches {
let touchedSprite = selectNodeForTouch(touch.location(in: self))
if let sprite= touchedSprite {
sprite.changeColour()
sprite.sendData(to: array1)
sprite.senddata(to: array2)
}
}
}
// Returns the sprite where the user touched the screen or nil if no sprite there
func selectNodeForTouch(_ touchLocation: CGPoint) -> SKSpriteNode? {
let touchedNode = self.atPoint(touchLocation) // Get the node at the touch point
return (touchedNode is SKSpriteNode) ? (touchedNode as! SKSpriteNode) : nil
}
因此,我们查看触摸位置,在该位置获取节点,如果该节点是SKSpriteNode,则在其上运行changeColour()
和sendData()
函数。