嗨,我对swift和im创建一个基于触摸目标的游戏,但每个目标都是一个图像或SKSpriteNode他们有小尺寸但有时触摸错过目标所以我想知道如何使命中区域更大而不使目标更大。 我使用此代码来检测每个目标的触摸
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
/* Called when a touch begins */
for touch in touches {
let location = touch.locationInNode(self)
let node = self.nodeAtPoint(location)
if (node.name == "target1") {
//do some stuff
}
}
}
任何建议。
答案 0 :(得分:3)
您可以创建一个透明的可点击区域,该区域比您要显示的最终图像大。
例如,您创建:
let newNode = SKSpriteNode(bigger size, clearColor)
let originalNode = SKSpriteNode(size, finalColor/image)
newNode.addchild(originalNode)
rootNode.addchild(newNode).
您也可以在touchesbegan中使用此功能:
let touch = touches.first
touch.locationInNode(rootNode)
当你知道每个精灵所需的命中区时,你现在可以计算出你想要击中的精灵。
这样你就有了一个很大的透明区域。同样适用于UIImageView,您可以添加一个视图,该视图对于最大部分是空的,但仅用于注册触摸。现在您可以在此视图中添加UIImageView,并且imageview仅用于显示图像,并且不必像视图那么大。
希望这会有所帮助;)
答案 1 :(得分:0)
视图无法简单地检测到外部的触摸。默认情况下,用户必须触摸视图才能使该视图成为命中测试视图并接收touchesBegan
。您对使目标更大的反对意见是什么?
另一种方法是检测其他地方的触摸并计算,您自己想要响应此视图。但是你不会在这个视图上通过touchesBegan
来做到这一点。
答案 2 :(得分:0)
你可以覆盖func&#39; pointInside&#39; UIView类扩展可点击区域。
在另一个问题中查看我的帖子。