这篇文章的游戏使用SpriteKit和Swift语言来完成。
SpriteKit是苹果自己的游戏引擎,更能贴合iOS系统底层的API,不过架构和实现上都是模仿了Cocos2D。所以使用上其实差别不大,不过SpriteKit更轻量级一些。
程序入口
main函数跟OC一样,将入口指向了appdelegate,而cocoa touch框架几乎跟OC一样,只不过用Swift重写了一遍。
这些模板自带的方法跟OC项目并无差异。。。
开始编写游戏
如果你了解CCNode,CCSprite,CCScene等那看起SpriteKit几乎没有任何问题。
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
var skView : SKView = self.view as SKView
if !skView.scene {
//DEBUG
skView.showsFPS = true
skView.showsNodeCount = true
var scene : SKScene = GameScene.sceneWithSize(skView.bounds.size)
scene.scaleMode = .AspectFill
skView.presentScene(scene)
}
}
由于当viewDidLoad方法被调用时,skView还没有被加到view的层级结构上,因而它不能相应方向以及布局的改变。所以skView的bounds属性此时还不是它横屏后的正确值,而是默认竖屏所对应的值,看来这个时候不是初始化scene的好时机。所以我们需要将这部分代码挪到将要布局子视图的方法中。
播放背景音乐
这里我们使用AVAudioPlayer来播放音乐。
Controller中声明一个属性
var backgroundMusicPlayer : AVAudioPlayer?
func setupMedia() {
var error : NSError?
let backgroundMusicURL : NSURL = NSBundle.mainBundle().URLForResource(BG_MUSIC_NAME, withExtension: "caf")
backgroundMusicPlayer = AVAudioPlayer(contentsOfURL: backgroundMusicURL , error: &error)
if error {
println("load background music error : \(error)")
} else {
backgroundMusicPlayer!.numberOfLoops = -1
backgroundMusicPlayer!.prepareToPlay()
backgroundMusicPlayer!.play()
}
}
override func viewDidLoad() {
super.viewDidLoad()
setupMedia()
}
在视图加载完毕时开始播放。
游戏场景
我们建了一个SKScene的子类来进行游戏显示和逻辑的编写。
class GameScene: SKScene

本文介绍如何利用Apple的SpriteKit游戏引擎和Swift语言开发一款忍者游戏,涉及程序入口、游戏场景设置、背景音乐播放、怪兽与飞镖的添加以及碰撞检测等关键步骤。
最低0.47元/天 解锁文章
125

被折叠的 条评论
为什么被折叠?



