2016-09-10 2 views
0

Я знаю, что есть пара других вопросов, касающихся этого, но ни один из них, похоже, не работает, или все они неполны или полны. Мне нужно знать, как сохранить объект на видимом экране! Таким образом, у меня есть спрайт космического корабля, который использует движение наклона и ядра устройства для перемещения по экрану. Если я наклоняю свое устройство, космический корабль в какой-то момент покинет мой экран и продолжит движение в этом направлении. Как сохранить космический корабль в моем экране, чтобы, даже если я наклоняюсь влево или вправо, он никогда не покинет видимый экран? Вот некоторые из моего кода на космический корабль.Как предотвратить быстрый уход объекта из экрана?

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 и превращение его в физическом теле, но мой космический корабль никогда не вступает в контакт с ним.

+0

Вы хотите, чтобы он «отскакивал» от краев экрана или просто не двигался мимо границы экрана? –

+0

Попробуйте заменить 'ship.physicsBody = SKPhysicsBody()' на 'ship.physicsBody = SKPhysicsBody (circleOfRadius: ship.size.width/2)' и добавьте 'edgeLoopFromRect' вокруг вашей сцены. – 0x141E

+0

Я хочу, чтобы он не двигался мимо границы экрана. – user6794148

ответ

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 для намека на меня в правильном направлении.