在屏幕上的 3 个特定位置生成敌人 Swift SpriteKit IOS

Posted

技术标签:

【中文标题】在屏幕上的 3 个特定位置生成敌人 Swift SpriteKit IOS【英文标题】:spawn Enemies in 3 specific places on the screen Swift SpriteKit IOS 【发布时间】:2017-01-05 09:24:38 【问题描述】:

我正在使用 SpriteKit 快速构建游戏,此时我的敌人在屏幕上随机生成,我希望我的敌人仅在 3 个位置生成,例如左上角、中上角和右上角。这三个地方之间的产卵也是随机的。我尝试了一些代码,但我是初学者,我需要你们的帮助,谢谢

   //Generate the random Number

func random() -> CGFloat 
    return CGFloat(Float(arc4random()) / 0xFFFFFFFF)

func random(min min: CGFloat, max: CGFloat) -> CGFloat 
    return random() * (max - min) + min
   

这是生成敌人的代码

 func spawnEnemy() 



     let randomXStart = random(min: CGRectGetMinX(gameArea), max:  CGRectGetMaxX(gameArea))
     let startPoint = CGPoint(x: randomXStart, y: self.size.height * 1.2)

【问题讨论】:

从 sks 文件加载时场景的锚点为 0.5, 0.5。表示默认情况下精灵将被添加到屏幕的中心。左上角是-sceneWidth/2,-sceneHeight/2。右上角是sceneWidth/2,sceneHeight/2。这两点之间的点为 0,sceneHeight/2。要随机化精灵的 x 位置,只需在 -sceneWidth/2 和 sceneWidth/2 之间生成随机值。 【参考方案1】:

试试:

func spawnEnemy() 
     let randomXStart = random(min: 0, max:  2)
     let startPoint = CGPoint(x: randomXStart * self.size.width/2, y: self.size.height * 1.2)
     .
     .
     .
 

这会生成其他 0、1 或 2 的随机数。然后将精灵的 x 位置设置为屏幕宽度的一半 * 这个随机数将生成 0(左上角)的 x 位置,self. size.width/2(即屏幕的一半)或 self.size.width(即右上角)。

您可能需要根据精灵的anchorPoint 稍微调整这些,因此您还可以执行以下操作:

func spawnEnemy() 
     let randomXStart = random(min: 0, max:  2)

     switch floor(randomXStart) 
     case 0 :          
          let startPoint = CGPoint(x: 0, y: self.size.height * 1.2) + (adjustment factor for top-left corner)
     case 1 :          
          let startPoint = CGPoint(x: self.size.width/2, y: self.size.height * 1.2) + (adjustment factor for top-middle)
     case 2 :          
          let startPoint = CGPoint(x: self.size.width, y: self.size.height * 1.2) + (adjustment factor for top-right corner)
     default : break
     
     .
     .
     .
 

【讨论】:

谢谢,但我还有一个问题,我使用了你的 func spawnEnemy() 但现在当我尝试放置enemy.position = randomXtart 时它不起作用:它说不能分配time() 的值输入 CGpoint,所以我的敌人位置无法访问 case 0,1,2 也无法使 startPoint = CGPoint(x: spawnEnemy, y:spawnEnemy) 我能做什么? @DanielArdeleanu 你能把这个新代码贴在你有enemy.position = randomXstart 并且收到关于time() 的消息的地方吗? 它与您提供的第一个功能一起使用:func spawnEnemy() let randomXStart = random(min: 0, max: 2) let startPoint = CGPoint(x: randomXStart * self.size.width/2, y: self.size.height * 1.2) let startPoint = CGPoint(x: randomXStart * self.size.width/2, y: self.size.height * 0.8) 对于带有 switch randomXtart 的第二个功能,它不起作用,因为我不知道如何访问它。所以我有一个位置:`enemy.position = startPoint 与第一个功能一起使用,在第二个功能(带开关的那个)我不能放置敌人。位置 = startPoint,它无法访问案例 感谢您的回答,它确实帮助我完成了我想做的事情,现在我已经学会了如何更好地使用随机函数。将来我相信我还会学习如何访问 switch 语句。 @DanielArdeleanu 第二个示例中出现错误(参数中的右括号)。此外,您的 random() 函数返回 CGFloats,因此您需要将结果转换为 Int 才能使 Switch 工作查看我的编辑。

以上是关于在屏幕上的 3 个特定位置生成敌人 Swift SpriteKit IOS的主要内容,如果未能解决你的问题,请参考以下文章

Swift:在一定范围内随机生成敌人?

屏幕外敌人指示器算法

使用 SKSpritenodes/碰撞检测在 Swift 中自定义类

如何在屏幕上的特定位置设置视图?

如何在屏幕上的特定位置设置视图?

在 3 个按钮上滑动手指 - Xcode 和 Swift