我正在为SpriteKit中的iPhone制作一个简单的游戏,并试图从屏幕顶部产生球。然而,球从侧面继续产卵,我不知道如何使它们从顶部出现....任何人都知道如何改变它? (见代码)。这也是随机产卵的好方法吗?或者我应该生成它们并让它们按重力规则落下?
//ENEMIES
func random() -> CGFloat {
return CGFloat(Float(arc4random()) / 0xFFFFFFFF)
}
func random(min: CGFloat, max: CGFloat) -> CGFloat {
return random() * (max - min) + min
}
// 1
func spawnEnemy() {
// 2
let enemy = SKSpriteNode(imageNamed: "ball")
// 3
enemy.name = "enemy"
// 4
enemy.position = CGPoint(x: frame.size.width + enemy.size.width/2,
y: frame.size.height * random(min: 0, max: 1))
// 5
addChild(enemy)
enemy.run(
SKAction.moveBy(x: -size.width - enemy.size.width, y: 0.0,
duration: TimeInterval(random(min: 1, max: 2))))
}
答案 0 :(得分:3)
请记住,位置(0,0)位于屏幕的左下角,x值越来越大,从左到右穿过屏幕,y值逐渐从屏幕上下移动。
您的生成点始终是
(x: frame.size.width + enemy.size.width/2, y: frame.size.height * random(min: 0, max: 1)
位于屏幕的右侧,具有随机y
值(即随机高度)。您的x
值必须是随机的,并且您的y
值必须为:
(x: frame.size.width * random(min: 0, max: 1), y: frame.size.height + enemy.size.height/2)
然后,正如梦想家所说,你的运动SKAction需要将敌人从当前的y值移动到0,同时保持其x值不变(假设你想让它直接沿着屏幕移动。
关于产卵和重力的问题 - 你想让你的物体以恒定的速度向下移动(这是你纠正的SKAction会做的)或看起来好像它们在重力作用下坠落,在这种情况下它们是&# 39; d出现,然后慢慢开始但不断加速。
编辑:正如KnightOfDragons所说 - (0,0)坐标的实际位置由一个称为anchorPoint
的属性(它本身就是一个CGPoint,但它并没有关联)来控制到一个实际的坐标)。它曾经一直是(0,0),这意味着左下角,但现在它可能是(0.5,0.5),这意味着屏幕的中心,即放置在(0,0)的精灵将是在屏幕中间。增加x或y将分别向右或向上移动精灵,减小x或y将向左或向下移动精灵。
这意味着如果你的场景的anchorPoint为(0.5,0.5),那么屏幕的边缘将具有以下坐标:
anchorPont是(0,0)还是(0.5,0.5)可能取决于你的场景来自.sks文件还是代码。
答案 1 :(得分:1)
而不是
enemy.run(
SKAction.moveBy(x: -size.width - enemy.size.width, y: 0.0,
duration: TimeInterval(random(min: 1, max: 2))))
你需要通过-Y移动。 X是左右,Y是上下。所以它会......
enemy.run(
SKAction.moveBy(x: 0.0 , y: -size.height - enemy.size.height,
duration: TimeInterval(random(min: 1, max: 2))))