CMMotionManager, SKNode beim Start nach "oben" zeigen lassen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • CMMotionManager, SKNode beim Start nach "oben" zeigen lassen

    Hallo Zusammen,

    Ich arbeite gerade mit dem CMMotionManager und nutze ihn, um meine SKNodes rotieren zu lassen.

    Ich möchte es nun so gestalten, dass einige SKNodes beim Start "nach oben" zeigen. Nach oben im Sinne vom zum Lautsprecher/Kameralinse des iPhone ist gar kein Problem. Ich möchte jedoch das "nach oben" im Sinne von "weg vom Nutzer". Das heißt natürlich, dass die Position bei jedem Start der App leicht anders sein kann, je nachdem wie das Gerät gehalten wird.
    Mein erste Idee war self.manager.deviceMotion.attitude.yaw; der Wert scheint jedoch seinen FixPunkt in Richtung Lautsprecher zu haben und dann die Veränderung der Lage im Raum anzuzeigen.

    Hat jemand eine Idee wie ich "nach oben" ermitteln kann?

    Danke.
  • Hi, hier hast du ein kleines Beispiel ^^

    Quellcode

    1. [self.motionManager startAccelerometerUpdatesToQueue:[NSOperationQueue currentQueue]
    2. withHandler:^(CMAccelerometerData *accelerometerData, NSError *error) {
    3. [self outputAccelertionData:accelerometerData.acceleration];
    4. if(error){
    5. NSLog(@"%@", error);
    6. }
    7. }];
    8. -(void)outputAccelertionData:(CMAcceleration)acceleration
    9. {
    10. currentMaxAccelX = acceleration.x;
    11. currentMaxAccelY = acceleration.y;
    12. }
    Alles anzeigen
  • Accelerometer war schon mal ein heißer Tipp. Leider bekomme ich die Berechnung partout nicht hin. Ich habe das mal versucht mit einer Grafik darzustellen.

    [Blockierte Grafik: http://www.ioscampus.de/wp-content/uploads/2014/02/forumPost.jpg]

    Die graue Form ist das iPhone. Die schwarzen Angaben sind die Werte des Accelerometers, wenn diese entsprechende Seite nach oben zeigt. Die grünen Werte sind die zRotation Werte die meine SKSpriteNode annehmen müsste, um ebenfalls nach oben zu zeigen.

    Ich suche also eine Formel, welche die schwarzen Werte als Input hat und die grünen ausspuckt :)
    Im Landscape funktioniert das hier:
    arrow.zRotation = self.manager.accelerometerData.acceleration.x*2;
    Die y Berechnung bekomme ich nicht hin. Hat jemand einen Tipp für mich wie ich das angehen kann?

    PS: kann man hier im Forum Bilder hoch laden?
  • Das Accelerometer liefert Dir keine Winkel sonder jeweils Werte aus dem Intervall [-1, 1] pro Achse. Die Werte für x und y kannst Du über die Funktion atan2(3) in einen Winkel im Bogenmaß umrechnen, mit dem Du Deinen Knoten drehst. Da Du absolute Werte bekommst, musst Du natürlich über rotateToAngle:duration: zum Drehen verwenden.
    „Meine Komplikation hatte eine Komplikation.“