我只是想让用户在屏幕上拖放某些精灵。我看到的答案是检查精灵的名称(如下所示)。必须有更好的方法来做到这一点。感谢您的任何意见。
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
var nodeTouched = SKNode()
for touch: AnyObject in touches {
let location = touch.locationInNode(self)
nodeTouched = self.nodeAtPoint(location)
if(nodeTouched.name? == "character") {
character.position=location
currentNodeTouched = nodeTouched
} else {
currentNodeTouched.name = ""
}
}
}
override func touchesEnded(touches: NSSet, withEvent event: UIEvent) {
for touch: AnyObject in touches {
let location = touch.locationInNode(self)
var nodeTouched = SKNode()
nodeTouched = self.nodeAtPoint(location)
if(currentNodeTouched.name == "character") {
character.position = location
}
}
}
override func touchesMoved(touches: NSSet, withEvent event: UIEvent) {
for touch: AnyObject in touches {
let location = touch.locationInNode(self)
var nodeTouched = SKNode()
nodeTouched = self.nodeAtPoint(location)
if(currentNodeTouched.name == "character") {
character.position = location
}
}
}
答案 0 :(得分:2)
由于您只想拖放特定的精灵,因此必须有一种识别精灵的方法。这可以是可用于区分节点的任何东西。以下是关于在这种情况下可以使用什么的一些建议。
答案中的代码在Objective-C中,希望你能将它翻译成Swift。
name
属性
正如您所说,这是确定是否可以拖动精灵的最常用方法。
userData
属性
这是与SKNode相关联的属性,可让您设置所需的任何自定义数据。你可以阅读它here。
[node.userData setValue:@(YES) forKey:@"draggable"]; //Setting the value
if ([[node.userData valueForKey:@"draggable"] boolValue]) //Checking the value
<强>子类强>
您还可以创建一个自定义类,它可以自己处理deag-drop功能,也可以将BOOL实现为可以在触摸代理中检查的属性。
班级名称
在某些情况下,您可能只想拖动特定类的节点。
if ([node isKindOfClass:[CustomNode class]])
if ([(NSStringFromClass([node class]) isEqualToString:@"CustomNode"])