在我看来,不需要的东西出现了

时间:2014-01-31 15:28:21

标签: android canvas android-view

我正在构建一个蛇游戏应用程序 除了它所显示的内容外,它还可以起作用 出于某种原因,它显示了两条蛇:原始的蛇移动并且可以被控制,另一条乞讨的蛇没有做任何事情。

在此之前,我在循环的每个循环中绘制一个背景颜色,因此它将覆盖最后一个画布,并且没有问题。

然后我决定将蛇从背景中分开,所以我让蛇帆布的背景变得透明,并且每次想要绘制一个新画布时都会清除画布(每个循环都会移动蛇)。 / p>

以下是代码:

线程的运行:

public void run() {
    long stepPerSecond=1000/FPS;
    long startTime;
    long sleepTime;
    while(isRunning){
        Canvas c=null;
        startTime=System.currentTimeMillis();

        try{
            c=this.getHolder().lockCanvas();
            synchronized (this.getHolder()) {
                this.onDraw(c);
                }
        }
        catch(Exception e){
        }
        finally{
            if(c!=null){
                this.getHolder().unlockCanvasAndPost(c);
            }

        }
        sleepTime= stepPerSecond-(System.currentTimeMillis()-startTime);
        if(sleepTime>0)
            try {
                Thread.sleep(sleepTime);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    }

}

蛇的撤退(它在抽签中使用蛇的类):

public void onDraw(Canvas canvas) {
    // TODO Auto-generated method stub
    super.onDraw(canvas);
    canvas.drawColor(color.transparent, Mode.CLEAR);
    snake.onDraw(canvas);
}

蛇的班级onDraw:

public void onDraw(Canvas canvas){
    switch(dirTransfare(dir)){
    case 1://RIGHT
        xLoc=xLoc+PART_SIZE;
    break;
    case 2://UP
        yLoc=yLoc-PART_SIZE;
    break;
    case -1://LEFT
        xLoc=xLoc-PART_SIZE;
    break;
    case -2://DOWN
        yLoc=yLoc+PART_SIZE;
    break;
    }//swich
    int x=xLoc;
    int y=yLoc;
        for(Brick bp:SnakeBody){
            bp.setR(0+x, 0+y, PART_SIZE+x, PART_SIZE+y);
            canvas.drawRect(bp.getR(),bp.getP());
            int xtemp=bp.getX();
            int ytemp=bp.getY();
            bp.setX(x);
            bp.setY(y);
            x=xtemp;
            y=ytemp;
        }//for each 
}//onDraw

这是mainActivity,它召唤了snakeVew和backgorundView(蛇是游戏视图,背景是竞技场)

public class MainActivity extends Activity  {
GameView gv;
ImageView left;
ImageView right;
ImageView up;
ImageView down;
Arena a;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    /*requestWindowFeature(Window.FEATURE_NO_TITLE);
    v= new GameView1(this);
    setContentView(v);
    */
    gv= new GameView(this);
    a=new Arena(this);
    setContentView(R.layout.game_view);
    LinearLayout surface = new LinearLayout(this);
    LinearLayout backGround = new LinearLayout(this);
    surface = (LinearLayout)findViewById(R.id.surface);
    backGround = (LinearLayout)findViewById(R.id.background);
    surface.addView(gv);
    backGround.addView(a);

    left=(ImageView) findViewById(R.id.left);
    right=(ImageView) findViewById(R.id.right);
    up=(ImageView) findViewById(R.id.up);
    down=(ImageView) findViewById(R.id.down);

    left.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            if(gv.snake.getDir()!="LEFT"&&gv.snake.getDir()!="RIGHT"){
            gv.snake.Left();
            }
        }
    });
    right.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            if(gv.snake.getDir()!="RIGHT"&&gv.snake.getDir()!="LEFT"){
            gv.snake.Right();   
            }
        }
    });
    up.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            if(gv.snake.getDir()!="UP"&&gv.snake.getDir()!="DOWN"){
            gv.snake.Up();  
            }
        }
    });
    down.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            if(gv.snake.getDir()!="DOWN"&&gv.snake.getDir()!="UP"){
            gv.snake.Down();
            }
        }
    });



}

问题不在后台(竞技场类);我已经把它拿下来并确认了(即使没有使用竞技场类,它也可以使用bug,即使没有使用竞技场类)。

以下是该bug的外观:

http://i.tinyuploads.com/q7oztz.jpg

(你可以看到两条蛇 - 长条是真正的蛇) 蓝色背景来自类竞技场。

有什么想法吗? Tnx寻求帮助:D

0 个答案:

没有答案