我正在制作一个平台,并希望阻止角色(一个球)穿过地面。
我可以编写类似于if (Ball.center.y == 463) Ball.center.y = 463;
的if语句吗?
463
是游戏中地面的y
位置。
答案 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.