gpt4 book ai didi

ios - 如何不断快速获取移动物体的x位置?

转载 作者:行者123 更新时间:2023-11-28 10:12:14 27 4
gpt4 key购买 nike

我需要按钮 leftbutton, rightbutton 它们都是 SKSpriteNode()。当用户触摸其中一个按钮时,只要用户按住触摸,就会有一艘小船左右移动。

现在我需要一个函数或任何其他可以一直给我 ship.position.x 的函数。我坚持尝试让它不断打印位置。我可以在每次触摸按钮时打印它,但它只打印一次。

在我的 didMove 中,我只创建了按钮和飞船。所以它应该是无关紧要的。

func moveShip (moveBy: CGFloat, forTheKey: String) {
let moveAction = SKAction.moveBy(x: moveBy, y: 0, duration: 0.09)
let repeatForEver = SKAction.repeatForever(moveAction)
let movingSequence = SKAction.sequence([moveAction, repeatForEver])
ship.run(movingSequence, withKey: forTheKey)
}

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
print("\(ship.position.x)")

for touch: AnyObject in touches {
let pointTouched = touch.location(in: self)

if leftButton.contains(pointTouched) {

// !! I MAKE IT PRINT THE POSITION HERE !!

moveShip(moveBy: -30, forTheKey: "leftButton")
}

else if rightButton.contains(pointTouched) {
moveShip(moveBy: 30, forTheKey: "rightButton")
}
}
}

override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
if let touch = touches.first{
let pos = touch.location(in: self)
let node = self.atPoint(pos)

if node == aButton {

} else {
ship.removeAction(forKey: "leftButton")
ship.removeAction(forKey: "rightButton")
}
}
}

在我的代码中,该位置仅在触摸开始时打印一次,直到您释放触摸并再次触摸时才会打印。有没有办法用我的代码来做到这一点?

最佳答案

touchesMoved 函数不会帮助您解决特定问题。您可以通过创建一个 var timer = Timer() 作为实例变量来不断检查您的帧。

然后您必须设置计时器和在特定时间结束时调用的函数。在您的 didMove 函数中执行以下操作:

timer = Timer.scheduledTimer(timeInterval: 0.01, target: self, 
selector: #selector(detectShipPosition), userInfo: nil, repeats: true)

因为这将每 0.01 秒重复一次,它将调用函数 detectShipPosition,您将实现该函数 OUTSIDE didMove

func detectShipPosition(){
print("\(ship.position.x)")
}

关于ios - 如何不断快速获取移动物体的x位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46573236/

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