这个很简单。用Swift和SpriteKit的。熟悉cocos2d,coco2d-x的其实上手SpriteKit很容易。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISN3gzNzQTM3EjMwATM0EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
import SpriteKit
class GameScene: SKScene {
var _player: SKSpriteNode!
var fbArray = Array<SKSpriteNode>()
var monsterArray = Array<SKSpriteNode>()
var _fbArray = NSMutableArray()
var _monsterArray = NSMutableArray()
override func didMoveToView(view: SKView) {
// 把忍者放在屏幕左边中间
let sk = SKSpriteNode(imageNamed: "player")
sk.position = CGPoint(x: sk.size.width / 2, y: self.size.height / 2)
self.addChild(sk)
_player = sk
self.addMonster()
let wait = SKAction.waitForDuration(1.0)
let addAction = SKAction.runBlock { () -> Void in
self.addMonster()
}
let sq = SKAction.sequence([addAction, wait])
let fsq = SKAction.repeatActionForever(sq)
self.runAction(fsq)
}
// 当点击屏幕时,添加飞镖
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
//let point = (CGPoint)(touches.anyObject()?.locationInNode(self))
for touch in touches {
let point = touch.locationInNode(self)
addFB(point)
}
}
// 添加忍者飞镖
func addFB(point: CGPoint) {
let pro = SKSpriteNode(imageNamed: "projectile")
let from = CGPointMake(_player.size.width + pro.size.width * 0.5, self.size.height * 0.5)
let x = self.size.width + pro.size.width * 0.5 - from.x
let offset = CGPointMake(point.x - from.x, point.y - from.y)
if (offset.x <= 0) {
return
}
let y = offset.y / offset.x * x + from.y
let to = CGPointMake(x, y)
pro.position = from
self.addChild(pro)
//fbArray.append(pro)
_fbArray.addObject(pro)
let p = CGPointMake(to.x - from.x, to.y - from.y)
let distance = sqrt(p.x * p.x + p.y + p.y)
let volcity = self.size.width
var duration: Double = Double(distance / volcity)
let move = SKAction.moveTo(to, duration: duration)
pro.runAction(move, completion: { () -> Void in
pro.removeFromParent()
self._fbArray.removeObject(pro)
})
}
// 添加怪物
func addMonster() {
let monster = SKSpriteNode(imageNamed: "monster")
let maxY = UInt32(self.size.height - monster.frame.size.height)
let x = (self.size.width + monster.frame.size.width * 0.5)
let y = CGFloat(arc4random_uniform(maxY))
let y1 = y + monster.frame.size.height * 0.5
monster.position = CGPoint(x: x, y: y1)
self.addChild(monster)
_monsterArray.addObject(monster)
let move = SKAction.moveToX(-monster.frame.size.width, duration: 4.0)
monster.runAction(move, completion: { () -> Void in
monster.removeFromParent()
self._monsterArray.removeObject(monster)
})
}
// 碰撞检测,移除飞镖,怪物。
override func update(currentTime: CFTimeInterval) {
var proSet = NSMutableSet()
for pro in _fbArray {
var monsterSet = NSMutableSet()
for monster in _monsterArray {
if (CGRectIntersectsRect(monster.frame, pro.frame)) {
monsterSet.addObject(monster)
}
}
for monster in monsterSet {
_monsterArray.removeObject(monster)
let rotate = SKAction.rotateToAngle(-3.14 * 0.5, duration: 0.1)
monster.runAction(rotate, completion: { () -> Void in
monster.removeFromParent()
})
}
if (monsterSet.count > 0) {
proSet.addObject(pro)
}
}
for sk in proSet {
sk.removeFromParent()
_fbArray.removeObject(sk)
}
}
}
https://github.com/SylvanasX/NaJia