Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Android游戏中翻转精灵图像_Java_Android - Fatal编程技术网

Java 在Android游戏中翻转精灵图像

Java 在Android游戏中翻转精灵图像,java,android,Java,Android,我正在用Android制作一个游戏,需要一个从右到左运行的精灵列表,所以我尝试使用下面的代码翻转图像 它使游戏速度大大降低,向右快速跑动,但向左跑动太慢 public void Draw(Canvas spriteBatch, int X, int Y, int imageIndex,int flip) { int drawY = (imageIndex / columns); int drawX = imageIndex - drawY * colum

我正在用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);

或者有其他更快的方法吗?

因此我认为矩阵解决方案应该可以完美地工作画布对象包括它自己的内置矩阵,如果您操作该矩阵,将影响该点之后所有图形的输出。所以你只需设置matrxi,然后进行绘图

您认为解决方案是好的,但您做错了-宁可只做一次这部分: 像开始时那样创建面向左病房的精灵,然后将其存储。然后每帧:使用您创建的反转位图的“缓存”副本

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