在 spritekit 游戏中获取屏幕的触摸位置
Get touch location of screen in a spritekit game
我有一个 sprite kit 游戏,我想知道用户是否触摸了屏幕的左侧、右侧或中间 (25/50/25)
当我触摸屏幕最左侧的那一刻,它说我触摸了 x 轴上的 -450,而它应该是 0。我假设它得到了我相对于场景的触摸位置并且作为锚点点从右边 450 像素开始,当我触摸 0 时给我 -450。
因为这是一个横向滚动条,移动锚点不起作用,我需要屏幕的触摸位置:
override func touchesBegan(_ touches: Set<UITouch>,with event: UIEvent?){
var touchLeft : Bool = false
var touchRight : Bool = false
var touchMiddle : Bool = false
for touch in (touches) {
let location = touch.location(in: self)
if(location.x < self.size.width/4){
touchLeft = true
print("Left")
} else if(location.x > ((self.size.width/4) * 3)){
touchRight = true
print("Right")
} else {
touchMiddle = true
print("Middle")
}
}
}
您几乎成功了,只是考虑负数。
如果你不知道,0 是 SKScene 默认的中心。这是因为默认锚点是0.5,0.5.
由于您使用相机来处理滚动,因此您希望使用
touch.location(in: self.camera)
这样您就可以始终触摸相对于相机所在的位置,而不是场景所在的位置。
所以只需将您的代码更改为如下:
override func touchesBegan(_ touches: Set<UITouch>,with event: UIEvent?){
var touchLeft : Bool = false
var touchRight : Bool = false
var touchMiddle : Bool = false
for touch in (touches) {
let location = touch.location(in: self.camera)
if(location.x < -self.size.width/4){
touchLeft = true
print("Left")
} else if(location.x > ((self.size.width/4))){
touchRight = true
print("Right")
} else { //x is between -width / 4 and width / 4
touchMiddle = true
print("Middle")
}
}
}
我有一个 sprite kit 游戏,我想知道用户是否触摸了屏幕的左侧、右侧或中间 (25/50/25)
当我触摸屏幕最左侧的那一刻,它说我触摸了 x 轴上的 -450,而它应该是 0。我假设它得到了我相对于场景的触摸位置并且作为锚点点从右边 450 像素开始,当我触摸 0 时给我 -450。
因为这是一个横向滚动条,移动锚点不起作用,我需要屏幕的触摸位置:
override func touchesBegan(_ touches: Set<UITouch>,with event: UIEvent?){
var touchLeft : Bool = false
var touchRight : Bool = false
var touchMiddle : Bool = false
for touch in (touches) {
let location = touch.location(in: self)
if(location.x < self.size.width/4){
touchLeft = true
print("Left")
} else if(location.x > ((self.size.width/4) * 3)){
touchRight = true
print("Right")
} else {
touchMiddle = true
print("Middle")
}
}
}
您几乎成功了,只是考虑负数。
如果你不知道,0 是 SKScene 默认的中心。这是因为默认锚点是0.5,0.5.
由于您使用相机来处理滚动,因此您希望使用
touch.location(in: self.camera)
这样您就可以始终触摸相对于相机所在的位置,而不是场景所在的位置。
所以只需将您的代码更改为如下:
override func touchesBegan(_ touches: Set<UITouch>,with event: UIEvent?){
var touchLeft : Bool = false
var touchRight : Bool = false
var touchMiddle : Bool = false
for touch in (touches) {
let location = touch.location(in: self.camera)
if(location.x < -self.size.width/4){
touchLeft = true
print("Left")
} else if(location.x > ((self.size.width/4))){
touchRight = true
print("Right")
} else { //x is between -width / 4 and width / 4
touchMiddle = true
print("Middle")
}
}
}