如果声明阻止角色掉落地面

时间:2014-08-28 21:19:56

标签: ios objective-c sprite

我正在制作一个平台,并希望阻止角色(一个球)穿过地面。

我可以编写类似于if (Ball.center.y == 463) Ball.center.y = 463;的if语句吗?

463是游戏中地面的y位置。

2 个答案:

答案 0 :(得分:3)

虽然这种方法当然是可行的,但通常您希望抽象出细节(例如地面的463 y位置),以便您的代码更加健壮。例如,如果您更改了地面的y位置,则必须在使用它的任何地方更改463值!

但从根本上说,是的,你会使用if语句,就像你提供的那样。需要注意的一点是,如果地面位于463,你的球将在地面的一半(因为你正在看球的中心的y位置。

另外,你想要一个不那么绝对的支票......如果球的位置以某种方式低于地面怎么办?说462?现在的行为应该是什么?

如果没有深入了解程序的物理和设计,您至少希望将语句更改为:

int ball_lower_bound = Ball.center.y - Ball.height/2;
int ground_bound = 463;
if (ball_lower_bound < ground_bound) { 
  ball_lower_bound = ground_bound;
}

答案 1 :(得分:0)

由于你使用的是sprite kit,你应该使用物理体来处理它 这很快: 你班级的变量:

let balCategory:UInt32 = 1 << 0
let groundCategory:UInt32 = 1 << 1

然后当你定义你的球精灵时:

ball.physicsBody.categoryBitMask = ballCategory
ball.physicsBody.collisionBitMask = groundCategory
ball.physicsBody.contactTestBitMask = groundCategory

然后当你定义你的地面精灵(希望你有一个你的地面的图像,如果不是一个非常薄的透明或在屏幕边缘下面的东西):

ground.physicsBody.categoryBitMask = groundCategory
ground.physicsBody.collisionBitMask = ballCategory
ground.physicsBody.contactTestBitMask = ballCategory

如果您正在使用它,希望您可以将其翻译为目标C.