Swift:在if语句不工作时比较2个对象的位置?

时间:2015-01-11 01:07:03

标签: swift

好吧,所以我想在这里做一些简单的事情,我想我已经过于复杂了 - 我需要一个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
}

1 个答案:

答案 0 :(得分:1)

  

此对象离开屏幕(进入负y坐标)

你在那里做出错误的假设。关闭屏幕不一定是负y坐标。

不测量SKNode相对于屏幕的位置;它是根据其超级视图来衡量的,即SKScene。并且SKScene 大于屏幕!如果您想知道相对于屏幕发生了什么,您需要将这些坐标转换为屏幕坐标。

(举个例子,如果您从模板中创建一个新的SpriteKit项目并登录touchesBegan以显示点按位置,您会发现左上角的点击大约是{{ 1}}。因此,在该坐标系中,如果一个对象的{303,758} 大于大于760,则该对象将从屏幕上移到顶部。与屏幕坐标对比,您离开屏幕的位置如果 less 小于0,则返回顶部。这些是非常不同的坐标系!)