码迷,mamicode.com
首页 > 其他好文 > 详细

07.spritekit征程——创建第一个场景

时间:2015-03-02 13:11:38      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:root   uiview   渲染   sprite   scene   

07.SpriteKit征程——创建第一个场景

Sprite Kit 的内容被放置于窗口当中,即那些可视内容。Sprite Kit 之中的内容由SKView 类进行渲染(:一般将普通的UIView转换成SKView是这么写的let skView = self.view as SKView )。由SKView 对象渲染的内容称之为场景,也就是Scene,它隶属于SKScene类.场景作为一个root node 又继承于UIResponder类,因此它能够响应用户的输入,当然还有其他丰富的内容使得非常好的适用于游戏。

由于在Sprite Kit 之中的内容是由View对象进行渲染呈现的,因此你可以将该View和其他Views相关联(注:在视图层级上)。

举例,什么叫combine this view with other views in the view hierarchy
首先我们创建一个UIButton,它是一个标准的UIControl,是不是有点蒙?但是下面我要告诉你,UIControl 类是继承于UIView !所以说按钮也是一个视图对吧(这里是给初学者进行简单知识补充)。现在将按钮放置到你的Sprite Kit视图之上,两个视图(一个是button,一个就是主View)有一个层级关系(比如视图包含了按钮,假如有个Label也放置到了视图上,那么标签和按钮就是同级关系,偶的粗浅理解)。

当然之上的例子,我们也可以通过增加交互精灵sprites实现我们自己的按钮,这完全取决于你。下面的例子我们来看看如何实现场景中的交互。

注:
统一下术语,为保持原汁原味,还是尽量用英文。
视图控制器:View Controller
视图:UIView
场景:SKView继承于UIView

写在前面

本文你可以创建一个Single View Application,如此,工程自动会给我们创建一个ViewController.swiftAppDelegate.swiftMain.storyboard文件。你大可以删掉ViewController.swiftMain.storyboard中的那个View Controller Scene,别问我具体删哪个,你要知道在SB里只有孤零零那一个,不删它删谁,之后呢就是按照接下来的干了。当然你也可以选择保留,因为我们可以修改已有的文件进行配置 也是一样的! 这只取决于你!!!

创建一个视图控制器

  1. 打开SB,Storyboard,拖一个ViewController进去,默认这个视图控制器包含了一个View,选中它,你会发现该视图默认继承于UIView,现在将其改为SKView。记住在Sprite Kit中的视图用SKView的,而非UIView

  2. 添加Cocoa Touch Class,而非Mac OSX的!增加一个GameViewController类,继承于UIViewController类,然后你得添加Sprite Kit的头文件!

    import SpriteKit  
    
  3. 实现视图控制器中的ViewDidLoad,来配置视图:

    override func viewDidLoad() {
        super.viewDidLoad()
    
        //将视图控制器包含的view转换成SKView 角色转换嘛
        let spriteView = self.view as SKView
        spriteView.showsDrawCount = true    //显示绘制次数
        spriteView.showsNodeCount = true    //显示当前节点数 越少越好
        spriteView.showsFPS = true          //显示帧数
    
        //还有代码需要添加到这里!!
    }
    

自定义一个场景

  1. 创建一个新类命名为HelloScene,并且继承于SKScene

    class HelloScene:SKScene{
        //其他存在的内容 待会可能要修改
    }
    
  2. 修改前面视图控制器中的代码,使得创建一个场景呈现到我们的视图View中。

    override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)
    
        //创建一个hello实例
        let hello = HelloScene(size:CGSizeMake(768,1024))
        /*
        还记得viewDidLoad我们也创建了一样的代码
        这里不对吧?我的理解,self.view 是已经存在的
        隶属于我们创建的视图控制器中的视图,现在我们创建
        了两个实例来指向同一个self.view。尽管它们名字是一样
        但是隶属的函数不同,自然也就不同喽。
        */
        let spriteView = self.view as SKView
    
        //呈现
        skView.presentScene(hello)
    }   
    
  3. Build and run!!! 但让这个app只会呈现一个空白视图….不过会显示帧数,绘制次数等信息。

添加内容到场景中

我们设计一款基于Sprite Kit的游戏时,将游戏内容划分为多个自定义场景(当然它们都是继承于SKScene类)进行呈现。就在刚刚我们创建了第一个HelloScene场景来显示"Hello World"文本,非常简单的一个小东西。类似于ViewController加载各自视图(View),通常做法是先配置好内容属性再呈现(比如子视图大小、放置位置、颜色等等),这很重要!引申到我们的SKScene,采用didMoveToView: 方法,任何时候场景将要被呈现到视图中时就会被调用!

  1. HelloScene添加一个标志位来追踪场景内容是否是第一次被创建,原因前面讲到了,任何时候场景被呈现到视图时就咬调用didMoveToView method。我可不想重复创建!

    //添加一个标志位到HelloScene类中,放到最上面。
    private var contentCreated:Bool  = false    
    
  2. 实现didMoveToView方法

    override func didMoveToView(view: SKView) {
    
        //判断是否是第一次创建 
        if(!self.contentCreated){
            //置位 以后就不会在执行这里的代码拉
            self.contentCreated = true
    
            //创建一个节点 但是是label的节点! 字体是Chalkduster 
            var helloNode = SKLabelNode(fontNamed: "Chalkduster")
            helloNode.text = "Hello Wolrd"
            helloNode.fontSize = 42
    
            //位置是放在屏幕中间
            helloNode.position = CGPoitMake(CGRectGetMidX(self.frame),
                                    CGRectGetMidY(self.frame))
            self.backgroundColor = SKColor.blueColor()
            self.scaleMode = .AspectFit
            //添加进去
            self.addChild(helloNode)
        } 
    }
    
  3. Build and Run !!!!Nice Job

nice job! 尽管如此我发现只是显示一点东西似乎有些枯燥 因此下章将加入一些Action

07.spritekit征程——创建第一个场景

标签:root   uiview   渲染   sprite   scene   

原文地址:http://blog.csdn.net/colouful987/article/details/44016809

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!