2014-10-27 4 views
0

Привет :) Я рисую шесть круг изображения в представлении поверхности., Как это ..андроид подсветка массив растровых изображений один за другим

public class GameBoard extends SurfaceView implements Surface.Callback { 

CircleObject circles[]; 

public GameBoard(Context c){ 
    super(c); 
    circles = new CircleObject[6]; 

    for(int i = 0; i < circle.length; i++){ 
     circles[i] = new CircleObject(someX, someY, someWidth, someHeight); 
    } 
} 

public void surfaceCreated(SurfaceHolder){ 
    // i start the GameLoop here . . 
    gameLoop.start(); 
} 

public void onDraw(Canvas c){ 
    super.onDraw(c); 
    gameDraw(c); 
} 

public void gameDraw(Canvas c){ 
    // draw six circles from left to right 
    for(int i = 0; i < 6; i++){ 
     circles[i].draw(c); 
    } 
} 

public boolean onTouch(TouchEvent event){ 
    for(int i = 0; i < circles.length; i++){ 
     if(circles[i].onTouch(event)){ 
      circles[i].highlight(); 

      return true; 
     } 
    } 

    return false; 
} 

мой круг объект ..

public class CircleObject{ 
    public CircleObject(int x, int y, int w, int h, Bitmap bmp){ 
     // initialize local variables here from constructors params . . 
     // set width and height of bmp here 
    } 

    public void setBitmap(Bitmap b){ 
     myBmp = b; 
    } 

    public boolean onTouch(TOuchEvent event){ 
     // check if event.x and event.y is within 
     // this circle then return true..., 
     // false if not. 
    } 

    public void draw(Canvas c){ 
     if(isHighlight){ 
      highlightDuration--; 
      if(highlightDuration == 0){ 
       // set bit map to originalbitmap 
       setBitmap(originalBitmap); 
       isHighlight = false; 
       highlightDuration = 10; 
      } 
     } 

     c.drawBitmap(myBmp, my_X, my_Y, null); 
    } 

    public void highlight(){ 
     // store my myBmp so i can set it back from being highlighted 
     originalBmp = myBmp; 

     ishighlight = true; 

     // highlight bitmap 
     setBitmap(highlightBitmap); 
    } 
} 

мой Gameloop .. (работает 10 кадров в секунду)

public class GameLoop extends Thread{ 
    long tickPS = 1000/10; 
    public void run(){ 
     while(running){ 
      Canvas c = null; 

      c = surfaceHolder.lockCanvas(); 

      synchronized(surfaceHolder){ 
       gameBoard.onDraw(c); 
      } 

      surfaceHolder.unlockCanvasAndPost(c); 

      sleepTime = tickPS - (System.currentTimeMillis() - startTime); 

      try { 
       if (sleepTime > 0) { 
        Thread.sleep(sleepTime); 
      } else { 
       Thread.sleep(10); 
      }   
     } 
    } 
} 

на экране будет шесть кругов, и когда я коснусь одного из них, кружок выделит короткий период времени и вернется к исходному Bmp (который не подсвечен). пока что работает :).

Теперь я пытаюсь добиться того, что когда я коснулся первого круга, я хочу выделить все из них один за другим. Я имею в виду, что после того, как первый круг был выделен, второй будет выделенный третий, четвертый и т. д .. как анимация анимации, пока что мой план состоит в том, чтобы создать отдельный поток для каждого круга. Я не пробовал это, потому что я думаю, что «бой мой gameLoop обрабатывает рисунок за рамку для меня .., hmhmhm. , ,

любые предложения ребята ..? извините за длинный пост ...

ответ

0

Зачем нужны несколько потоков? Вы могли бы просто выделить highlight для каждого круга и переменную для отслеживания lastCircleHightlighted. Предположим, вы касаетесь 4-го круга, lastCircleHighlighted = 3, продолжайте уменьшать highlightDuration3. Когда продолжительность равна 0, восстановите ее и установите lastCircleHighlighted на следующую (= 4) и так далее. Если в любой момент времени может быть выделен только один круг, вам даже не нужно создавать несколько highlightDuration.

+1

, что «lastCircleHighlighted» мне очень помог :) спасибо –

Смежные вопросы