SpriteKit - 当触摸在精灵上移动但实际上并没有在精灵上开始时,我如何捕捉事件
SpriteKit - How can I catch the event when the touch moves over a sprite, but didn't actually begin on the sprite
在 SpriteKit 中,我想在触摸移过精灵时捕捉事件,但实际上并没有在这个精灵上开始,而是在另一块 SKScene 上。
我可以在 SKSpriteNode A 中捕获 touchesBegan,如果触摸从它开始然后拖到它上面,但是当触摸从另一个节点 - B - 开始然后拖到我的节点 - A 上时就不行了。任何人都知道如何捕捉这个,因为我觉得我在这里做错了。
谢谢@Christian W。但我现在有一个更简单的解决方案,虽然这不是我真正想要的:
只需将它放在 Scene 中并捕获其中的 touchesMoved,其中包含以下代码:
SKNode * draggedOverNode = [self nodeAtPoint:location];
[draggedOverNode touchesMoved:touches withEvent:event];
并在实际扩展 SKNode 的对象中实现 touchesMoved 函数(您的大多数 类 都会这样做)。
试试这个:
抱歉,这是 swift.. 但您可以在 obj c
中轻松地做同样的事情
import SpriteKit
class GameScene: SKScene {
let sprite = SKSpriteNode(color: SKColor.redColor(), size: CGSizeMake(100, 100))
var startedOutsideSprite = true
override init(size: CGSize) {
super.init(size: size)
sprite.position = CGPointMake(size.width/2, size.height/2)
addChild(sprite)
}
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
if let touch = touches.first {
let location = touch.locationInNode(self)
if !sprite.containsPoint(location) {
startedOutsideSprite = true
}
}
}
override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) {
if let touch = touches.first {
let location = touch.locationInNode(self)
if sprite.containsPoint(location) && startedOutsideSprite {
print("yayyy")
// your code here
}
}
}
override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
startedOutsideSprite = false
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
在 SpriteKit 中,我想在触摸移过精灵时捕捉事件,但实际上并没有在这个精灵上开始,而是在另一块 SKScene 上。
我可以在 SKSpriteNode A 中捕获 touchesBegan,如果触摸从它开始然后拖到它上面,但是当触摸从另一个节点 - B - 开始然后拖到我的节点 - A 上时就不行了。任何人都知道如何捕捉这个,因为我觉得我在这里做错了。
谢谢@Christian W。但我现在有一个更简单的解决方案,虽然这不是我真正想要的: 只需将它放在 Scene 中并捕获其中的 touchesMoved,其中包含以下代码:
SKNode * draggedOverNode = [self nodeAtPoint:location];
[draggedOverNode touchesMoved:touches withEvent:event];
并在实际扩展 SKNode 的对象中实现 touchesMoved 函数(您的大多数 类 都会这样做)。
试试这个: 抱歉,这是 swift.. 但您可以在 obj c
中轻松地做同样的事情import SpriteKit
class GameScene: SKScene {
let sprite = SKSpriteNode(color: SKColor.redColor(), size: CGSizeMake(100, 100))
var startedOutsideSprite = true
override init(size: CGSize) {
super.init(size: size)
sprite.position = CGPointMake(size.width/2, size.height/2)
addChild(sprite)
}
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
if let touch = touches.first {
let location = touch.locationInNode(self)
if !sprite.containsPoint(location) {
startedOutsideSprite = true
}
}
}
override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) {
if let touch = touches.first {
let location = touch.locationInNode(self)
if sprite.containsPoint(location) && startedOutsideSprite {
print("yayyy")
// your code here
}
}
}
override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
startedOutsideSprite = false
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}