2011-10-14 15 views
6

Voglio risparmiare memoria per il mio gioco e volevo chiederti perché non ho trovato nulla e l'ultima volta che ho chiesto qualcosa qui ho avuto una buona risposta. Posso capovolgere la bitmap all'interno di eclipse in modo da poter salvare in memoria gli sprite? Tutti i tutorial che ho trovato riguardavano la rotazione e non il ribaltamento. Le esercitazioni per lanciare una bitmap erano solo per Open Gl o qualcosa del genere. Mi aiuti per favore. Ho cercato tutorial per google, ma mi sono arreso a pagina 5. Qualcuno può aiutarmi? Qualcuno ha un buon tutorial? A proposito, sto usando una tela. Grazie!Capovolgere una bitmap nella guida di Android?

Ho una forza chiusa ogni volta che provo a eseguirlo ... riesci a capirlo? ecco il mio codice:

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

Voglio che la freccia sia nell'angolo in basso a destra.

+0

Cosa intendi con "flip"? –

+0

diciamo che ho un'animazione di uno sprite che va a sinistra, voglio farlo andare a destra con lo stesso sprite, basta capovolgerlo nell'altro modo. spero di averlo eliminato .. – Baruch

+0

Pubblica la traccia dello stack dall'arresto anomalo. –

risposta

19

Poiché si utilizza Canvas, perché non provare il metodo drawBitmap (Bitmap bitmap, Matrix matrix, Paint paint). Utilizzare un Matrix che capovolge le coordinate x.

Si può fare qualcosa di simile:

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

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

È necessario utilizzare flipHorizontalMatrix.postTranslate (..) anziché setTranslate, poiché è effettivamente necessario concatenare la matrice della scala corrente con una matrice di traduzione, ma non creare solo una matrice di traduzione. – asenovm

+0

lo proverò grazie – Baruch

+0

Mi sono un po 'confuso, dovrei usare solo posttranslate invece di settranslate o entrambi? – Baruch

0

Grazie, controlla questo codice può essere utile per voi di ruotare un'immagine bitmap .. Qui ho una presa un esempio di pesci d'acquario, dovrebbe essere spostato da sinistra a destra e capovolto e continuare lo spostamento da destra a sinistra e viceversa .. ecco il codice per voi ..

  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); 

public class OurView estende SurfaceView implementa Runnable {

012.
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); 



     } 
    }