swift - 图像无需接触即可移动 - xcode/swift

标签 swift xcode

我正在尝试创建一个贪吃蛇游戏。 要做到这一点,重要的是蛇要不断移动。例如,如果用我的手指向右滚动,蛇必须开始向右移动,并且他必须继续这样做。 好吧,我创建了一个包含 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)
    }

我在这里做什么?

  1. 我创建了一个名为“moveSnake()”的新函数
  2. 现在我声明一些变量和常量:

    • 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/

    相关文章:

    swift - 每次点击时如何制作从地板到我的英雄的对称轴?

    SwiftUI 背景图像全屏

    ios - 如何在 Swift 中显示带有 UICollectionView 的弹出 UIViewController?

    ios - UITabBarItem 的背景颜色?(Swift/xCode)

    ios - 当应用程序进入后台时,Swift URLSession DataTask 失败

    ios - 尽管添加了自动布局约束,但 UIScrollView 不滚动

    swift - UITableView,尽管在 UIView 层次结构检查器中显示,但单元格中的图像未显示

    iphone - 如何设置 UITableView 部分以每 5 行单元格开始新部分

    ios - 针对 iOS 商店存档错误验证应用程序

    ios - 在 VCard Swift 中导出图片