- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在使用 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,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)
然后,正如 Dreamer 所说,您的移动 SKAction 需要将敌人从其当前 y 值移动到 0,同时保持其 x 值不变(假设您希望它沿屏幕直线向下移动。
关于你关于产卵和重力的问题——你想让你的物体以恒定的速度向下移动(这是你修正后的 SKAction 会做的)还是看起来好像它们在重力作用下下落,在这种情况下它们' d 出现,然后开始缓慢移动但不断加速。
编辑:正如 KnightOfDragons 所说 - (0, 0) 坐标的实际位置由称为 anchorPoint
的属性控制(它本身是一个 CGPoint,但这不是与实际坐标有关)。它以前总是 (0, 0),这意味着左下角,但现在它可能是 (0.5, 0.5),这意味着屏幕的中心,即放置在 (0,0) 的 Sprite 将是在屏幕中间。增加 x 或 y 将分别向右或向上移动 Sprite ,减少 x 或 y 将分别向左或向下移动 Sprite 。
这意味着如果您的场景的 anchor 为 (0.5, 0.5),则屏幕边缘的坐标为:
anchorPont 是 (0, 0) 还是 (0.5, 0.5) 可能取决于您的场景是来自 .sks 文件还是通过代码。
关于swift - 我如何在 SpriteKit 中从顶部编码现在从侧面出现的产卵球?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40737672/
我们有一个非常适合多个 BackgroundWorker 的业务案例。 例如,我们有一个带有“保存”按钮的表单。通常我们会同步运行所有保存命令(例如保存),然后关闭表单。我们现在想使用 backgro
我目前正在研究一本有关安全性的书(我没有发布这本书的名称,因为我不确定站点规则,但如果没有问题的话我可以这样做)并且我遇到了一个代码示例,其目的是是生成一个 root shell。 int main(
当我尝试运行时 node app.js ,我得到错误: the message is Failed to launch the browser process! spawn/Users/iliebog
我做了一个非常简单的程序,调用 forking 并调用另一个问题。虽然它做了我想做的事,但出现了一个错误,并且 cout 出现的次数是 for 循环的两倍。这是代码: main.cpp `#inclu
我在树莓派上运行 nodejs,我想运行一个子进程来生成网络摄像头流。 在 Node 外我的命令是: raspivid -n -mm matrix -w 320 -h 240 -fps 18 -g 1
我只是有一个更大的 bash 脚本,但我遇到了一个问题,要使用 ssh 连接到另一台计算机。那个是第一次访问(总是,真的 ;)),因此询问 无法确定主机 '[192.168.120.170]:9022
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我是一名优秀的程序员,十分优秀!