好吧,所以我想在这里做一些简单的事情,我想我已经过于复杂了 - 我需要一个if声明说如果这个物体离开屏幕(进入负y坐标),就会发生一些事情。我无法得到它。
我尝试了很多东西,包括if语句与这样的数字相比较,让它相等然后尝试更大/更小:
if block1.position.y == -50 {
savior.hidden = true
}
我试过让对象小于self.size.height
:
if block1.position.y < self.size.height {
savior.hidden = true
}
我已经尝试在屏幕上的某个位置放置一个对象并使用if语句比较2个对象的y位置:
if block1.position.y == ptBlock1.position.y {
savior.hidden = true
}
没有任何工作。 Block1,我正在使用的对象,被发送到SKAction中的特定点,所以我知道它已经到了:
var moveDownLeft = SKAction.moveTo(CGPointMake(self.size.width * 0.35,-50), duration:5.5)
block1.runAction(moveDownLeft)
为什么if语句不起作用?
编辑:
我试过这个,即使block1的y位置明显低于ptBlock1,也没有任何反应:
if block1.position.y < ptBlock1.position.y {
savior.hidden = true
}
else if block1.position.y > ptBlock1.position.y {
savior.hidden = false
}
答案 0 :(得分:1)
此对象离开屏幕(进入负y坐标)
你在那里做出错误的假设。关闭屏幕不一定是负y坐标。
不测量SKNode相对于屏幕的位置;它是根据其超级视图来衡量的,即SKScene。并且SKScene 大于屏幕!如果您想知道相对于屏幕发生了什么,您需要将这些坐标转换为屏幕坐标。
(举个例子,如果您从模板中创建一个新的SpriteKit项目并登录touchesBegan
以显示点按位置,您会发现左上角的点击大约是{{ 1}}。因此,在该坐标系中,如果一个对象的{303,758}
大于大于760,则该对象将从屏幕上移到顶部。与屏幕坐标对比,您离开屏幕的位置如果 less 小于0,则返回顶部。这些是非常不同的坐标系!)