从头开始创建您的第一个iPhone游戏,无需任何编码经验。

本教程是为Swift 4.0 / XCode 9编写的,在我更新本文之前,任何将来的版本都可能有问题。

因此,您对构建手机游戏感兴趣吗? 也许这是起飞并购买新车的诱惑,或者仅仅是创建自己的游戏的热情。 无论您的动机是什么,本教程将引导您逐步完成设置计算机以构建应用程序以及从头开始创建简单游戏的步骤! 所有游戏代码都包含在本教程中; 不需要任何编程知识即可完成该项目。

完成本教程后,您将能够在设备或设备模拟器上运行自己构造的IOS应用。 您将了解从头开始设计游戏的基础知识,在应用关闭后如何将数据保存到设备中,如何在屏幕上渲染精灵,以及开始了解如何使用SpriteKit游戏引擎。 我还将向您介绍如何设计Snake游戏以及如何开始构建自己设计的游戏!

以下是在App Store中提供的该游戏的稍作修改版本的下载链接:https://itunes.apple.com/us/app/minimal-snake/id1355406338?mt=8(完全免费,没有广告)。

注意:在本文中,我一直使用“复制/粘贴”一词,一位读者向我指出,这是一种不好的做法,我完全同意。 但是,如果您想快速复制代码并创建可以正常运行的产品,则可以从手动写下每一行中获得更多收益!


图F
  • 1:将gameLogo移出屏幕,然后将其隐藏。 操作完成后,将在SKAction之后运行括号。 例如,如果我们运行持续时间为10的SKAction,则括号内的代码将在10秒后运行。 这是一个例子:
  exampleNode.run(SKAction.move(作者:CGVector(dx:0,dy:0),持续时间:10){ 
打印(“ 10秒后到达”)
}
  • 2:将playButton缩放为0; 此操作将缩小按钮,然后将其隐藏。
  • 3:将bestScore标签移动到屏幕底部。

现在,单击播放按钮时,菜单的行为应类似于此gif(图F)!

现在,我们将开始设计该游戏的实际“蛇”部分,首先添加这些代码行,以使您的代码与下面的图像匹配(图G)。

  // 1 
var currentScore:SKLabelNode!
var playerPositions:[(Int,Int)] = []
var gameBG:SKShapeNode!
var gameArray:[[node:SKShapeNode,x:Int,y:Int)] = [] // 2
initializeGameView()// 3
私人函式initializeGameView(){
// 4
currentScore = SKLabelNode(fontNamed:“ ArialRoundedMTBold”)
currentScore.zPosition = 1
currentScore.position = CGPoint(x:0,y:(frame.size.height / -2)+ 60)
currentScore.fontSize = 40
currentScore.isHidden = true
currentScore.text =“分数:0”
currentScore.fontColor = SKColor.white
self.addChild(currentScore)
// 5
设宽度= frame.size.width-200
设高度= frame.size.height-300
let rect = CGRect(x:-宽度/ 2,y:-高度/ 2,宽度:宽度,高度:高度)
gameBG = SKShapeNode(rect:rect,cornerRadius:0.02)
gameBG.fillColor = SKColor.darkGray
gameBG.zPosition = 2
gameBG.isHidden = true
self.addChild(gameBG)
// 6
createGameBoard(width:width,height:height)
}

这是此方法的说明:

  • 1:调用finishAnimation()函数。
  • 2:此功能将在蛇自身闭合时检查蛇的最终动画是否完成。 一旦playerPositions数组中的所有位置相互匹配,蛇就会缩小到一个正方形。 发生这种情况之后,我们将playerDirection设置为4(以前将其设置为0表示死亡),然后显示菜单对象。 我们还隐藏了currentScore标签和gameBG对象(正方形网格)。

现在打开您的AppDelegate.swift文件,并添加以下代码行,以使您的项目与图CC匹配。 此代码段使用UserDefaults将数据保存到设备的内存中。 如果您打算使用大量存储的数据来构建项目,则可能会引起问题,但是,它对于诸如设置切换和变量之类的简单操作仍然适用。

 让默认值= UserDefaults.standard 
让defaultValue = [“ bestScore”:0]
defaults.register(默认值:defaultValue)

现在返回您的GameManager.swift文件并创建以下方法,以使您的代码与图DD相匹配。 此代码块仅检查分数是否超过了最佳分数,并相应地进行更新。

  // 1 
私人功能updateScore(){
如果currentScore> UserDefaults.standard.integer(forKey:“ bestScore”){
UserDefaults.standard.set(currentScore,forKey:“ bestScore”)
}
currentScore = 0
scene.currentScore.text =“分数:0”
scene.bestScore.text =“最佳成绩:\(UserDefaults.standard.integer(forKey:” bestScore“))”
}

打开GameScene.swift并编辑您的initializeMenu()函数,以便您的文件与Figure EE相匹配。 这样可以确保在游戏加载时显示的是保存的最佳分数,而不是0。

  bestScore.text =“最佳分数:\(UserDefaults.standard.integer(forKey:” bestScore“))” 

添加此新代码后,一旦应用程序关闭,您的高分就会保存到设备的内存中。

为了删除屏幕底部的开发人员信息,请打开GameViewController.swift文件,并将view.showFPS和view.showsNodeCount设置为false。

您现在已经从头开始构建了整个iPhone游戏! 这是演示最终产品的视频。

如果您喜欢这个项目,请考虑签出我的IOS应用程序! 如果您有任何问题或疑问,请随时通过shrader.gavin@gmail.com向我发送电子邮件。

我们今天构建的内容几乎看不到SpriteKit游戏引擎必须提供的复杂性。 将来,我计划进行涵盖物理,关卡设计和动画的教程。