iOS游戏框架Sprite Kit技术详解
上QQ阅读APP看书,第一时间看更新

3.5 删除精灵

在一个游戏中有些精灵可能在游戏开始是使用到,但是在游戏中间或者末尾就不再需要这些精灵了,此时就需要将这些精灵从场景中及时地删除。本节将为开发者讲解两种删除精灵的方法:一种是删除指定的精灵;一种是删除所有的精灵。

3.5.1 删除指定的精灵

删除指定的精灵是指如果不需要某一精灵就将此精灵进行删除。想要实现此功能,需要使用到removeFromParent()方法,其语法形式如下:

func removeFromParent()

【示例3-13】以下将使用removeFromParent()方法删除显现在场景中的某一个精灵。具体的操作步骤如下:

(1)创建一个Game类型的项目,命名为3-9。

(2)添加图像1.png、2.png到创建项目的Supporting Files文件夹中。

(3)将设备的方向设置为水平方向。

(4)打开GameScene.swift文件,将此文件中多余的代码删除,然后编写新的代码,此代码实现的功能是显示两个精灵到场景中,并删除其中的一个精灵。代码如下:

import SpriteKit
class GameScene: SKScene {
    override func didMoveToView(view: SKView) {
        var sprite1=SKSpriteNode(imageNamed:"1.png")
        sprite1.position = CGPointMake(300,403)
        sprite1.setScale(0.5)
        self.addChild(sprite1)
        var sprite2=SKSpriteNode(imageNamed:"2.png")
        sprite2.position = CGPointMake(750,403)
        sprite2.setScale(0.5)
        self.addChild(sprite2)
        sprite2.removeFromParent()                  //删除创建的第二个精灵对象
    }
}

此时运行程序,会看到如图3.29所示的效果。

图3.29 运行效果

3.5.2 删除所有精灵

如果开发者不需要场景中的所有元素该怎么做呢?还是使用removeFromParent()方法进行逐个的删除吗?这里我们需要使用到一个新的删除方法,即removeAllChildren()方法,此方法可以将场景中的所有精灵进行删除,其语法形式如下:

func removeAllChildren()

【示例3-14】以下将使用removeAllChildren()方法删除显现在场景中的所有的精灵。具体的操作步骤如下:

(1)创建一个Game类型的项目,命名为3-10。

(2)添加图像1.png、2.png到创建项目的Supporting Files文件夹中。

(3)将设备的方向设置为水平方向。

(4)打开GameScene.swift文件,将此文件中多余的代码删除,然后编写新的代码。此代码实现的功能是显示两个精灵到场景中,然后再将场景中的所有精灵删除。代码如下:

import SpriteKit
class GameScene: SKScene {
    override func didMoveToView(view: SKView) {
        var sprite1=SKSpriteNode(imageNamed:"1.png")
        sprite1.position = CGPointMake(300,403)
        sprite1.setScale(0.5)
        self.addChild(sprite1)
        var sprite2=SKSpriteNode(imageNamed:"2.png")
        sprite2.position = CGPointMake(750,403)
        sprite2.setScale(0.5)
        self.addChild(sprite2)
        removeAllChildren()                                         //删除所有的精灵对象
    }
}

此时运行程序,会看到如图3.30所示的效果。

图3.30 运行效果