突然想使用下重力加速器,但是發現C++版的那些AccelerometerDispatcher,CCAccelerometer 等東西在XNA版本都沒有實現。而且,在層裏面的Init事件中想要註冊使用加速器的this.isAccelerometerEnabled = true;編譯的直接報錯。貌似意思是找不到。看了下CCLayer的封裝,的確有這個isAccelerometerEnabled 的成員。但是爲什麼報錯就不清楚了。
糾結了好一會,突然想起來這個引擎也就是在XNA基礎上做的。那麼直接用XNA的方法吧。
經過嘗試,成功!
1,要添加Microsoft.Devices.Sensors的引用。
2,在層的init事件中啓用加速器。
Accelerometer gSensor = new Accelerometer();
gSensor.CurrentValueChanged += new EventHandler<SensorReadingEventArgs<AccelerometerReading>>(gSensor_CurrentValueChanged);
gSensor.Start();
注:以前都是用的是ReadingChanged方法來監聽重力座標的改變。但是現在這個方法不推薦了。現在的替代方法是CurrentValueChanged。
3,實現監聽方法。
void gSensor_CurrentValueChanged(object sender, SensorReadingEventArgs<AccelerometerReading> e)
{
Vector3 vector3 = e.SensorReading.Acceleration;
//由vector3可以取到x,y,z值。
}
這樣,就能用加速器了。。。記住,不用設置層的isAccelerometerEnabled 這個成員屬性。這個成員屬性直接忽視吧