如何在swift中防止对象离开屏幕



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

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?把它变成一个物理实体,但我的飞船从来没有接触过它。

我所要做的就是在.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为我指明了正确的方向。

最新更新