Bonjour à tous,
Je me représente Stéphane 45 ans, forcément fan des années 80 et multi collectionneurs (retrogaming consoles, magazines, etc...)
Je programme régulièrement pour le boulot, mais plutôt VBA. J'ai fait par le passé aussi du DELPHI. Aujourd'hui, je découvre donc Android Studio et les méandres de JAVA... J'avoue pas évident à appréhender simplement, malgré mes multiples lectures.
Voilà donc c'est déjà pour situer mon niveau. Un bleu comme on disait à l'armée
Pour le fun, je me suis amusé à reprogrammer un Game & Watch sur Android pour mon téléphone. Je vous joins une image pour vous situer mon application
Pour le moment, le jeu est plutôt abouti, le code n'est certainement pas propre mais ça tourne et tous les boutons fonctionnent.
Le principe: de multiples Timers qui gèrent l'heure, l'avancement des oeufs, les animations à l'écran, etc...
Maintenant je me dis le jeu, c'est bien, mais c'était plutôt pour la performance pour un novice en JAVA... Ma finalité serait de le proposer gratuitement sur le Playstore, mais je voudrais encore le peaufiner.
Notamment, pour lui donner un côté utile en lui ajoutant son mode Alarme pour le réveil matin, et aussi car j'ai de gros décalages de sprites quand je change de taille d'écran...
Pour l'alarme, j'ai réussi avec un Timer qui tourne en tache de fond toutes les 60 secondes, à comparer l'heure actuelle, et l'heure programmé de l'alarme. Si il y a équivalence je déclencher un autre Timer avec une animation et des sons. Cela marche oui, MAIS que si le téléphone est en mode veille depuis peu. Du style 4 ou 5 minutes. Si je programme mon alarme pour le lendemain matin, ça ne sonne pas. Je suppose donc que le téléphone passe en mode "veille profonde" et il doit désactiver certains processus... Dites moi si je me trompe ?
Voici ci dessous le Timer que je déclenche s'il y a équivalence des heures. Encore une fois ça fonctionne mais que si le téléphone est en pause depuis un temps court
Code :
- public void Timer_AlarmTimer() {
- _AlarmTimer = new Timer();
- _AlarmTimer.scheduleAtFixedRate(new TimerTask() {
- @Override
- public void run() {
- runOnUiThread(new Runnable() //run on ui threa
- {
- public void run() {
- int i,j;
- iMode=2;
- bAlarmTimer=true;
- //bTimerAlarm=true;
- Minnie.setVisibility(View.VISIBLE);
- if (iLoopAlarm < 60) {
- if (iLoopAlarm % 2 == 0) { // Si iLoopChance est pair
- managerOfSound(sChance);
- mainminniehaut.setVisibility(View.VISIBLE);
- im_clocheAlarm.setVisibility(View.VISIBLE);
- mainminniebas.setVisibility(View.INVISIBLE);
- } else {
- mainminniehaut.setVisibility(View.INVISIBLE);
- im_clocheAlarm.setVisibility(View.INVISIBLE);
- mainminniebas.setVisibility(View.VISIBLE);
- }
- }
- else {
- mainminniehaut.setVisibility(View.INVISIBLE);
- im_clocheAlarm.setVisibility(View.INVISIBLE);
- mainminniebas.setVisibility(View.INVISIBLE);
- _AlarmTimer.cancel();
- }
- iLoopAlarm++;
- }
- });
- }
- }, 100, 500);
- }
|
Bref, donc malgré mes multiples lectures sur le sujet, je sèche un peu. J'aimerait donc des conseils pour :
- Gérer ce mode pause du téléphone et pouvoir réactiver mon Timer plusieurs heures après une mise en mode pause
- Si possible dans l'idéal pouvoir directement réafficher mon jeu et son animation à l'écran, sans que l'utilisateur n'ai à faire son code de déverrouillage du téléphone
- Si possible avoir quelques chose de léger pour éviter de surcharger le processeur du téléphone
- Faut il obligatoirement que le jeu soit en tâche de fond ? (je pense par exemple à un processus qui me lancerait mon appli au moment de l'alarme)
Ensuite mon autre problème, c'est que mon application fonctionne sur un téléphone de taille 5.2 pouces. Dès que je change de taille, j'ai tous mes sprites qui se décalent. Donc très problématique.
- Avez vous des conseils de positionnement des sprites, faut-il les lier entre eux ? dans ce cas, comment reconnaitre la taille de l'écran, pour par exemple appliquer un multiplicateur.
Moi actuellement j'ai fait des groupes de sprites ex personnages, oeufs droits, etc..., et chaque sprite est positionné par rapport au layout qui le contient (définit au pif en relative layout, mais je ne sais vraiment pas)
Voilà donc, cela fait peut-être beaucoup de choses, mais si vous avez des idées et des conseils pour m'aider, je suis preneur et grand merci à vous
Stéphane MC