我正在尝试创建一个贪吃蛇游戏。 要做到这一点,重要的是蛇要不断移动。例如,如果用我的手指向右滚动,蛇必须开始向右移动,并且他必须继续这样做。 好吧,我创建了一个包含 4 个项目的数组
var moves = [false, false, false, false]
//moves[0] -> Up
//moves[1] -> Down
//moves[2] -> Right
//moves[3] -> Left
例如当我向左滚动时,数组中的所有项目都变为 false,然后第三个元素变为 true。
所有这些代码都位于“GameScene.swift”文件中。 如果我像这样改变玩家位置...
if moves[0]==true {
player.position.y += 56
//player is the "head" of the snake
//"56" is the dimension of each position
}
...我将所有这些代码放入 TouchesMoved 函数中...
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {}
...只有当我滚动时,蛇才会移动。 出于这个原因,我想我可以将所有这些代码从函数中取出......但我不能。它只是说“预期声明”。
那么,我该怎么办呢?
实际上我不知道我的代码的哪一部分有助于解决这个问题...... 如果您需要更多信息,请询问!
谢谢你已经阅读了所有这些内容 ^ - ^
最佳答案
SKAction 正是我所需要的,谢谢马特。 最后我这样做了:
func moveSnake(){
let startPoint = CGPoint(x: player.position.x, y: player.position.y )
var playerX:CGFloat = 0
var playerY:CGFloat = 0
if moves[0]==true{
playerY += 56
}
if moves[1]==true{
playerY -= 56
}
if moves[2]==true{
playerX += 56
}
if moves[3]==true{
playerX -= 56
}
let endPoint = CGPoint(x: playerX + player.position.x, y: playerY + player.position.y)
let moveIt = SKAction.move(to: endPoint, duration:0.1)
player.run(moveIt)
}
func moveItDamn(){
let move = SKAction.run(moveSnake)
let waitToMove = SKAction.wait(forDuration: 0.01)
let moveSequence = SKAction.sequence([move, waitToMove])
let moveForever = SKAction.repeatForever(moveSequence)
self.run(moveForever)
}
我在这里做什么?
- 我创建了一个名为“moveSnake()”的新函数
现在我声明一些变量和常量:
- startPoint 是玩家所在的位置...前一个点。他的 X 等于他的 xPosition,他的 Y 等于他的 yPosition
- 现在我将声明另一个常量:endPoint。该常数包含位置的 X e Y。但是,在此之前,我需要将蛇的 X 和 Y 加或减 56(头部的尺寸)
- 因此,我创建了 2 个变量:playerX 和playerY(类型 CGFloat,数字)
现在我检查蛇要去哪里。 move[] 数组包含 4 个 bool 项。如果我用手指向上滚动,数组的第一个元素就会变为 true。如果我向下移动,数组中的所有元素都会变为 false,然后第二个元素变为 true,依此类推...如果蛇向上移动,我将在他的 Y 上添加 56,如果他向下移动,我将Y 减去 56(左右相同)
现在我创建另一个 SKAction 常量:moveIt。在这个常量中存储了一个 Action ,即移动 Action 。基本上,我告诉我的程序将玩家从 startPosition 移动到 endPosition,并在 0.1 秒内完成。
现在我只是告诉程序运行 moveIt 常量,我告诉他移动蛇。
这还没有结束,我还需要创建一个序列,以便您可以一次又一次地运行此代码。为此,我声明了一个新函数:moveItDamn
- 首先,我创建一个包含操作的常量:该常量将用于运行 moveSnake 函数
- 然后我创建一个名为 waitToMove 的“等待常量”,持续时间为 0.01 秒
- 我创建一个序列:先移动,然后 waitToMove
- 现在我告诉程序永远运行这个东西,并将这个操作放在另一个常量中:moveForever
- 最后一件事,我告诉函数运行这个常量:self.run(moveForever)
现在,为了让所有这些想法发挥作用,我必须在 GameScene 类中调用最后一个函数 (moveItDamn)。完成!
嗯,我不知道这是否是做我想做的事情的最佳方式,我会很感激其他提示。我是一个完全的初学者,在学习这门语言方面遇到了困难,但是当我找到一种方法来做到这一点时,我决定与其他像我一样的初学者分享我的工作:)
关于swift - 图像无需接触即可移动 - xcode/swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59522659/