swift正确的语法,如果有,则在等

swift正确的语法,如果有,则在等,swift,syntax,sprite-kit,Swift,Syntax,Sprite Kit,我有一个SKSpritenode,可以在屏幕上拖动,在一个边界内。 我有一个在边界内的测试 if backgroundRect.contains(paddleRect){ let paddleX = paddle.position.x + (touchLocation.x - previousLocation.x) let paddleY = paddle.position.y + (touchLocation.y - previousLocation.y) paddle

我有一个SKSpritenode,可以在屏幕上拖动,在一个边界内。 我有一个在边界内的测试

if backgroundRect.contains(paddleRect){
    let paddleX = paddle.position.x + (touchLocation.x - previousLocation.x)
    let paddleY = paddle.position.y + (touchLocation.y - previousLocation.y)
    paddle.position = CGPoint(x: paddleX, y: paddleY)
} else {
    print ("paddleRect not contained by backgroundRect")
}
现在我可以在背景中拖动拨片了。当我拖动桨,它碰到背景的边缘时,它就不再包含在背景中并停止,所以我不能再移动它了

我想能够移动它只是在背景矩形,但不停止响应拖动在边缘。我知道“if else”不是正确的方法,但我想知道我是如何写的,这样桨就可以在背景矩形的范围内不断移动


这是一个“while continue”循环吗?或者别的什么?

问题是,一旦退出矩形,您就失去了更改挡板位置的能力。因此,每次后续检查
backgroundRect.contains(pallerect)
都将永远返回
false

您应该做的是始终计算潜在位置,然后使用它,或者丢弃它:

let potentialPosition = CGPoint(
    x: paddle.position.x + (touchLocation.x - previousLocation.x),
    y: paddle.position.y + (touchLocation.y - previousLocation.y)
)

// This line is approximated, I don't know the exact relation between
// `paddleRect` and `paddle`, but you get the idea
if backgroundRect.contains(potentialPosition) {
    paddle.position = potentialPosition
} else {
    print ("paddleRect not contained by backgroundRect")
}

问题是,一旦退出矩形,就无法更改挡板的位置。因此,每次后续检查
backgroundRect.contains(pallerect)
都将永远返回
false

您应该做的是始终计算潜在位置,然后使用它,或者丢弃它:

let potentialPosition = CGPoint(
    x: paddle.position.x + (touchLocation.x - previousLocation.x),
    y: paddle.position.y + (touchLocation.y - previousLocation.y)
)

// This line is approximated, I don't know the exact relation between
// `paddleRect` and `paddle`, but you get the idea
if backgroundRect.contains(potentialPosition) {
    paddle.position = potentialPosition
} else {
    print ("paddleRect not contained by backgroundRect")
}

也许你的意思是
intersects
而不是
contains
?这部分代码正在进行测试,所以我需要做的就是这样。例如,拨片被限制在背景内部。即使它是intersects,我也有同样的问题,它只是处理测试返回false时发生的事情的代码,我需要更改。。。在if-else语句停止时,但我仍然需要能够将挡板拖回远离边缘的矩形中。也许你的意思是
相交
,而不是
包含
?这部分代码正在进行测试,所以我需要这样做。即挡板被限制在背景内。即使它是相交的,我也有同样的问题,它只是处理当测试返回false时会发生什么的代码,我需要更改。。。现在,如果有一个if-else语句,它就停止了,但我仍然需要能够将拨片拖回到远离边缘的矩形中。@pjs欢迎您编辑答案,特别是对于这样的小错误。OP将收到通知,并且可以保留/拒绝您的更改。我自己解决了这个问题,谢谢你指出解决方案有效。我将potentialPosition更改为potentialRect以提高准确性,因此它检测到的是边缘而不是中心点。@pjs欢迎您编辑答案,尤其是像这样的小错误。OP将收到通知,并且可以保留/拒绝您的更改。我自己解决了这个问题,谢谢你指出解决方案有效。我将potentialPosition更改为potentialRect以获得更高的精度,因此它检测到的是边缘而不是中心点。