2011-10-14 39 views
6

Tôi muốn tiết kiệm bộ nhớ cho trò chơi của mình và tôi muốn hỏi bạn vì tôi không thể tìm thấy bất cứ điều gì và lần cuối cùng tôi hỏi một điều gì đó ở đây tôi nhận được câu trả lời hay. Tôi có thể lật bitmap bên trong nhật thực để tôi có thể lưu vào bộ nhớ cho sprites không? Tất cả các hướng dẫn mà tôi tìm thấy là xoay và không lật. Các hướng dẫn để lật một bitmap chỉ dành cho Gl mở hoặc một cái gì đó như thế. Làm ơn giúp tôi. Tôi đã tìm kiếm các hướng dẫn trong google nhưng tôi đã từ bỏ ở trang 5. Có ai giúp tôi không? Có ai có hướng dẫn hay không? Bằng cách tôi đang sử dụng canvas. Cảm ơn!Lật một bitmap trong trợ giúp Android?

Tôi nhận được một lực lượng đóng mỗi khi tôi cố gắng chạy nó ... u có thể tìm ra nó? đây là mã của tôi:

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

Tôi muốn mũi tên ở góc dưới cùng bên phải.

+0

Bạn có ý nghĩa gì khi "lật"? –

+0

cho phép nói rằng tôi có một hình ảnh động của một sprite đi bên trái, tôi muốn làm cho nó đi bên phải với cùng một sprite, chỉ cần lật nó sang một cách khác. hy vọng tôi đã xóa nó .. – Baruch

+0

Đăng dấu vết ngăn xếp từ sự cố. –

Trả lời

19

Vì bạn đang sử dụng Canvas, tại sao không thử phương thức drawBitmap (Bitmap bitmap, Matrix matrix, Paint paint). Sử dụng số Matrix để lật các tọa độ x.

Bạn có thể làm một cái gì đó như thế này:

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

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

Bạn cần sử dụng flipHorizontalMatrix.postTranslate (..) thay vì setTranslate, vì bạn thực sự cần phải concat ma trận tỷ lệ hiện tại với ma trận dịch, nhưng không phải để tạo ma trận dịch. – asenovm

+0

im gonna try it thanks – Baruch

+0

Tôi có một chút bối rối, tôi chỉ nên sử dụng posttranslate thay vì settranslate hoặc cả hai? – Baruch

0

Cảm ơn, hãy kiểm tra mã này nó có thể hữu ích để bạn có thể xoay một hình ảnh Bitmap .. Ở đây tôi có một lấy một ví dụ cá cảnh, nó nên được di chuyển từ trái sang phải và lộn và tiếp tục di chuyển từ phải sang trái và ngược lại .. đây là mã cho bạn ..

  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 kéo dài SurfaceView thực hiện 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); 



     } 
    } 
Các vấn đề liên quan