我想为我的游戏节省内存,我想问你,因为我找不到任何东西,上次我在这里问了些什么,我得到了一个很好的答案。我可以在eclipse中翻转位图,这样我可以节省精灵的内存吗?我发现的所有教程都是关于旋转而不是翻转。翻转位图的教程仅适用于开放式Gl或类似的东西。请帮我。 我一直在寻找谷歌的教程,但我在第5页放弃了。任何人都可以帮助我吗? 有没有人有一个很好的教程? 顺便说一句,我正在使用画布。 谢谢!
每当我尝试运行它时,我都会收到一个力量......你可以搞清楚吗?这是我的代码:
Matrix flipHorizontalMatrix = new Matrix();
flipHorizontalMatrix.setScale(-1,1);
flipHorizontalMatrix.postTranslate(0, canvas.getHeight()-arrowL.getHeight());
canvas.drawBitmap(arrowL, flipHorizontalMatrix, null);
我希望箭头位于右下角。
答案 0 :(得分:19)
由于您使用的是Canvas
,为什么不尝试使用drawBitmap (Bitmap bitmap, Matrix matrix, Paint paint)
方法。使用翻转x坐标的Matrix
。
您可以这样做:
Matrix flipHorizontalMatrix = new Matrix();
flipHorizontalMatrix.setScale(-1,1);
flipHorizontalMatrix.postTranslate(myBitmap.getWidth(),0);
canvas.drawBitmap(myBitmap, flipHorizontalMatrix, myPaint);
答案 1 :(得分:0)
谢谢,请查看此代码,它可能对您旋转位图图像很有用。 这里我有一个水族馆鱼的例子,它应该从左向右移动并翻转并继续从右向左移动而反之亦然。 这是给你的代码..
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扩展了SurfaceView实现的Runnable {
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);
}
}