Tap Gesture 和 TouchesBegan 在视图中产生不同的位置
UITapGesture and TouchesBegan are producing different locations in view
我正在使用 SKTileMaps 和 CameraNode 以及 GameplayKit 和 SpriteKit
我要使用的代码不正确在"view"
中找到一个位置
func handleTapFrom(_ sender: UITapGestureRecognizer)
{
let location = sender.location(in: self.view)
if (map.contains(location))
{
let tRow = map.tileRowIndex(fromPosition: location)
let tColumn = map.tileColumnIndex(fromPosition: location)
let movePosition = map.centerOfTile(atColumn: tColumn, row: tRow)
let moveAction = SKAction.move(to: movePosition, duration:1.0)
cam.run(moveAction)
}
}
并且 正常工作的代码 正在自我查找位置(而不是 self.view),这是正确的
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?)
{
let firstTouch = touches.first?.location(in: self)
if (map.contains(firstTouch!))
{
let tRow = map.tileRowIndex(fromPosition: firstTouch!)
let tColumn = map.tileColumnIndex(fromPosition: firstTouch!)
let movePosition = map.centerOfTile(atColumn: tColumn, row: tRow)
let moveAction = SKAction.move(to: movePosition, duration:1.0)
cam.run(moveAction)
}
}
基于位置的列和行是正确的,我遇到的问题是两个函数的位置(xfloat,yfloat)不同,即使触摸位于同一位置
这两段代码都在classGameScene中,但是我想不通为什么位置不一样?以及如何修复点击手势,使其找到的位置与在 touchesBegan 中找到的位置相同。
抱歉,如果这令人困惑或难以理解。我欢迎有机会澄清。
在您的 handleTapFrom
函数中,位置应来自 convertPoint
。
func handleTapFrom(_ sender: UITapGestureRecognizer) {
if sender.state != .ended {
return
}
let location = sender.location(in: sender.view!)
let targetLocation = self.convertPoint(fromView: location)
if map.contains(targetLocation) {
// Your code here
}
}
我正在使用 SKTileMaps 和 CameraNode 以及 GameplayKit 和 SpriteKit
我要使用的代码不正确在"view"
中找到一个位置func handleTapFrom(_ sender: UITapGestureRecognizer)
{
let location = sender.location(in: self.view)
if (map.contains(location))
{
let tRow = map.tileRowIndex(fromPosition: location)
let tColumn = map.tileColumnIndex(fromPosition: location)
let movePosition = map.centerOfTile(atColumn: tColumn, row: tRow)
let moveAction = SKAction.move(to: movePosition, duration:1.0)
cam.run(moveAction)
}
}
并且 正常工作的代码 正在自我查找位置(而不是 self.view),这是正确的
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?)
{
let firstTouch = touches.first?.location(in: self)
if (map.contains(firstTouch!))
{
let tRow = map.tileRowIndex(fromPosition: firstTouch!)
let tColumn = map.tileColumnIndex(fromPosition: firstTouch!)
let movePosition = map.centerOfTile(atColumn: tColumn, row: tRow)
let moveAction = SKAction.move(to: movePosition, duration:1.0)
cam.run(moveAction)
}
}
基于位置的列和行是正确的,我遇到的问题是两个函数的位置(xfloat,yfloat)不同,即使触摸位于同一位置
这两段代码都在classGameScene中,但是我想不通为什么位置不一样?以及如何修复点击手势,使其找到的位置与在 touchesBegan 中找到的位置相同。
抱歉,如果这令人困惑或难以理解。我欢迎有机会澄清。
在您的 handleTapFrom
函数中,位置应来自 convertPoint
。
func handleTapFrom(_ sender: UITapGestureRecognizer) {
if sender.state != .ended {
return
}
let location = sender.location(in: sender.view!)
let targetLocation = self.convertPoint(fromView: location)
if map.contains(targetLocation) {
// Your code here
}
}