在Android游戏

时间:2015-05-24 09:23:04

标签: java 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);

或者还有另一种更快的方法吗?

1 个答案:

答案 0 :(得分:0)

所以我认为矩阵解决方案应该完美地工作,canvas对象包含它自己的内置矩阵,如果你操纵它会影响该点之后所有图形的输出。所以你只需设置matrxi然后进行绘制。

你的解决方案没问题,但是你做错了 - 而是做这个部分ONCE: 像开头一样创建面向左侧的精灵,然后存储它。然后每个框架:使用您创建的反转位图的“缓存”副本。

第三个解决方案(我还没试过但可能会工作)是操纵目标矩形以便交换左边和右边 - 画布文档说,“绘制指定的位图,自动缩放/平移以填充目标矩形。“ - 我怀疑这可能包括负缩放以适应右边缘小于左边的空间,尽管文档没有明确说明。