J'essayais de déplacer le lecteur sur l'axe des x en utilisant l'accéléromètre intégré, mais quelque chose ne va pas. Lorsque je simule l'application sur mon iPhone, le nœud continue de se déplacer dans toutes les directions et seulement après 2-3 fois quand je ferme l'application et la relance, le nœud se déplace de gauche à droite, ce que je voulais. Donc, cela fonctionne, mais seulement après la fermeture et l'ouverture de l'application à nouveau.Comportement d'accéléromètre étrange (CoreMotion)
Une partie du code:
import Foundation
import SpriteKit
import CoreMotion
class Gameplay : SKScene{
private var player : Player?
var motionManager = CMMotionManager()
override func update(_ currentTime: TimeInterval) {
self.player?.move()
}
func initializeGame(){
player = childNode(withName: "player") as? Player!
player?.initPlayer()
}
override func didMove(to view: SKView) {
initializeGame()
motionManager.startAccelerometerUpdates()
motionManager.accelerometerUpdateInterval = 0.1
motionManager.startAccelerometerUpdates(to: OperationQueue.current!) { (data , _) in
if let accelerometerData = data{
print("x: \(accelerometerData.acceleration.x)")
print("y: \(accelerometerData.acceleration.y)")
self.physicsWorld.gravity = CGVector(dx: accelerometerData.acceleration.x*10, dy: 0) //only x axis?
} else {
print("NOPE")
}
}
}
Player.swift:
import Foundation
import SpriteKit
class Player : SKSpriteNode{
func initPlayer(){
name = "Player"
physicsBody?.affectedByGravity = true
physicsBody?.isDynamic = true
}
func move(){ //boundaries
if position.x >= 315{
position.x = 315
} else if position.x <= -315{
position.x = -315
}
}
func shoot(){
//...
}
}