这一步我们开始学习如何创建怪兽精灵
为了让我们的游戏更加有趣,我们需要创建一些能够移动的怪兽精灵,那么,让我们在屏幕稍微偏右的地方创建一些怪兽精灵,然后给设置一个动作,让它们从右向左移动;
我们把一下的方法添加到GameScene.swift的文件中;
func random() -> CGFloat {
return CGFloat(Float(arc4random()) / 0xFFFFFFFF)
}
func random(#min: CGFloat, max: CGFloat) -> CGFloat {
return random() * (max - min) + min
}
func addMonster() {
//创建一个精灵
let monster = SKSpriteNode(imageNamed: "monster")
//设置精灵应该放置的Y坐标
let actualY = random(min: monster.size.height/2, max: size.height - monster.size.height/2)
//沿着屏幕的右边缘放置精灵
//根据上方随机得出的Y坐标放置精灵
monster.position = CGPoint(x: size.width + monster.size.width/2, y: actualY)
//将怪兽精灵添加到场景中
addChild(monster)
//定义怪兽的移动速度
let actualDuration = random(min: CGFloat(2.0), max: CGFloat(4.0))
//创建怪兽的动作
let actionMove = SKAction.moveTo(CGPoint(x: -monster.size.width/2, y: actualY), duration: NSTimeInterval(actualDuration))
let actionMoveDone = SKAction.removeFromParent()
monster.runAction(SKAction.sequence([actionMove, actionMoveDone]))
}
我们需要做一些简单的计算来决定我们需要在哪里创建怪兽精灵,放置精灵的位置,然后和放置忍者精灵的方式一样把怪兽精灵放到屏幕中;
但是这里有一个新的东西就是创建一个动作,Sprite Kit内部提供了一些非常方便的操作方法来帮助我们改变精灵的状态.比如说移动一个精灵,旋转一个精灵,让精灵隐藏,让精灵显示等等,在这里我们为怪兽精灵使用了三个动作
SKAction.moveTo(_:duration:): 我们使用这个动作将精灵从屏幕沿着直线移动到屏幕的左边,注意这里的duration参数可以让我们设置移动的时间需要多久,我们在这里随机把时间设置为2-4秒吧;
SKAction.removeFromParent():Sprite Kit提供了一个方法使我们能够将一个节点从它的父元素删除,在这里我们使用这个方法将一个看不见的怪兽精灵从场景中移除,因为我们不可能有无限多的怪兽精灵,而且如果不删除设备的内存资源消耗也是非常大的.
SKAction.sequence(_:):序列方法允许我们将一系列的动作同时按照设计的顺序串联起来,这种方法我们就可以先让精灵移动,然后将精灵从场景中移除;
在我们继续之前,我们将创建怪兽精灵的调用方法,为了让我们的游戏更加好玩.让我们一直不断的创建怪兽精灵吧.
我们只需要将以下的代码放到didMoveToView()方法中:
runAction(SKAction.repeatActionForever(
SKAction.sequence([
SKAction.runBlock(addMonster),
SKAction.waitForDuration(1.0)
])
))
在这里你使用的一系列动作(我们称之为代码块,使用强大的swift语言,我们可以无缝的使用addMonster()方法),当我们等待一秒钟的时候, 我们又源源不断地重复了这个动作;就是这样,让我们编译运行,现在你就能看到这些怪兽精灵在屏幕上面移动了!