急求小鱼在水里自由游动算法,如多彩水族箱里面的鱼 自由游动

解决方案 »

  1.   

    package pan.move;import android.content.Context;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.graphics.Canvas;
    import android.graphics.drawable.BitmapDrawable;
    import android.os.Handler;
    import android.view.View;public class MovingPictureView extends View implements Runnable{
     int left=0,top=0;
     int dx=1,dy=1;
        Handler handler;
        Bitmap bitmap;
        Bitmap bitmap2;
        Boolean isRuning=true;
    public MovingPictureView(Context context) {
    super(context);
         bitmap=((BitmapDrawable)getResources().getDrawable(R.drawable.icon)).getBitmap();
          bitmap2=new BitmapFactory().decodeResource(getResources(), R.drawable.icon);
         
    handler=new Handler();
        new Thread(this).start();
    }
    protected void onDraw(Canvas canvas){
    canvas.drawBitmap(bitmap, left, top, null);
    canvas.drawBitmap(bitmap2,left,top,null);
    } @Override
    public void run() {
    // TODO Auto-generated method stub
    while(isRuning){
    dx=left<0||(left+bitmap.getWidth())>getWidth()?-dx:dx;
    dy=top<0||(top+bitmap.getHeight())>getHeight()?-dy:dy;

    left+=dx;
    top+=dy;

    handler.post(new Runnable() {

    @Override
    public void run() {
    // TODO Auto-generated method stub
    invalidate();
    }
    });
    try{
    Thread.sleep(10);
    }catch(InterruptedException e){
    e.printStackTrace();
    }
    }}}
      

  2.   

    package pan.move;import android.content.Context;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.graphics.Canvas;
    import android.graphics.drawable.BitmapDrawable;
    import android.os.Handler;
    import android.view.View;public class MovingPictureView extends View implements Runnable{
    int left=0,top=0;
    int dx=1,dy=1;
      Handler handler;
      Bitmap bitmap;
      Bitmap bitmap2;
      Boolean isRuning=true;
    public MovingPictureView(Context context) {
    super(context);
    bitmap=((BitmapDrawable)getResources().getDrawable(R.drawable.icon)).getBitmap();
      bitmap2=new BitmapFactory().decodeResource(getResources(), R.drawable.icon);
        
    handler=new Handler();
    new Thread(this).start();
    }
    protected void onDraw(Canvas canvas){
    canvas.drawBitmap(bitmap, left, top, null);
    canvas.drawBitmap(bitmap2,left,top,null);
    }@Override
    public void run() {
    // TODO Auto-generated method stub
    while(isRuning){
    dx=left<0||(left+bitmap.getWidth())>getWidth()?-dx:dx;
    dy=top<0||(top+bitmap.getHeight())>getHeight()?-dy:dy;left+=dx;
    top+=dy;handler.post(new Runnable() {@Override
    public void run() {
    // TODO Auto-generated method stub
    invalidate();
    }
    });
    try{
    Thread.sleep(10);
    }catch(InterruptedException e){
    e.printStackTrace();
    }
    }}}
      

  3.   

    太可惜了,我不小心把我以前写的那个自由移动的代码搞丢了。我的思路是,每次都为小鱼定一个移动的目标坐标。一旦到达目标坐标就重新随机一个新的目标坐标。随机出新的目标坐标后,将新目标与当前位置进行比较。如果发现x坐标或者y坐标比当前位置大,则执行“x或Y+=n”这样的操作,反之则执行“x或y-=n”这样的操作。这样做的好处是,小鱼高度自由,活动范围十分随机。因为不是所有的鱼都是到了鱼池边再转弯的。