我在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 :(得分:0)
所以我认为矩阵解决方案应该完美地工作,canvas对象包含它自己的内置矩阵,如果你操纵它会影响该点之后所有图形的输出。所以你只需设置matrxi然后进行绘制。
你的解决方案没问题,但是你做错了 - 而是做这个部分ONCE: 像开头一样创建面向左侧的精灵,然后存储它。然后每个框架:使用您创建的反转位图的“缓存”副本。
第三个解决方案(我还没试过但可能会工作)是操纵目标矩形以便交换左边和右边 - 画布文档说,“绘制指定的位图,自动缩放/平移以填充目标矩形。“ - 我怀疑这可能包括负缩放以适应右边缘小于左边的空间,尽管文档没有明确说明。