如何在Swift中创建边缘?

时间:2015-11-16 02:14:57

标签: ios swift skphysicsbody

我正在尝试创建一个覆盖整个框架的边框的单一视图游戏。我的节点必须保持在屏幕上并在到达任何边界后反弹。我使用了几个实例,但我认为问题必须来自iOS模拟器设置。我无法知道它是什么。

到目前为止我尝试的代码是:

self.physicsBody = SKPhysicsBody (edgeLoopFromRect: self.frame)

一旦到达屏幕的底部或顶部,它就会阻止我的节点离开屏幕。然而,一旦它到达左壁或右壁,它仍然会逃脱。我能够解决这个问题的唯一方法是为Est墙创建单独的不可见矩形,例如:

estWall.position = CGPointMake(725, CGRectGetMidY(self.frame))
estWall.physicsBody = SKPhysicsBody(rectangleOfSize: CGSizeMake(1, CGRectGetMaxY(self.frame)))
estWall.physicsBody?.dynamic = false
self.addChild(estWall)

我的节点响应,但是一旦我将设备更改为不同屏幕尺寸的iPhone,显然矩形就会这样移动。我需要做些什么来解决这个问题?我不想使用725作为estWall.position的x值,因为它会在不同的设备上有所不同。

2 个答案:

答案 0 :(得分:0)

我不确定整个屏幕的物理体是什么问题,但是在将矩形放在每个设备边缘的情况下非常简单。使用此:

estWall.position = CGPointMake(self.size.width + estWall.size.width/2, CGRectGetMidY(self.frame))

这会把它放在边缘之外。对于另一个,只需为x位置0-estWall.size.width/2。希望这会有所帮助。

答案 1 :(得分:0)

我在调整精灵方面遇到了同样的问题。尝试前往您的GameViewController.swift文件,并在下面输入“scene.scaleMode = .AspectFill”。

scene.size = self.view.frame.size

您可能还必须删除您的GameScene.sks文件,但我不确定因为我总是删除我的。但是,希望你不要这样做。