проблема в понимании метода Sprite onDraw () - PullRequest
0 голосов
/ 19 августа 2011
 public class Sprite 
 {
   private static final int BMP_COLUMNS = 3;
   private static final int BMP_ROWS = 4;
   private int x= 0;
   private int y= 50;
   private int xSpeed= 5;
   private GameView gameView;
   private Bitmap bmp;
   private int width;
   private int height;
   private int currentFrame = 0;

 public Sprite(GameView gameView,Bitmap bmp)
  {
    this.gameView=gameView;
    this.bmp=bmp;
    this.width = bmp.getWidth()/BMP_COLUMNS;
    this.height = bmp.getHeight()/BMP_ROWS;
   }
 private void update()
 {
     if(x > gameView.getWidth() - width - xSpeed)
     {
         xSpeed = -5;
     }
     if(x + xSpeed<0)
     {
         xSpeed=5;
     }
     x = x + xSpeed;
     currentFrame = ++currentFrame % BMP_COLUMNS; <--how it works..?
    }

 public void onDraw(Canvas canvas)
      {
     update();
     int srcX = currentFrame*width; <---how it works..?
     int srcY = 2*height;   <-----how it works..?
     Rect src = new Rect(srcX,srcY,srcX+width,srcY+height);  <--how it works..?
     Rect dst = new Rect(x,y,x+width,y+height);  <----how it works..?
     canvas.drawBitmap(bmp,src,dst,null);        
     }
 }

1 Ответ

1 голос
/ 19 августа 2011

Исходное растровое изображение представляет собой композицию из 3 * 4 спрайтовых изображений.Этот спрайт использует 3 различных изображения в растровом изображении, и код будет циклически проходить через них (изображения 0, 1 и 2).

currentFrame = ++currentFrame % BMP_COLUMNS; <--how it works..?

currentFrame будет циклически проходить через значения 1..BMP_COLUMNS-1, то есть 0, 1, 2, 0, 1, 2, ...

int srcX = currentFrame*width; <---how it works..?
int srcY = 2*height;   <-----how it works..?

Находит положение изображения для использования.Для этого конкретного спрайта есть 3 изображения (которые, вероятно, почти идентичны, возможно, это мигающий свет или что-то в этом роде).

Rect src = new Rect(srcX,srcY,srcX+width,srcY+height);  <--how it works..?

Вычисляет позицию в исходном растровом изображении.

Rect dst = new Rect(x,y,x+width,y+height);  <----how it works..?

Рассчитывает позицию на дисплее.

...