Bonsoir,
Je suis nouvelle sur le forum, je travaille sur un jeu android, et mon temps de réalisation pour le jeu est
très court (cadre scolaire) :
Mon problème est le suivant :
La dimension prise par le menu de mon jeu différe suivant que je sois sur une activité ou une SurfaceView
(ou View), j'ai pourtant utiliser la méthode onMeasure mais sans succés la hauteur de ma fenêtre varie.
Lorsque je tente de donner des positions posX et posY à mes Bitmap en ecrivant par exemple :
posX = getWidth() / 7;
posY = getHeight() / 2;
Cela affiche mes bitmaps à des endroits qui ne correspondent pas vraiment sur mon écran.
J'ai pourtant essayé d'avoir la taille de l'écran avant d'avoir celle de la vue avec l'objet DisplayMetrics mais
sans succés.
J'utilise l'interface onGestureListener pour détecter les positions de mes doights avec les rectangles formés par
mes bitmaps (j'ai créé une classe Perso contenant un bitmap et son RectF associé)
Et ce qui souligne bien mon problème est que les e.getX() et e.getY() (de ma méthode onDown) ne concordent
absolument pas avec les posX et posY de mes bitmaps sur mon canvas.
Est ce que quelqu'un d'expérimenter en Android particulièrement dans les jeux pourrait m'apporter son aide s'il vous plaît ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 @Override public void onDraw(Canvas canvas) { if (!setDeco) { resm = ResourcesMenu.getInstance(getContext()); background = Bitmap.createScaledBitmap(resm.getBackground(), getWidth(), getHeight(), false); toto = new Perso(getWidth() / 7, getHeight / 2); toto.setPerso(resm.getPersoToto()); // prend une largeur et une hauteur toto.setRectF(resm.getPersoToto().getWidth(), resm.getPersoToto().getHeight()); // rect = new RectF(posX, posY, largeur, hauteur); setDeco = true; } canvas.drawBitmap(background, 0, 0, null); // canvas.drawBitmap(toto.getPerso(), toto.getPosX(), toto.getPosY(), null); invalidate(); } @Override public boolean onDown(MotionEvent e) { float posX = e.getX(); float posY = e.getY(); Log.v("posX : ", String.valueOf(posX)); Log.v("posY : ", String.valueOf(posY)); if (toto.getRectF().contains(posX, posY)) { Log.v("pos doight toto : ", "OK"); // rien ne s'affiche dans les logs à part quand je mets mon doight un peu à côté controller.setTest(true); } return true; }
Je vous remercie énormément.
Audrey
Partager