我这边找个网上的案例改造了一下,结果动画都没了,只能看到静止的几个物体。想来想去不知道到底错在什么地方。悲剧了。请大家帮我看下我到底问题出在什么地方?
package xg.box2d.Test;
import java.util.ArrayList;
import org.jbox2d.collision.AABB;   
import org.jbox2d.collision.CircleDef;   
import org.jbox2d.collision.PolygonDef;   
import org.jbox2d.common.Vec2;   
import org.jbox2d.dynamics.Body;   
import org.jbox2d.dynamics.BodyDef;   
import org.jbox2d.dynamics.World;     
import android.app.Activity;   
import android.content.Context;   
import android.graphics.Canvas;   
import android.graphics.Color;   
import android.graphics.Paint;   
import android.os.Bundle;   
import android.os.Handler;   
import android.util.DisplayMetrics;
import android.view.View;   
import android.view.Window;   
import android.view.WindowManager;     
public class Box2DTestActivity extends Activity {   
       
    private final static int RATE = 10;//屏幕到现实世界的比例 10px:1m;   
    private AABB worldAABB;//创建 一个管理碰撞的世界   
    private World world;   
    private float timeStep = 1/60;//模拟的的频率   
    private int iterations = 10;//迭代越大,模拟约精确,但性能越低   
    private ArrayList<Body> circleArray;
    private ArrayList<Body> boxArray;
    private float friction=0.8f;
    private float restitution=0.3f;
    private MyView myView;   
    private Handler mHandler;   
    private DisplayMetrics dm;
    public void onCreate(Bundle savedInstanceState) {   
        super.onCreate(savedInstanceState);   
        requestWindowFeature(Window.FEATURE_NO_TITLE);   
        getWindow().setFlags(WindowManager.LayoutParams. FLAG_FULLSCREEN ,   
        WindowManager.LayoutParams. FLAG_FULLSCREEN);     
        dm=new DisplayMetrics();
        boxArray=new ArrayList<Body>();
        circleArray=new ArrayList<Body>();
        createWorld();          
        createGroundBox();
        createBody();          
        myView = new MyView(this);   
        setContentView(myView);   
        mHandler = new Handler();   
        mHandler.post(update);   
    }   
       
    private void createWorld() {
     worldAABB = new AABB();               
        //上下界,以屏幕的左上方为 原点,如果创建的刚体到达屏幕的边缘的话,会停止模拟   
         worldAABB.lowerBound.set(-100f,-100f);   
         worldAABB.upperBound.set(100f, 100f);//注意这里使用的是现实世界的单位              
         Vec2 gravity = new Vec2(0.0f,10.0f);   
         boolean doSleep = true;         
         world = new World(worldAABB, gravity, doSleep);//创建世界            
} private void createGroundBox() {
PolygonDef shape = new PolygonDef();   
shape.density = 0;           
        shape.friction = friction;   
        shape.restitution = restitution;   
        shape.setAsBox(160/RATE, 10/RATE);              
        BodyDef bodyDef = new BodyDef();   
        bodyDef.position.set(160/RATE, 470/RATE);   
        Body body1= world.createBody(bodyDef);   
        body1.createShape(shape);   
        body1.setMassFromShapes();   
}
private void createBody() {
        createBox(160, 470, 160, 10, true);        
        createBox(160, 150, 160, 10, true);              
        createCircle(160, 100, 10);   
        createCircle(150, 60, 10);    
} private Runnable update = new Runnable() {   
        public void run() {   
                world.step(timeStep, iterations);//开始模拟   
                myView.update();   
                mHandler.postDelayed(update, (long)timeStep*1000);   
        }   
    };        
    public void createCircle(float x,float y,float radius){   
        CircleDef shape = new CircleDef();   
        shape.density = 7;   
        shape.friction = 0.2f;   
        shape.radius = radius/RATE;              
        BodyDef bodyDef = new BodyDef();   
        bodyDef.position.set(x/RATE, y/RATE);   
        Body body2 = world.createBody(bodyDef);   
        body2.createShape(shape);   
        body2.setMassFromShapes();   
        circleArray.add(body2);
    }         
    public void createBox(float x,float y,float half_width,float half_height,   
                   boolean isStatic){    
        PolygonDef shape = new PolygonDef();   
        if(isStatic){shape.density = 7;}   
        else{shape.density = 2.0f;}   
        shape.friction = 0.3f;   
        shape.setAsBox(half_width/RATE, half_height/RATE);   
           
        BodyDef bodyDef = new BodyDef();   
        bodyDef.position.set(x/RATE, y/RATE);   
        Body body= world.createBody(bodyDef);   
        body.createShape(shape);   
        body.setMassFromShapes();   
        boxArray.add(body);
    }   
       
    class MyView extends View{   
        Canvas canvas;   
        public MyView(Context context) {   
            super(context);   
        }   
  
        public void drawBox(){   
            Paint mPaint = new Paint();   
            mPaint.setAntiAlias(true);   
            mPaint.setColor(Color.RED);   
            for(int i=0;i<boxArray.size();i++){
             Body bd=boxArray.get(i);
             Vec2 vec=bd.getPosition();
             canvas.drawRect(vec.x*RATE-20, vec.y*RATE-20, vec.x*RATE+20, vec.y*RATE+20, mPaint);  
            }             
        }            
 
           
        public void drawCircle(){   
            Paint mPaint = new Paint();   
            mPaint.setAntiAlias(true);   
            mPaint.setColor(Color.GREEN);  
            for(int i=0;i<circleArray.size();i++){
             Body bd=circleArray.get(i);
             Vec2 vec=bd.getPosition();
             canvas.drawCircle(vec.x*RATE, vec.y*RATE,30, mPaint);  
            } 
        }              
        public void update(){   
            postInvalidate();   
        }   
           
        protected void onDraw(Canvas canvas) {   
            super.onDraw(canvas);   
            this.canvas = canvas;   
            drawBox();   
            drawCircle();   
        }                     
    }   
}