Partage
  • Partager sur Facebook
  • Partager sur Twitter

Aide mini-jeu Android

Débutant

    31 mars 2013 à 23:09:53

    Bonjour,

    Actuellement en terminale S, je travaille sur un mini jeu Android du type Line Runner disponible sur le play store. Cependant je rencontre quelques difficultés notamment pour la partie graphique où je ne sais pas comment modéliser de petits blocs défilant de droite à gauche de mon écran lorsque je suis en mode paysage. J'imagines qu'il faut jouer sur les coordonnées des blocs mais je n'arrive pas à voir comment puis-je faire.

    Si quelqu'un voulait bien m'aider ça me permettrait d'avancer dans mon projet.

    Merci d'avance.

    -
    Edité par matrix124 1 avril 2013 à 16:37:59

    • Partager sur Facebook
    • Partager sur Twitter
      1 avril 2013 à 16:55:10

      Salut,

      Utilises-tu des canvas? Si oui tu utilises un canvas.translate et tu pourras avoir une espèce de caméra qui suivra ton personnage principal ;) Tu appliques çà sur les objets que tu veux et hop ca fonctionne.

      H-E
      • Partager sur Facebook
      • Partager sur Twitter
        1 avril 2013 à 18:01:54

        Merci beaucoup pour cette réponse je vais faire ça. :)
        Edit:Je suis vraiment trop nul je sais même pas comment appliquer cette méthode, si tu veux bien m'aider encore un peu
        Voilà ce que j'ai pour l'instant, en gros pas grand chose
        package principal.jeu;
        
        import android.content.Context;
        import android.graphics.Canvas;
        import android.view.SurfaceHolder;
        import android.view.SurfaceView;
        import android.graphics.Color;
        import android.graphics.Paint;
        
         
        public class ExampleSurfaceView extends SurfaceView implements SurfaceHolder.Callback {
        
        	// Le holder
            SurfaceHolder mSurfaceHolder;
            // Le thread dans lequel le dessin se fera
            DrawingThread mThread;
            
            Paint mPaint;
         
            public ExampleSurfaceView (Context context) {
                super(context);
                mSurfaceHolder = getHolder();
                mSurfaceHolder.addCallback(this);
                 
                mThread = new DrawingThread();
                mPaint = new Paint();
                mPaint.setStyle(Paint.Style.FILL);
            }
            
            private int pX=800;
         
            @Override
            protected void onDraw(Canvas pCanvas) {
                // Dessinez ici !
            	 pCanvas.drawColor(Color.WHITE);
            	
            	 mPaint.setColor(Color.BLACK);
            	 pCanvas.drawRect(0,255,800,280,mPaint);
            	 pCanvas.drawRect((pX-25) , 230 , pX, 255, mPaint);
            	 mPaint.setColor(Color.RED);
            	 pCanvas.drawRect(120,230,145,255, mPaint);
            	 
            	 
            }
         
            @Override
            public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
                // Que faire quand le surface change ? (L'utilisateur tourne son téléphone par exemple)
            }
         
            @Override
            public void surfaceCreated(SurfaceHolder holder) {
                mThread.keepDrawing = true;
                mThread.start();
            }
         
            @Override
            public void surfaceDestroyed(SurfaceHolder holder) {
                mThread.keepDrawing = false;
                 
                boolean joined = false;
                while (!joined) {
                    try {
                        mThread.join();
                        joined = true;
                    } catch (InterruptedException e) {}
                }
            }
         
            private class DrawingThread extends Thread {
            // Utilisé pour arrêter le dessin quand il le faut
                boolean keepDrawing = true;
         
                @Override
                public void run() {
                     
                    while (keepDrawing) {
                        Canvas canvas = null;
         
                        try {
                    // On récupère le canvas pour dessiner dessus
                            canvas = mSurfaceHolder.lockCanvas();
                    // On s'assure qu'aucun autre thread n'accède au holder
                            synchronized (mSurfaceHolder) {
                    // Et on dessine
                                onDraw(canvas);
                            }
                        } finally {
                    // Notre dessin fini, on relâche le Canvas pour que le dessin s'affiche
                            if (canvas != null)
                                mSurfaceHolder.unlockCanvasAndPost(canvas);
                        }
         
                        // Pour dessiner à 50 fps
                        try {
                            Thread.sleep(20);
                        } catch (InterruptedException e) {}
                    }
                }
            }
        }

        -
        Edité par matrix124 1 avril 2013 à 18:31:59

        • Partager sur Facebook
        • Partager sur Twitter
          1 avril 2013 à 20:20:04

          Dans le onDraw d'abord fais un canvas.save ()

          Ensuite tu fais le canvas.translate (x,y) c'est avec ce x et y que tu définis de combien tes blocks vont défiler vers l'arrière (pour ton cas cela doit-être -getPosX de ton personnage principal).

          Tu fais ton canvas.draw();

          Ensuite tu fais un canvas.restore() et ca devrait le faire ;)

          • Partager sur Facebook
          • Partager sur Twitter
            1 avril 2013 à 21:32:27

            Ouah pas facile quand on débute mais merci encore pour ton aide.
            • Partager sur Facebook
            • Partager sur Twitter
              4 avril 2013 à 12:33:53

              Si tu as des questions n'hésite pas à me MP ;)
              • Partager sur Facebook
              • Partager sur Twitter

              Aide mini-jeu Android

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown