【发布时间】:2019-04-12 03:36:57
【问题描述】:
我正在创建一个游戏,玩家必须触摸敌人的精灵才能摧毁它们。播放器始终位于屏幕中间。有许多不同的敌人类型,我首先使用 2 种敌人类型来测试应用程序的想法。
这是创建敌人的代码。
func createEnemy(type:Enemies, forSpawner spawner: Int) -> SKSpriteNode?
{
switch type {
case .diamond:
enemySprite = SKSpriteNode(imageNamed: "Diamond")
enemySprite.setScale(0.5)
enemySprite.color = UIColor.green
enemySprite.colorBlendFactor = 1
enemySprite.name = "enemy"
let location = targetLocation
let action = SKAction.move(to: CGPoint(x: location.x, y: location.y), duration: 2.0)
enemySprite.run(action)
case .diamondSolid:
enemySprite = SKSpriteNode(imageNamed: "DiamondSolid")
enemySprite.setScale(0.5)
enemySprite.color = UIColor.purple
enemySprite.colorBlendFactor = 1
enemySprite.name = "enemySolid"
let location = targetLocation
let action = SKAction.move(to: CGPoint(x: location.x, y: location.y), duration: 1.0)
enemySprite.run(action)
}
guard let enemyPosition = spawnArray?[spawner].position else {return nil}
let dx = targetLocation.x - enemyPosition.x
let dy = targetLocation.y - enemyPosition.y
let angle = atan2(dy,dx)
enemySprite.position.x = enemyPosition.x
enemySprite.position.y = enemyPosition.y
enemySprite.physicsBody = SKPhysicsBody(rectangleOf: CGSize(width: enemySprite.size.width, height: enemySprite.size.height))
enemySprite.physicsBody?.categoryBitMask = enemyCategory
enemySprite.zRotation = angle - 90 * degreesToRadians
return enemySprite
}
以及触控功能
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
if let touch = touches.first {
let location = touch.previousLocation(in: self)
let node = self.nodes(at: location).first
if node?.name == "enemy"{
node?.removeFromParent()
}
}
}
我认为我需要做的是从触摸事件中发送一个位置并将其发送到一个新函数,该函数使用一些发射器粒子优势摧毁敌人,让玩家知道形状已经死亡。根据类型,它会摧毁并添加到分数或摧毁,添加到分数并生成许多其他敌人并将它们移回一定数量,然后再将它们移动到 targetLocation。对我如何解决这个问题有任何帮助吗?
【问题讨论】:
标签: ios sprite-kit