使用Swift和SpriteKit写一个忍者游戏

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


这篇文章的游戏使用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

胜利失败场景


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值