Comment déterminer l'orientation de Windows Phone 7 dans le jeu XNA?
-
20-09-2019 - |
Question
Tout comme href="https://stackoverflow.com/questions/2473484/how-to-determine-orientation-of-windows-phone-7"> , mais la recherche d'un réponse qui fonctionnera dans le cadre d'un jeu XNA.
Comment puis-je déterminer si le dispositif est dans une orientation portrait ou paysage? La réponse donnée à la question générale repose sur la fonctionnalité intégrée dans PhoneApplicationPage. Autant que je sache, vous ne seriez pas normalement utiliser cette classe dans le cadre d'un jeu XNA sur Windows Phone 7.
La solution
De Nick Gravelyn: http: // forum. xna.com/forums/p/49684/298915.aspx#298915 Accéléromètre est pas dans le cadre XNA plus. Vous pouvez y accéder par ces étapes:
- Ajoutez une référence à Microsoft.Devices.Sensors.dll
- Ajoutez 'en utilisant Microsoft.Devices.Sensors;' à vos déclarations à l'aide.
- Accrocher un événement et commencer à lire l'accéléromètre:
Essayez ceci:
try
{
AccelerometerSensor.Default.ReadingChanged += Default_ReadingChanged;
AccelerometerSensor.Default.Start();
}
catch (AccelerometerStartFailedException)
{
}
- Ajoutez le gestionnaire d'événement lui-même:
Comme ceci:
void Default_ReadingChanged(object sender, AccelerometerReadingAsyncEventArgs e)
{
}
Et vous êtes bon pour aller. Gardez à l'esprit, cependant, que l'accéléromètre ne fonctionne pas avec l'émulateur donc il n'y a aucun moyen de tester vraiment ce sans dispositif. Vous avez besoin que try / catch, car Start lancera une exception dans l'émulateur, car il ne supporte pas l'accéléromètre.
Autres conseils
Cela a changé il semble. Pour accrocher dans la « lecture changé », vous devez créer un accéléromètre, puis démarrez. Le code requis peut être trouvé à MSDN. Récupération Accéléromètre entrée (Windows Phone)
il ressemble à ceci:
#if WINDOWS_PHONE
Accelerometer accelerometer;
try
{
accelerometer = new Accelerometer();
accelerometer.ReadingChanged += new EventHandler<AccelerometerReadingEventArgs>(a_ReadingChanged);
accelerometer.Start();
}
catch (AccelerometerFailedException e)
{
}
...
}
void a_ReadingChanged(object sender, AccelerometerReadingEventArgs e)
{
//this function is not supported by the window 7 phone emulator
throw new NotImplementedException();
}
#endif
Voici un post de blog de Shawn Hargreaves
Si vous souhaitez basculer automatiquement entre les deux orientations portrait et paysage que le téléphone est mis en rotation:
graphics.SupportedOrientations = DisplayOrientation.Portrait |
DisplayOrientation.LandscapeLeft |
DisplayOrientation.LandscapeRight;
Commutation entre LandscapeLeft et LandscapeRight peut être géré automatiquement sans une aide spéciale du jeu, et est donc activé par défaut. Mais la commutation entre portrait et paysage modifie les dimensions de backbuffer (à court et à l'échelle par rapport à grande et mince), ce qui nécessitera probablement vous d'ajuster votre mise en page de l'écran. Tous les jeux seront capables de gérer cela (et certains modèles n'a de sens que dans un sens vers le haut), la commutation si dynamique entre le paysage et le portrait est activé uniquement pour les jeux qui opt-in explicitement la mise SupportedOrientations.