前言:学了三个月的时候,就打算写一个教程的,但是后来一直忙于开发。直到11.30号提交了上一个游戏,这才腾出一小段时间,打算整理一下过去所学的,结合自己的经历,出一个简单的教程抛砖引玉,希望能帮助到那些苦于找不到简单易学的中文教程的童鞋们。好了废话不多说,准备好开发你自己的小游戏了吗?
呃呃,再说几句废话:本教程适用于入门独立开发者,我将会告诉你如何最快开发出游戏,但所使用的未必是最佳方案。本教程将使用纯swift+storyboard进行开发,所以你最好有一点点这两种技术的基础。
第一篇新建项目:
1.左侧选iOS,右侧选Game
2.名字随便写,语言Swift,技术Spritekit,设备随意。我选的是iPhone
3.位置随意放在电脑里
好了,你的第一个游戏这样就算奠基了~你可以跑一下command+R到虚拟器里~(我们将要做个什么游戏呢?之后就知道了~)
清理干净
好,下一步对你来说也许并不容易。但是请容许我有一点点代码洁癖,下面我们彻底删除GameScene.sks文件。由于Xcode对于sks文件的支持还并不完善,所以我们几乎用不到这个,任何操作都可以用代码完成,而且并不难。
删除文件之后打开GameViewController.swift,(注意:我的项目里没有使用任何前缀,如果你习惯加前缀,请自己对应)删除extension SKNode整个扩展,大概十几行,这个是用来加载sks文件的。
然后进入viewDidLoad方法,将if let scene = ...改为let scene = GameScene(size:CGSizeMake(1024,768))或者其他你想要的尺寸。移除if语句的其他部分。我们不使用sks文件来加载场景,而是直接用GameScene类初始化了一个场景实例。
ps:此时你可以运行一下,结果并没有任何变化~
创建精灵
进入GameScene.swift文件,我们要正式开工了~按照惯例,干掉didMoveToView和touchesBegan里的所有代码。注释写的比较清楚了,前者是一个view首次加载好并放到屏幕上的瞬间,会调用到的一个函数,在这里,你可以放所有你准备展示在玩家面前的内容(加载游戏内容)。后者是玩家点击屏幕的时候,会调用的一个函数(处理玩家操作)。以下简称load和touch
首先,在load中加入如下代码:
var plane = SKSpriteNode(imageNamed: "Spaceship")//可以在Images.xcassets中找到默认飞船图片plane.position = CGPointMake(self.size.width * 0.5, self.size.height * 0.5)//self是指当前场景,左下角为坐标原点self.addChild(plane) //添加精灵到场景中
可以运行一下,我们会发现屏幕中央多了一个飞机。
使用纹理
游戏中会用到很多素材,如果总是用上面的方式加载,图样图森破,too low to slow。如果有多个相同的怪物,他们可以共用一套纹理,这样可以提高游戏运行效率。
在load中,初始化plane之前,添加如下代码:
var planeTexture = SKTexture(imageNamed: "Spaceship")
将var plane = SKSpriteNode(imageNamed: "Spaceship")修改为var plane = SKSpriteNode(texture: planeTexture)
很简单吧,这样我们就使用了纹理技术来创建一个精灵。
呃呃,再说几句废话:本教程适用于入门独立开发者,我将会告诉你如何最快开发出游戏,但所使用的未必是最佳方案。本教程将使用纯swift+storyboard进行开发,所以你最好有一点点这两种技术的基础。
第一篇新建项目:
1.左侧选iOS,右侧选Game
2.名字随便写,语言Swift,技术Spritekit,设备随意。我选的是iPhone
3.位置随意放在电脑里
好了,你的第一个游戏这样就算奠基了~你可以跑一下command+R到虚拟器里~(我们将要做个什么游戏呢?之后就知道了~)
清理干净
好,下一步对你来说也许并不容易。但是请容许我有一点点代码洁癖,下面我们彻底删除GameScene.sks文件。由于Xcode对于sks文件的支持还并不完善,所以我们几乎用不到这个,任何操作都可以用代码完成,而且并不难。
删除文件之后打开GameViewController.swift,(注意:我的项目里没有使用任何前缀,如果你习惯加前缀,请自己对应)删除extension SKNode整个扩展,大概十几行,这个是用来加载sks文件的。
然后进入viewDidLoad方法,将if let scene = ...改为let scene = GameScene(size:CGSizeMake(1024,768))或者其他你想要的尺寸。移除if语句的其他部分。我们不使用sks文件来加载场景,而是直接用GameScene类初始化了一个场景实例。
ps:此时你可以运行一下,结果并没有任何变化~
创建精灵
进入GameScene.swift文件,我们要正式开工了~按照惯例,干掉didMoveToView和touchesBegan里的所有代码。注释写的比较清楚了,前者是一个view首次加载好并放到屏幕上的瞬间,会调用到的一个函数,在这里,你可以放所有你准备展示在玩家面前的内容(加载游戏内容)。后者是玩家点击屏幕的时候,会调用的一个函数(处理玩家操作)。以下简称load和touch
首先,在load中加入如下代码:
var plane = SKSpriteNode(imageNamed: "Spaceship")//可以在Images.xcassets中找到默认飞船图片plane.position = CGPointMake(self.size.width * 0.5, self.size.height * 0.5)//self是指当前场景,左下角为坐标原点self.addChild(plane) //添加精灵到场景中
可以运行一下,我们会发现屏幕中央多了一个飞机。
使用纹理
游戏中会用到很多素材,如果总是用上面的方式加载,图样图森破,too low to slow。如果有多个相同的怪物,他们可以共用一套纹理,这样可以提高游戏运行效率。
在load中,初始化plane之前,添加如下代码:
var planeTexture = SKTexture(imageNamed: "Spaceship")
将var plane = SKSpriteNode(imageNamed: "Spaceship")修改为var plane = SKSpriteNode(texture: planeTexture)
很简单吧,这样我们就使用了纹理技术来创建一个精灵。
