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

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

时间: 2024-08-25 22:10:34

07.spritekit征程——创建第一个场景的相关文章

第三讲:C++基础语法 & 创建第一个场景 ------学习笔记

C++语法 1.在.H(头文件)文件里面进行声明,在CPP文件里面进行定义: 2.双冒号:: 是一个作用域操作符: //自动回收机制,当不用这个类的时候,自动回收 CREATE_FUNC(HelloWorld); 如何创建一个最简单的场景: 新增一个类: 然后在头文件处输入 #pragma once#include "cocos2d.h" using namespace cocos2d; class MyScene:public CCLayer{public: MyScene(); ~

11.spritekit征程——结尾篇之节点的狂欢

11.spriteKit征程--结尾篇之节点的狂欢 本文是sprite kit征程的结尾篇,当然这仅仅还只是开始.另外我已经完成一款sprite Kit的教学软件.希望多多支持. 小节目录: 01.关于sprite_kit 02.SpriteKit前瞻之视图场景 03.sprite_kit前瞻之节点树 04.sprite_kit前瞻之纹理 05.sprite_kit前瞻之节点的动画 06.sprite_kit前瞻之创造"真实"的世界 07.spritekit征程--创建第一个场景 08

09.spritekit征程——场景的切换

09.spritekit征程--场景的切换 上文讲到咱们的小精灵(sprite)在场景中"舞动",枯燥的学习似乎有了那么点意思.我相信各位看官都是想自己开发一款独有的游戏,自然就少不了绚丽的效果以及开场.因此今天咱们来对场景之间的切换进行入门. Sprite Kit对场景之间的切换简单到爆.在下面的例子当中,我们将创建第二个场景来学习其他游戏特性.前面的动画效果最终会导致"Hello World"文本从屏幕淡出,但这仅仅只发生在当然场景中.今天我们的任务是当文本消失

08.spritekit征程——场景中的动画

08.spritekit征程--场景中的动画 接着上文,显示静态的文字是否无法满足你的欲望,那么本文的内容绝对让你热血沸腾,记得小时候爱看动画,现在有这么一个机会让你来创作是不是想想都有点小激动呢. 动画的核心呢就是actions.在Sprite Kit 中的大多数action 其实就是改变节点(Node)的属性罢了.假如你还不了解节点是什么,建议好好谷歌百度下,虽说都是最基础的知识,但是我认为"万丈大楼平地起",打好基础很是关键,另外就是坚持. 关于节点: 节点是最简单也是最难理解的

【淡墨Unity3D Shader计划】一间 创建一个游戏场景 & 第一Shader写作

本系列文章由@浅墨_毛星云 出品.转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/40723789 作者:毛星云(浅墨)    微博:http://weibo.com/u/1723155442 邮箱: [email protected] 作为一个系统介绍Unity3D中Shader编写的系列文章的开篇.本文的第一部分为系列文章的前言,然后第二部分介绍了这个系列文章中我们会使用的游戏场景创建方式.最后一部分解说了怎样在U

Android使用AndEngine创建第一个程序

首先要把andengine.jar复制到libs文件夹里 01 package com.hu.anden; 02   03 import org.anddev.andengine.engine.Engine; 04 import org.anddev.andengine.engine.camera.Camera; 05 import org.anddev.andengine.engine.options.EngineOptions; 06 import org.anddev.andengine.

创建和转换场景

创建和转换场景 尊重原创:http://cn.cocos2d-x.org/tutorial/show?id=2047 什么是场景? 场景是包含精灵(Sprites),标签(Labels),节点(Nodes)和其他游戏所需对象的容器.场景负责游戏逻辑的运行和游戏内容的逐帧渲染.每个游戏至少需要一个场景,你可以将场景想象成一部电影,场景就是其中正在运行并且用户可以实时看到的电影画面.游戏中可以拥有多个场景,并且可以在多个不同的场景之间自然的切换.Cocos2d-x提供了多种场景切换效果,你甚至可以使

01-THREE.JS第一个场景

THREE.JS第一个场景 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script src="https://cdn.bootcss.com/three.js/r67/three.js"></script> <script src="https://cdn.b

【VMCloud云平台】SCCM(五)创建第一个集合

继上一篇云平台完成SCCM部署篇之后,SCCM篇正式开始,今天将开始介绍SCCM创建第一个集合,集合作用跟GPO中的作用域是一样的,即有时候你需要对不同范围的机器进行分发操作或其他操作时则需要把范围规定起来(紫色为完成实施,红色为实施中): 1. 打开管理控制台,定位点客户端符合性: 2. 在设备集合上点击右键选择创建设备集合: 3. 输入新集合名称,并选择目标机器所在的集合: 4. 点击下一步,新建成员规则,选择直接规则: 5. 输入资源类型与规则: 6. 接着就会出现筛选出来的值,进行勾选: