2015-05-24 74 views
1

我在Android上製作了一款遊戲,它需要從右向左運行的精靈列表,因此我嘗試使用下面的代碼翻轉圖像。在Android遊戲中翻轉精靈圖像

它減慢了遊戲速度,它向右移動的速度很快,但向左側減速很多。

  public void Draw(Canvas spriteBatch, int X, int Y, int imageIndex,int flip) 
    { 

    int drawY = (imageIndex/columns); 
    int drawX = imageIndex - drawY * columns; 


    int spriteX = drawX * spriteWidth; 
    int spriteY = drawY * spriteHeight; 

    Rect src = new Rect(spriteX, spriteY,spriteX + spriteWidth, spriteY +  spriteHeight); 
    Rect dst = new Rect(X, Y, X + spriteWidth,Y + spriteHeight); 

    location.X = X; 
    location.Y = Y; 

     if(flip == 1) 
     { 
     //here image is flipped 
      spriteBatch.save();   
      spriteBatch.scale(-scaleX, scaleY, X, Y); 
      spriteBatch.drawBitmap(texture2D,src,dst, paint); 
      spriteBatch.restore(); 

      //Use simple use this to flip image canvas.scale(-1, 1) 
     } 
     else if(flip == 0) 
     { 
     //draws sprite without flipping   
      spriteBatch.save(); 
      spriteBatch.scale(scaleX, scaleY, X, Y); 
      spriteBatch.drawBitmap(texture2D,src,dst, paint); 
      spriteBatch.restore(); 
     } 


    this.SetFrame(imageIndex); 
} 

我可以翻轉使用矩陣,但我不能使用矩陣繪製一個精靈。 有沒有一種方法使用矩陣繪製精靈,它會使它更快?

   matrix.reset(); 
      matrix.setTranslate(location.X, location.Y); 
      matrix.setScale(-scaleX,scaleX); 
      matrix.postTranslate(location.X + texture2D.getWidth(), location.Y); 

或者還有另一種方法更快嗎?

回答

0

所以我認爲矩陣解決方案應該能夠完美地工作,畫布對象包括它自己的內置矩陣,如果你操縱它將影響所有圖形的輸出。所以你只需設置matrxi,然後進行繪製。

你的解決方案沒問題,但你做錯了 - 而不是做這個部分一次: 創建左側病房面臨的精靈,像你在開始時一樣,然後存儲它。然後每個框架:使用您創建的反轉位圖的「緩存」副本。

第三種解決方案(我沒有嘗試但可能工作)是操縱目標矩形,以便交換左右邊緣 - 畫布文檔說,「繪製指定的位圖,自動縮放/翻譯爲填充目標矩形。「 - 我懷疑這可能包括負面縮放以適應右邊比左邊更小的空間,儘管文檔沒有明確地說出。