在移动动作中,Y值不会改变,我不知道为什么因为X值正在改变。 changeY变量正在使用正确的值5.0或-5.0执行其工作,但是"播放器"上的Y值。 SkSpriteNode没有变化。请帮忙。
override func update(_ currentTime: TimeInterval) {
let percent = touchLocation.x / size.width
let newAngle = percent * 180 - 180
print(newAngle)
if playButtonPressed{
var changeY = 0.0
if newAngle >= -180{
changeY = 5.0
}
else{
changeY = -5.0
}
player.zRotation = CGFloat(newAngle) * CGFloat(M_PI) / 180.0
print(changeY)
var move = SKAction.moveBy(x: -(player.position.x+1), y: CGFloat(changeY), duration: 2000.0)
player.run(move)
}
}
答案 0 :(得分:0)
我并不完全清楚你的最终目标是什么,但你的计算似乎是。特别是运动的持续时间是2000秒。这超过30分钟(!)x计算还表明您实际上计划使用moveTo
而不是moveBy
,因为您正在进行此操作。
以下是基于您的代码,但由于我不确定您的实际目标是什么,如下所示:如果触摸位于屏幕的左侧,则向左+向上移动,向下移动+向右移动触摸位于屏幕的右侧......
override func update(_ currentTime: TimeInterval) {
if playButtonPressed {
let percent = touchLocation.x / size.width
let newAngle = percent * 180 - 180
player.zRotation = CGFloat(newAngle) * CGFloat(M_PI) / 180.0
let moveRightAndUp = touchLocation.x>size.width/2
let changeY: CGFloat = moveRightAndUp ? 5.0 : -5.0
let changeX: CGFloat = moveRightAndUp ? 1.0 : -1.0
let move = SKAction.moveBy(x: changeX, y: changeY, duration: 1/60)
player.run(move)
}
}