如何防止对象快速离开屏幕?

时间:2016-09-10 02:12:12

标签: ios swift sprite-kit screen bounds

我知道还有其他几个问题,但它们似乎都没有用,或者它们都不完整或半完整。我需要知道如何将对象保持在可见屏幕内!所以我有一个宇宙飞船精灵,它使用设备的倾斜和核心动作飞过屏幕。如果我倾斜我的设备,宇宙飞船将在某一点离开我的屏幕并继续向那个方向前进。如何让宇宙飞船留在我的屏幕内,这样即使我向左或向右倾斜也不会离开可见的屏幕?这是我的太空飞船的一些代码。

class GameScene: SKScene, SKPhysicsContactDelegate {

var ship = SKSpriteNode(imageNamed:"Spaceship")
let manager = CMMotionManager()

override func didMoveToView(view: SKView) {
    /* Setup your scene here */

    ship.xScale = 1/5
    ship.yScale = 1/5
    ship.position = CGPoint(x: self.frame.width/(2), y: self.frame.height/1.5)

    self.physicsWorld.contactDelegate = self

    manager.startAccelerometerUpdates()
    manager.accelerometerUpdateInterval = 0.1
    manager.startAccelerometerUpdatesToQueue(NSOperationQueue.mainQueue()){
        (data, error) in

        self.physicsWorld.gravity = CGVectorMake(CGFloat((data?.acceleration.x)! * 15), CGFloat((data?.acceleration.y)! * 15))

    }

    ship.physicsBody = SKPhysicsBody()
    ship.physicsBody?.affectedByGravity = true

    self.addChild(ship)

}

我已经尝试过self.view?.bounds并将它变成一个物理体,但我的宇宙飞船从未接触到它。

1 个答案:

答案 0 :(得分:0)

我所要做的就是干扰.sks文件中屏幕的大小。我特意制作了800x640,因为我正在测试I-Pod 5.然后我添加了这段代码:

let edgeFrame = CGRect(origin: CGPoint(x: ((self.view?.frame.minX)! + 200) ,y: (self.view?.frame.minY)!), size: CGSize(width: (self.view?.frame.width)! + 90, height: (self.view?.frame.height)! + 90))
    self.physicsBody = SKPhysicsBody(edgeLoopFromRect: edgeFrame)

这在我的屏幕周围形成了一个合适的边界,并且不允许我的飞船离开屏幕。最重要的是这是一个完美的配合,所以如果你在不同的设备上测试,那么只需根据需要调整宽度和高度数。请记住还要调整.sks屏幕大小。

致信0x141E,暗示我朝着正确的方向前进。