加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

10.spritkit征程——使用nodes来新增内容

发布时间:2020-12-14 02:20:22 所属栏目:百科 来源:网络整理
导读:10.spritkit征程——使用Nodes来新增内容 上文讲到新的场景空无一物,略显凄凉,因此今天我们今天首要任务就是往里面填东西,比如:一架简陋的太空船。友情提示:请勿过分憧憬项目最后会给你呈现一架华丽的飞机。orz….. 我始终坚信把 基础知识讲清楚,将全面

10.spritkit征程——使用Nodes来新增内容

上文讲到新的场景空无一物,略显凄凉,因此今天我们今天首要任务就是往里面填东西,比如:一架简陋的太空船。友情提示:请勿过分憧憬项目最后会给你呈现一架华丽的飞机。orz…..

我始终坚信把基础知识讲清楚,将全面,简单化比那些所谓的长篇大论、举例无数的书本来的美妙。因此我们首先来理清一下几个东西:

关键的几个概念:
SKView: 在SpriteKit中扮演着作为视图呈现内容的重要角色,继承于UIView
SKNode: 是SpriteKit中最最最最”老”的祖先,也就是父类。要知道Sprite Kit中最基本的东东就是节点(Node),举个不恰当的例子,分子原子组成了我们的世界(打个比方而已,别较真,博主化学不好),节点就好比是分子原子组成了Sprite Kit的世界!那么世界上其他物种,比如树、泥土、动物都是由分子原子构成才有了形形色色的世界,同理在Sprite Kit世界中,采用继承方式来创建新的“Node”,比如SKSceneSKSpriteNodeSpriteShapeNode等等各司其职,从继承关系来说它们都是源自SKNode,从本身来说不但继承了父类的属性方法,自己又开辟了一条道路。
节点树:首先请你抛开继承关系,来谈谈节点树,现在我们所知道的是在Sprite Kit中都是由Node组成。想象现在我们正在制作一款游戏,先要有一个场景(SKScene),这是根节点;接下来可能需要来个文本(SKLabelNode)来简单说下东西,再来一架飞机(SKSpriteNode),它们都是隶属于场景中的,就是在根节点下分叉成2股;对了飞机上得搞个灯光,因此你在飞机节点上添加一个灯光(可能就是图片拉,当然也是SKSpriteNode),这样在飞机节点下又加了一个节点。是不是有点树的感觉了??

理解完上面的概念,是时候来实战一把了:

通常我们使用SKSpriteNode 类来新增一些场景的内容,它对有纹理和无纹理对象都通吃!本文中我们创建一个没有纹理(无图片)的长方形,美名约:飞船。但是现在由于没有纹理,可能看上去很丑,不过这都预留着,假如有一天你发现了一个合适的图片,就给你的飞船换上吧。实际开发中,你可能需要创建数十个,或者上百个节点来呈现一个丰富的场景,但是基本原理都是差不多的拉!

本文中,首先创建一个飞船的骨架,就是一个长方形,此外还要创建灯光,这里就有两个Sprite node了,但是我们不应该将他们都添加到场景中,为什么?因为灯光要随着飞船移动而移动,所以灯光sprite Node应该添加到飞船这个sprite node上,不难理解吧?

创建一架飞船

  1. SpaceshipScene.swift文件中找到createSceneContents方法添加新内容:

    let spaceship:SkSpriteNode = newSpaceship()
    spaceship.position = CGPointMake(CGRectGetMidX(self.frame),CGRectGetMidY(self.frame)-150)
    self.addChild(spaceship)
  2. 实现newSpaceship方法:

    func newSpaceship()->SKSpriteNode{
        //船体叫做hull
        let hull = SKSpriteNode(color: SKColor.grayColor(),size: CGSizeMake(64,32))
        //创建动作 sequence传入的要是一个数组[],里面有4个动作,简单!
        let hover = SKAction.sequence
                let hover = SKAction.sequence([
            SKAction.waitForDuration(1.0),SKAction.moveByX(100,y: 50,duration: 1.0),SKAction.waitForDuration(1.0),SKAction.moveByX(-100,y: -50,])
        hull.runAction(SKAction.repeatActionForever(hover))
    }
  3. 现在来Build and Run 下,看看效果。

  4. 刚才我们创建了船体,现在来增加飞船的灯光,在newSpaceship函数最下面添加以下代码:

    //实例化一个灯光,该函数在下面给出
    let light1 = newLight()
    light1.position = CGPointMake(-28.0,6.0)
    hull.addChild(light1)
    
    //实例化第二个灯光
    let light2 = newLight()
    light2.position = CGPointMake(28.0,6.0)
    hull.addChild(light2)
  5. 实现newLight代码

    func newLight()->SKSpriteNode{
        //纯手工敲代码,代码都是官方文档OC写的
        //对着文档直接翻译成swift,有不对之处请留言
        let light = SKSpriteNode(color: SKColor.grayColor(),size:CGSizeMake(8,8))
    
        let blink = SKAction.sequence([
            SKAction.fadeOutWithDuration(0.25),SKAction.fadeInWithDuration(0.25),])
        let blinkForever = SKAction.repeatActionForever(blink)
    
        light.runAction(blinkForever)
    
        return light
    }
  6. Build and run!!!!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读