在 Spritekit 中左右倾斜宇宙飞船
Tilting Spaceship left and right in Spritekit
我已经制作了一个小型 Space 射击游戏,就像许多其他已经制作的游戏一样 :-D,除了 Space 船的倾斜图像外,我已经确定了所有内容。
我使用了 3 个图像 - 左、中和右 - 虽然我可以让图像左右转动,但问题仍然存在,它只有在实际触摸屏幕的 left/right 侧时才会这样做,并且中心图像根本不显示,如果船不动,它应该显示。
如果有人能帮我照亮那个,那就太好了...
这是我的 touchesMoved
代码:
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
for touch: AnyObject in touches{
let pointOfTouch = touch.location(in: self)
let previousPointOfTouch = touch.previousLocation(in: self)
let amountDragged = pointOfTouch.x - previousPointOfTouch.x
if currentGameState == gameState.inGame{
player.position.x += amountDragged
}
if player.position.x > gameArea.maxX - player.size.width/2{
print("Ship turning Right") //Log print to check if it works
player.texture = SKTexture(imageNamed: "playerShipRight")
player.position.x = gameArea.maxX - player.size.width/2
}
if player.position.x < gameArea.minX + player.size.width/2{
print("Ship turning Left") //Log print to check if it works
player.texture = SKTexture(imageNamed: "playerShipLeft")
player.position.x = gameArea.minX + player.size.width/2
}
}
}
根据您的评论,我假设飞船在您触摸屏幕时一直在开火,因此您不能使用 touchesEnded
将飞船居中,因为您可能不想移动但仍想移动射击.
如果 ship.position = pointOfTouch
或 amountDragged = 0
或某个较小的值,一个简单的解决方案是恢复到中心图像。
一种更复杂的方法是拥有大约 7 个船舶纹理的数组,代表船舶快速向左移动、中速、缓慢、静止、向右缓慢、向右中速和向右快速移动。然后,您可以使用 amountDragged
对该数组进行索引以获得正确的纹理。
如果需要,您也可以使用 touchesEnded
实现 'non-firing, non-moving' 纹理。
我已经制作了一个小型 Space 射击游戏,就像许多其他已经制作的游戏一样 :-D,除了 Space 船的倾斜图像外,我已经确定了所有内容。
我使用了 3 个图像 - 左、中和右 - 虽然我可以让图像左右转动,但问题仍然存在,它只有在实际触摸屏幕的 left/right 侧时才会这样做,并且中心图像根本不显示,如果船不动,它应该显示。
如果有人能帮我照亮那个,那就太好了...
这是我的 touchesMoved
代码:
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
for touch: AnyObject in touches{
let pointOfTouch = touch.location(in: self)
let previousPointOfTouch = touch.previousLocation(in: self)
let amountDragged = pointOfTouch.x - previousPointOfTouch.x
if currentGameState == gameState.inGame{
player.position.x += amountDragged
}
if player.position.x > gameArea.maxX - player.size.width/2{
print("Ship turning Right") //Log print to check if it works
player.texture = SKTexture(imageNamed: "playerShipRight")
player.position.x = gameArea.maxX - player.size.width/2
}
if player.position.x < gameArea.minX + player.size.width/2{
print("Ship turning Left") //Log print to check if it works
player.texture = SKTexture(imageNamed: "playerShipLeft")
player.position.x = gameArea.minX + player.size.width/2
}
}
}
根据您的评论,我假设飞船在您触摸屏幕时一直在开火,因此您不能使用 touchesEnded
将飞船居中,因为您可能不想移动但仍想移动射击.
如果 ship.position = pointOfTouch
或 amountDragged = 0
或某个较小的值,一个简单的解决方案是恢复到中心图像。
一种更复杂的方法是拥有大约 7 个船舶纹理的数组,代表船舶快速向左移动、中速、缓慢、静止、向右缓慢、向右中速和向右快速移动。然后,您可以使用 amountDragged
对该数组进行索引以获得正确的纹理。
如果需要,您也可以使用 touchesEnded
实现 'non-firing, non-moving' 纹理。