在屏幕边缘产生精灵,同时将锚点保持在中心

时间:2017-11-03 16:57:27

标签: swift sprite-kit

我正在开发一个简单的游戏,其中屏幕中间有一个玩家精灵,怪物精灵在屏幕边缘的随机位置产生并慢慢向玩家精灵移动。最初,通过将GameScene锚点设置为左下角self.anchorPoint = CGPoint(x: 0.0, y: 0.0),并将玩家置于中心位置player.position = CGPoint(x: size.width * 0.5, y: size.height * 0.5),可以正常工作。但是,因为我改变了锚点,当我旋转iPad时,播放器最终偏离中心。

我认为使用(0,0)锚点更容易,因为我可以使用像randomEdgePosition = CGPoint(x: 0.0, y: randomFloat(min: 0.0, max: 1.0) * size.height)这样的行从边缘随机生成怪物。但是我的玩家定位更容易保持锚点居中。如何使用中心锚点计算屏幕边缘?或者,我怎样才能让我的玩家以(0,0)锚点为中心?

2 个答案:

答案 0 :(得分:2)

将锚点保持在屏幕中央,并使用此

生成怪物
randomEdgePosition = CGPoint(x: 0 - size.width / 2, y: randomFloat(min: 0.0, max: 1.0) * size.height)

答案 1 :(得分:0)

在边缘上随机化的问题是,你会看到更多的敌人在角落产生而不是在边缘的中心,因为角落有更多的边缘。要在整个场景中均匀分布,您需要基于圆圈进行定位,并使用最长边缘/ 2 +敌人的最长边缘/ 2(我假设您想要在屏幕上生成)作为半径

let theta = CGFloat(randomFloat(min: 0.0, max: 1.0) * Float.pi * 2)
let radius = max(size.width, size.height)/2 + max(enemy.size.width, enemy.size.height)/2 
let randomPosition = CGPoint(x: cos(theta) * radius, y: sin(theta) * radius)

这也将解决你对anchorPoint的问题,并允许你将它保持在屏幕的中心(0.5,0.5),这样可以更容易地检测敌人来自哪个方式而无需进行额外的减法。 (E.G. -x的敌人留在玩家手中,无需检查x< player.x0