Search code examples
swiftaccelerometerskphysicsbody

How to code the accelerometer to have a fixed x position


I have a ship that moves based on the direction of gravity which is changed by the accelerometer, but I want it to only move along the width of the screen (I already know how to do that), but I do not know how to keep it on a fixed horizontal line. Here's my code

class GameScene: SKScene {

var manager = CMMotionManager()
var ship = SKSpriteNode()



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


    let shipTexture = SKTexture(imageNamed: "EvadersShipVert2.png")

    ship = SKSpriteNode(texture: shipTexture)

    ship.position = CGPoint(x: CGRectGetMidX(self.frame), y: CGRectGetMidY(self.frame) - 250)

    ship.size = CGSize(width: 90, height: 115)

    shipTexture.filteringMode = SKTextureFilteringMode.Nearest

    ship.zPosition = 2

    ship.physicsBody = SKPhysicsBody(texture: shipTexture, size: CGSize(width: 90, height: 115))

    ship.physicsBody?.dynamic = true

    self.addChild(ship)


    manager.startAccelerometerUpdates()
    manager.accelerometerUpdateInterval = 0.1
    manager.startAccelerometerUpdatesToQueue(NSOperationQueue.mainQueue()) {

        (data, error) in

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


    }






}

thanks in advance!


Solution

  • Replace

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

    With

    self.physicsWorld.gravity = CGVectorMake(0.0, CGFloat((data?.acceleration.y)!)
    

    So you're not affecting the x position