2011-10-14 17 views
6

Quiero guardar la memoria de mi juego y quería preguntarte porque no pude encontrar nada y la última vez que pregunté algo aquí obtuve una buena respuesta. ¿Puedo voltear el mapa de bits dentro del eclipse para poder ahorrar memoria para los sprites? Todos los tutoriales que encontré fueron sobre la rotación y no voltear. Los tutoriales para voltear un mapa de bits eran solo para abrir Gl o algo así. Por favor, ayúdame. He estado buscando tutoriales en Google pero me di por vencido en la página 5. ¿Alguien puede ayudarme? ¿Alguien tiene un buen tutorial? Por cierto, estoy usando un lienzo. Gracias!¿Voltear un mapa de bits en la ayuda de Android?

Me cierro cada vez que intento ejecutarlo ... ¿lo puede averiguar? Aquí está mi código:

 Matrix flipHorizontalMatrix = new Matrix(); 
     flipHorizontalMatrix.setScale(-1,1); 
     flipHorizontalMatrix.postTranslate(0, canvas.getHeight()-arrowL.getHeight()); 
     canvas.drawBitmap(arrowL, flipHorizontalMatrix, null); 

Quiero que la flecha esté en la esquina inferior derecha.

+0

¿Qué quiere decir con "flip"? –

+0

digamos que tengo una animación de un sprite yendo a la izquierda, quiero hacer que vaya a la derecha con el mismo sprite, solo voltearlo hacia el otro lado. Espero que lo haya borrado .. – Baruch

+0

Coloque el seguimiento de la pila del bloqueo. –

Respuesta

19

Dado que está utilizando Canvas, ¿por qué no prueba el método drawBitmap (Bitmap bitmap, Matrix matrix, Paint paint)? Use un Matrix que voltea las coordenadas x.

Usted puede hacer algo como esto:

Matrix flipHorizontalMatrix = new Matrix(); 
flipHorizontalMatrix.setScale(-1,1); 
flipHorizontalMatrix.postTranslate(myBitmap.getWidth(),0); 

canvas.drawBitmap(myBitmap, flipHorizontalMatrix, myPaint); 
+0

Necesita utilizar flipHorizontalMatrix.postTranslate (..) en lugar de setTranslate, porque realmente necesita concaturar la matriz de escala actual con una matriz de traducción, pero no para crear una matriz de traducción solamente. – asenovm

+0

Voy a intentarlo gracias – Baruch

+0

Me confundí un poco, ¿debería usar solamente posttranslate en lugar de settranslate o ambos? – Baruch

0

Gracias, echa un vistazo a este código puede ser útil para hacer girar una imagen de mapa de bits .. Aquí he dado un ejemplo de un pez de acuario, lo que debería puede mover de izquierda a derecha y se volcó y continuar moviéndose de derecha a izquierda y viceversa .. aquí está el código para usted ..

  protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
      WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    fish = BitmapFactory.decodeResource(getResources(), R.drawable.fish); 
      v = new OurView(this); 

OurView clase pública se extiende SurfaceView implementa Ejecutable {

Thread t = null; 
    SurfaceHolder holder; 
    boolean isitOK = false; 
    String Flag = "right"; 
    Bitmap rotatedBitmap=null; 
    Matrix rotateRight = new Matrix(); 
    Matrix rotateLeft = new Matrix(); 
    Bitmap rSprite=null; 
    Bitmap lSprite=null; 
    public OurView(Context context) { 
     super(context); 
     holder = getHolder(); 
     rotateLeft.setScale(-1, 1); 


     rSprite = Bitmap.createBitmap(fish, 0, 0, 
       fish.getWidth(), fish.getHeight(), rotateRight, true); 
     lSprite = Bitmap.createBitmap(fish, 0, 0, 
       fish.getWidth(), fish.getHeight(), rotateLeft, true); 
    } 

    @Override 
    public void run() { 
     // TODO Auto-generated method stub 

     while (isitOK == true) { 
      if (!holder.getSurface().isValid()) { 
       continue; 
      } 
      Canvas canvas = holder.lockCanvas(); 

      canvas.drawBitmap(bg, 0, 0, null); 
      if(Flag == "right") 
      canvas.drawBitmap(lSprite, x, y, null); 

      if(Flag == "left") 
      canvas.drawBitmap(fish, x, y, null);  

       if (Flag == "right" && x <= 60) { 

        x++; 
        if (x == 60) { 

         Flag = "left"; 
        // canvas.drawBitmap(rSprite, 0, fish.getWidth(), null); 
         canvas.drawBitmap(fish, x, y, null);  
        } 
       }    
       if (Flag == "left" && x >= 0) { 
        x--; 
        if (x == 0) { 
        Flag = "right"; 

        canvas.drawBitmap(fish, x, y, null); 
        } 
       } 




      holder.unlockCanvasAndPost(canvas); 



     } 
    } 
Cuestiones relacionadas