在游戏机器人中旋转一个精灵

时间:2012-05-06 07:54:09

标签: android canvas matrix bitmap

我希望工具从位置(x,y)移动一个精灵到位置action_down(x1,y1)。但是我无法旋转它。请帮助我。谢谢

这是我的代码:

public Sprite(GameView gameView, Bitmap bmp) {

      this.gameView = gameView;
      this.bmp = bmp;
      this.width = bmp.getWidth() / BMP_COLUMNS;// create width, height
      this.height = bmp.getHeight() / BMP_ROWS;
      Random rnd = new Random(System.currentTimeMillis());
      x = rnd.nextInt(gameView.getWidth() - bmp.getWidth());
      y = rnd.nextInt(gameView.getHeight() - bmp.getHeight());
}

public void onDraw(Canvas canvas) {

            Matrix matrix = new Matrix();
            matrix.postTranslate(x, y);
            float dx = x1-x;
    float dy = y1-y;
    float d = (float)Math.sqrt(dx*dx+dy*dy);
    vx = (float) (dx*5/d)/3 ;
    vy = (float) (dy*5/d)/3 ;
    if(k==1){
    x += vx ;
    y += vy ;
    }
    currentFrame = ++currentFrame % BMP_COLUMNS;
    int srcX = currentFrame * width;
    int srcY = 0 * height;
    Rect src = new Rect(srcX, srcY, srcX + width, srcY + height);
    Rect dst = new Rect(x, y, x + width, y + height);
    canvas.drawBitmap(bmp, src, dst, null);
}

2 个答案:

答案 0 :(得分:0)

您应该查看matrix.postRotatecanvas.rotate

答案 1 :(得分:0)

你走了: 注意:您需要从Bitmap转换为Image。

import java.awt.*;
import java.awt.geom.AffineTransform;
import java.awt.image.AffineTransformOp;
import java.awt.image.BufferedImage;

/**
 * Created by Chris on 3/28/2014.
 */
public class Sprite {
    private Image i;

    public Sprite(Image image) {
        this.i = image;
    }

    private BufferedImage image = null;
    private Graphics2D graphics = null;

    public void onDraw(Canvas canvas) {
        if(image == null || graphics == null) {
            setup();
        }
        Graphics g = canvas.getGraphics();
        graphics.setColor(Color.WHITE);
        graphics.fillRect(0, 0, image.getWidth(), image.getHeight());
        //Where to draw the Sprite on the canvas.
        int x = 100;
        int y = 100;
        //Because graphics is an instance of Graphics2D
        //Converts the degrees "45" to radians.
        double rotationAngle = Math.toRadians(45);
        double locX = image.getWidth() / 2;
        double locY = image.getHeight() / 2;
        AffineTransform tx = AffineTransform.getRotateInstance(rotationAngle, locX, locY);
        AffineTransformOp op = new AffineTransformOp(tx, AffineTransformOp.TYPE_BILINEAR);

        graphics.drawImage(op.filter(image, null), 0, 0, null);

        g.drawImage(image, x, y, (int) (image.getWidth() / 2), (int) (image.getHeight() / 2), null);
    }

    /**
     * Sets the Image up.
     */
    private void setup() {
        if(image != null) {
            image.flush();
            image = null;
        }
        if(graphics != null) {
            graphics.dispose();
            graphics = null;
        }
        image = new BufferedImage(i.getWidth(null) * 2, i.getHeight(null) * 2, BufferedImage.TYPE_INT_ARGB);
        graphics = image.createGraphics();
    }
}