我正在尝试开发一款简单的游戏。我的问题是我试图通过触摸侦听器中的“x”事件来旋转屏幕底部的箭头图像。
以下是我的箭类:
public class Arrow extends GameObject{
boolean show = true;
Bitmap bmp;
Game game;
Matrix matrix;
int i = 0;
public Arrow(Handler handler, int x, int y, int xSpeed, int ySpeed , Game game) {
super(handler, x, y, xSpeed, ySpeed);
this.game = game;
bmp = BitmapFactory.decodeResource(game.getResources(), R.drawable.arrow);
matrix = new Matrix();
}
@Override
public void tick() {
}
@Override
public void render(Canvas c) {
matrix.postRotate(x);
c.drawBitmap(bmp,matrix, null);
}
}
这是Event Listener
@覆盖
public boolean onTouch(View v,MotionEvent event){
x = (int) event.getX();
y = (int) event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
arrow.setX(x);
break;
case MotionEvent.ACTION_MOVE :
touch.move();
break;
case MotionEvent.ACTION_UP:
break;
}
}
}
}
return true;
}
如何编写旋转位图的代码?
答案 0 :(得分:1)
这是一个例子。
Matrix matrix = new Matrix();
//Calculate the rotation of the bitmap.
rotation += 10;
matrix.postRotate(rotation); // or matrix.postRotate(rotation,cx,cy);
canvas.drawBitmap(bitmap, matrix, null);
作为优化,在此方法之外创建一次Matrix,并通过调用matrix.reset()替换创建。
这样,画布像以前一样保持定向,你可以用{做更多的东西{3}}像翻译,缩放等,矩阵的内容封装了你操纵的真正含义。
计算角度:
要首先计算角度,您需要知道Seekbar
的总进度长度(进度的最小值 - 进度的最大值)以及搜索后的值的变化。
考虑
Min of seek bar = 0
Max value of seekbar = 30
现在计算每单位的角度,
1 unit = 360/30 = 12.
假设用户已将搜索栏位置从10更改为20.现在计算diff
int diff = 10-20 = -10.
rotation angle = (-10 * 12) = -120;
示例2:
如果用户将搜索栏位置从15更改为10.现在计算差异
int diff = 15-10 = 5.
rotation angle = (5 * 12) = 60;
答案 1 :(得分:1)
以下是我自己的问题的答案,它根据x输入数据旋转图像:
float zeroPoint =MainGame.SCREEN_W / 2;
zeroPoint-=x;
float lala = MainGame.SCREEN_W/(180-y);
matrix.setRotate(zeroPoint/=lala, bmp.getWidth() /2, bmp.getHeight());