主页(http://www.zhonghuagame.com):13岁iOS开发者:Swift开发Sprite Kit游戏实践
注意:physics body(物理实体)的形状是圆的,仅跟monkey的形状近似而已。无需做到精确,只要凑效就好。同时将physics body设定为不旋转。
好,现在来试试看。还是GameScene.swift,在didMoveToView(_:)后添加如下代码:
将这一行代码添加到spawnEnemy()末尾:
那么首先要做的就是更新spawnEnemy()那一行代码,敌人sprite的position编写如下:
这里用SKAction移动monkey,就像之前移动敌人一样。推荐用Sprite Kit内置的物理引擎,更加简单。
enemy.position = CGPoint(x: frame.size.width + enemy.size.width/2, y: frame.size.height * random(min: 0, max: 1))现在,用更多action让敌人从屏幕一端移动到另一端,游戏变得更有趣了。
编写完成后运行,结果应该是敌人移动到了屏幕另一端,然后完全消失。如下所示:
import SpriteKit class GameScene: SKScene { let player = SKSpriteNode(imageNamed:"spacemonkey_fly02") override func didMoveToView(view: SKView) { player.position = CGPoint(x:frame.size.width * 0.1, y: frame.size.height * 0.5) addChild(player) backgroundColor = SKColor.blackColor() runAction(SKAction.repeatActionForever( SKAction.sequence([ SKAction.runBlock(spawnEnemy), SKAction.waitForDuration(1.0)]))) } func random() -> CGFloat { return CGFloat(Float(arc4random()) / 0xFFFFFFFF) } func random(#min: CGFloat, max: CGFloat) -> CGFloat { return random() * (max - min) + min } func spawnEnemy() { let enemy = SKSpriteNode(imageNamed: "boss_ship") enemy.name = "enemy" enemy.position = CGPoint(x: frame.size.width, y: frame.size.height * random(min: 0, max: 1)) addChild(enemy) } }编写完成后运行,敌人就出现在屏幕右边的随机位置上了:
enemy.runAction( SKAction.moveByX(-size.width - enemy.size.width, y: 0.0, duration: NSTimeInterval(random(min: 1, max: 2))))此处稍作解释:
物理移动sprite游戏的设定是:不点击屏幕时,monkey会落下来;点击时,monkey会跳起。
编写完成后运行,就能看到monkey在屏幕上时而落下,时而消失,很酷吧?
这时代码看起来如下所示:
player.physicsBody = SKPhysicsBody(circleOfRadius:player.frame.size.width * 0.3) player.physicsBody?.allowsRotation = false第一行为monkey创建了一个physics body,在物理引擎的作用下,monkey因引力和其他外力而落下”。
让敌人们动起来先对“敌人”的代码进行微调,使它们在出现之前,完全隐藏在屏幕后(而非仅仅隐藏一半)。从天而降的设定为游戏增加了难度,也增添了乐趣。