问:Android - 每次点击屏幕时如何提高分数

时间:2015-11-13 12:51:31

标签: java android

出于某种原因,每当我增加"得分"在第一类(在OnTouch方法中),当我调用drawText方法时,它在我的第二课中不会更新。但是当我触摸屏幕时,得分增加,但在第二类stil显示中调用zc.getScore()方法100。

ZmijicaSV zmija;
private int score=100;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    zmija=new ZmijicaSV(this);
    zmija.setOnTouchListener(this);
    setContentView(zmija);

}

@Override
protected void onPause() {
    super.onPause();
    zmija.pause();
}

@Override
protected void onResume() {
    super.onResume();
    zmija.resume();
}


@Override
public boolean onTouch(View v, MotionEvent event) {

    boolean up=zmija.sp.isUp();
    boolean right=zmija.sp.isRight();
    boolean down=zmija.sp.isDown();
    boolean left=zmija.sp.isLeft();


    switch(event.getAction()) {
        case MotionEvent.ACTION_DOWN:

            if(up) {
                zmija.sp.setUp(false);
                zmija.sp.setRight(true);
                update();
                break;
            }

            if(right) {
                zmija.sp.setRight(false);
                zmija.sp.setDown(true);
                update();
                break;
            }

            if(down) {
                zmija.sp.setDown(false);
                zmija.sp.setLeft(true);
                update();
                break;
            }
            if(left) {
                zmija.sp.setLeft(false);
                zmija.sp.setUp(true);
                update();
            break;
        }


    }
        return true;
    }

public void update()
{
    score++;
}
public int getScore()
{
    return score;
}

Thread t=null;
Pravougaonik pr;
SurfaceHolder holder;
boolean isRunning=false;
SnakeParts sp;
ZmijicaCrtanje zc;
public ZmijicaSV(Context context) {
    super(context);
    holder=getHolder();
    pr=new Pravougaonik(context);
    sp=new SnakeParts();
    zc=new ZmijicaCrtanje();
}

public void run()
{
    Paint p=new Paint();
    p.setColor(Color.BLUE);
    p.setStyle(Paint.Style.FILL);
     while(isRunning)
     {

         if(!holder.getSurface().isValid()) {
             continue;
         }
         Canvas c=holder.lockCanvas();
         c.drawColor(Color.BLACK);
         sp.Draw(c);
         pr.onDraw(c);
         sp.update();
         drawText(c);
         holder.unlockCanvasAndPost(c);

         try {

            t.sleep(50);

         } catch (InterruptedException e) {
             e.printStackTrace();
         }
     }
}

public void resume()
{
    isRunning=true;
    t=new Thread(this);
    t.start();
}

public void pause()
{
    isRunning=false;
    while(true)
    {
        try {
            t.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        break;
    }
    t=null;

}

public void drawText(Canvas canvas)
{
    Paint paint=new Paint();
    paint.setColor(Color.YELLOW);
    paint.setTextSize(200);
    canvas.drawText("Score:"+zc.getScore(),100,getHeight()-200,paint);

}

1 个答案:

答案 0 :(得分:1)

我无法确定,因为你没有包含第一堂课的名字,但是我很确定问题是你正在创建第一堂课的新实例(probabaly ZmijicaCrtanje())二等。在ZmijicaCrtanje的第一个实例中注册的点击将不会改变ZmijicaCrtanje的这个实例。

修复此错误的两种可能方法是:

  1. 将分数设为静态变量。
  2. 将ZmijicaCrtanje的实例传递给第二个类ZmijicaSV的构造函数,并将其设置为等于全局变量zc。
  3. 祝你好运!