gpt4 book ai didi

ios - 在快速触摸方法中滑动手势

转载 作者:行者123 更新时间:2023-11-28 12:33:40 25 4
gpt4 key购买 nike

所以我已经在我的游戏中实现了手势识别器来检测我的玩家的移动,但发现它们没有给我想要的结果,所以我正在考虑在触摸方法和点击中制作滑动手势也在touches方法中。我已经设法使点击功能在 touches 方法中起作用,但我无法在 touches 方法中实现滑动功能,而且我似乎找不到有关如何执行此操作的教程。我下面的代码显示了我用来尝试实现此目的的触摸方法:

class GameScene: SKScene {

var touchOrigin = CGPoint()
var player = SKSpriteNode()


override func didMove(to view: SKView) {

backgroundColor = .black

player = SKSpriteNode(texture: nil, color: .orange, size: CGSize(width: 50, height: 50))
player.position = CGPoint(x: 0, y: 0)
addChild(player)

}

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {

}

override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {

}

override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {

for touch in touches {

var currentTouchPosition = touch.location(in: self)
touchOrigin = touch.location(in: self)

if (Int(touchOrigin.x) > Int(currentTouchPosition.x)) {

player.position.x -= 50

} else if (Int(touchOrigin.x) < Int(currentTouchPosition.x)) {

player.position.x += 50

}

if touch.tapCount == 1 {

player.position.y += 50 //replace this with function :)

} else if touch.tapCount >= 2 {

player.position.y += 150 // change to run shield effect :)

}
}

}

override func touchesCancelled(_ touches: Set<UITouch>, with event: UIEvent?) {
}

}

如何让 touches 方法识别特定方向的滑动手势?如果他们朝一个方向滑动而不是将手指从屏幕上移开并在一个 Action 中滑动回到原点,我该如何做到这一点,然后将其识别为点击?

最佳答案

这是一个如何检测滑动手势的示例。

首先,定义实例变量来存储起始位置和时间

var start:(location:CGPoint, time:TimeInterval)?

并定义滑动手势的参数。相应地调整这些:

let minDistance:CGFloat = 25
let minSpeed:CGFloat = 1000
let maxSpeed:CGFloat = 6000

touchesBegan中,保存每个新触摸事件的位置/时间

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
if let touch = touches.first {
start = (touch.location(in:self), touch.timestamp)
}
}

touchesEnded 中,通过比较手势的距离和速度来确定用户的手势是否为滑动。对角滑动的测试是可选的。

override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
var swiped = false
if let touch = touches.first, let startTime = self.start?.time,
let startLocation = self.start?.location {
let location = touch.location(in:self)
let dx = location.x - startLocation.x
let dy = location.y - startLocation.y
let distance = sqrt(dx*dx+dy*dy)

// Check if the user's finger moved a minimum distance
if distance > minDistance {
let deltaTime = CGFloat(touch.timestamp - startTime)
let speed = distance / deltaTime

// Check if the speed was consistent with a swipe
if speed >= minSpeed && speed <= maxSpeed {

// Determine the direction of the swipe
let x = abs(dx/distance) > 0.4 ? Int(sign(Float(dx))) : 0
let y = abs(dy/distance) > 0.4 ? Int(sign(Float(dy))) : 0

swiped = true
switch (x,y) {
case (0,1):
print("swiped up")
case (0,-1):
print("swiped down")
case (-1,0):
print("swiped left")
case (1,0):
print("swiped right")
case (1,1):
print("swiped diag up-right")
case (-1,-1):
print("swiped diag down-left")
case (-1,1):
print("swiped diag up-left")
case (1,-1):
print("swiped diag down-right")
default:
swiped = false
break
}
}
}
}
start = nil
if !swiped {
// Process non-swipes (taps, etc.)
print("not a swipe")
}
}

关于ios - 在快速触摸方法中滑动手势,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41460676/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com