嗨:)我在表面视图中绘制了六个圆形图像。就像这样..
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;
}
}“
我的Circle对象..
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 fps)
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 :(得分:0)
为什么需要多线程?您可以为每个圆圈设置highlightDuration,为跟踪lastCircleHightlighted设置变量。假设您触摸第4个圆圈,lastCircleHighlighted = 3,继续减少highlightDuration3。当持续时间为0时,恢复它并将lastCircleHighlighted设置为下一个(= 4),依此类推。如果在任何给定时间只能突出显示一个圆圈,则甚至不需要创建多个highlightDuration。