Как остановить таймер в игровом приложении для Android, когда значение флага count увеличивается до 4

#android

#Android

Вопрос:

Я пишу простое игровое приложение с использованием Android, в котором ящик должен собирать шары, которые запускаются в него с правой стороны экрана. Сбор оранжевых и розовых шаров принесет некоторые очки, в то время как сбор черных шаров сократит жизнь игрока.

В настоящее время, как только на поле появляется черный шар, таймер останавливается, и игра окончена.

ЧТО я ХОЧУ, ЧТОБЫ ОН ДЕЛАЛ:

Я хочу, чтобы после того, как поле встретит 4-й черный шар, таймер должен остановиться, и игра должна быть закончена.

ЧТО я ПРОБОВАЛ:

Я объявил переменную

 private int countFlagBlack = 0; 
  

затем я увеличивал значение countFlagBlack каждый раз, когда в поле попадались черные шары.
countFlagBlack увеличивается до 3, после чего он попадает в блок if, где таймер останавливается.

  if(0 <= blackCenterX amp;amp; blackCenterX <= boxSize amp;amp; boxY <= blackCenterY amp;amp; blackCenterY <= boxY   boxSize)
        {


         //PLEASE CHECK THIS BLOCK OF 
         //CODE.HERE WE NEED TO CHANGE
         //THE CODE

           countFlagBlack  ;

           if(countFlagBlack>3)          
           {

                timer.cancel();
                timer=null;

           }

        }
  

Но это не работает, и программа перестает показывать ошибку, как только окно встречает черный шар.

КОД БЕЗ ОШИБОК

 package com.example.catcheggs1;

import android.graphics.Point; import android.os.Handler; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.Display; import android.view.MotionEvent; import android.view.View; import android.view.WindowManager; import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast;

import java.util.Timer; import java.util.TimerTask;

public class MainActivity extends AppCompatActivity {

    private TextView scoreLabel;
    private TextView startLabel;
    private ImageView box;
    private ImageView orange;
    private ImageView black;
    private ImageView pink;

    //Size
    private int frameHeight;
    private int boxSize;

    private int screenWidth;
    private int screenHeight;




    //Position
    private int boxY;
    private int orangeX;
    private int orangeY;
    private int pinkX;
    private int pinkY;
    private int blackX;
    private int blackY;

    private int countFlagBlack=0;

    //Score
    private int score=0;

    //Initialize Class
    private Handler handler = new Handler();
    private Timer timer = new Timer();

    //Status Check
    private boolean action_flg = false;
    private boolean start_flg = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        scoreLabel=(TextView)findViewById(R.id.scoreLabel);
        startLabel=(TextView)findViewById(R.id.startLabel);
        box=(ImageView)findViewById(R.id.box);
        orange=(ImageView)findViewById(R.id.orange);
        pink=(ImageView)findViewById(R.id.pink);
        black=(ImageView)findViewById(R.id.black);

        //Get Screen Size
        WindowManager wm = getWindowManager();
        Display disp = wm.getDefaultDisplay();
        Point size = new Point();
        disp.getSize(size);

        screenWidth=size.x;
        screenHeight=size.y;


        //Move To Out of Screen
        orange.setX(-80);
        orange.setY(-80);
        pink.setX(-80);
        pink.setY(-80);
        black.setX(-80);
        black.setY(-80);

        scoreLabel.setText("Score : 0");

    }

    public void changePos()
    {

        hitCheck();

        //Orange
        orangeX -= 12;
        if(orangeX<0)
        {
            orangeX = screenWidth  20;
            orangeY = (int)Math.floor(Math.random()*(frameHeight-orange.getHeight()));
        }
        orange.setX(orangeX);
        orange.setY(orangeY);

        //Black
        blackX -= 20;
        if(blackX<0)
        {
            blackX=screenWidth 10;
            blackY = (int)Math.floor(Math.random()*(frameHeight-black.getHeight()));
        }
        black.setX(blackX);
        black.setY(blackY);

        //Pink
        pinkX -= 35;
        if(pinkX<0)
        {
            pinkX = screenWidth 20;
            pinkY = (int)Math.floor(Math.random()*(frameHeight-pink.getHeight()));
        }
        pink.setX(pinkX);
        pink.setY(pinkY);


        //Move Box

        if(action_flg == true)
        {
            //Touching
            boxY -= 8;
        }
        else
            {
              boxY  = 3;
            }

        if(boxY<0)boxY =0;

        if(boxY > frameHeight-boxSize)boxY=frameHeight-boxSize;

        box.setY(boxY);

        scoreLabel.setText("Score: " score);

    }

    public void  hitCheck()
    {
        //If the center of the ball is in the box, it counts as a hit.

        //Orange
        int orangeCenterX = orangeX   orange.getWidth()/2;
        int orangeCenterY = orangeY   orange.getHeight()/2;

        //0 <= orangeCenterX <= boxWidth
        //boxY <= orangeCenterY <= boxY   boxHeight

        if(0 <= orangeCenterX amp;amp; orangeCenterX <= boxSize amp;amp; boxY <= orangeCenterY amp;amp; orangeCenterY <= boxY   boxSize)
        {
           score  = 10;
           orangeX = -20;
        }

        //Pink
        int pinkCenterX = pinkX   pink.getWidth()/2;
        int pinkCenterY = pinkY   pink.getHeight()/2;

        if(0 <= pinkCenterX amp;amp; pinkCenterX <= boxSize amp;amp; boxY <= pinkCenterY amp;amp; pinkCenterY <= boxY   boxSize)
        {
            score  = 30;
            pinkX = -20;
        }

        //Black

        int blackCenterX = blackX   black.getWidth()/2;
        int blackCenterY = blackY   black.getHeight()/2;

        if(0 <= blackCenterX amp;amp; blackCenterX <= boxSize amp;amp; boxY <= blackCenterY amp;amp; blackCenterY <= boxY   boxSize)
        {








         //PLEASE CHECK THIS BLOCK OF 
         //CODE.HERE WE NEED TO CHANGE
         //THE CODE










                timer.cancel();
                timer=null;



        }

    }

    public boolean onTouchEvent(MotionEvent me)
    {

        if(start_flg==false)
        {
            start_flg=true;

            FrameLayout frame = (FrameLayout)findViewById(R.id.frame);
            frameHeight = frame.getHeight();

            boxY = (int)box.getY();

            boxSize = box.getHeight();

            startLabel.setVisibility(View.GONE);

            //Call changePos() every 20 milli seconds
            timer.schedule(new TimerTask() {
                @Override
                public void run() {
                    handler.post(new Runnable() {
                        @Override
                        public void run() {
                            changePos();
                        }
                    });
                }
            },0,100);

        }
        else
        {
            if(me.getAction()==MotionEvent.ACTION_DOWN)
            {
                action_flg=true;
            }else if(me.getAction() == MotionEvent.ACTION_UP)
            {
                action_flg = false ;
            }
        }




       return true;
    } }
  

XML-ФАЙЛ

 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"

    tools:context=".MainActivity">


    <TextView
        android:id="@ id/scoreLabel"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:text=" : 300"
        android:paddingLeft="10dp"
        android:gravity="center_vertical"  />

    <FrameLayout
        android:id="@ id/frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <TextView
            android:id="@ id/startLabel"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="30sp"
            android:layout_gravity="center_horizontal"
            android:layout_marginTop="130dp"/>

        <ImageView

            android:id="@ id/box"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:src="@drawable/box"
            android:layout_gravity="center_vertical" />

        <ImageView
            android:id="@ id/orange"
            android:layout_width="20dp"
            android:layout_height="20dp"
            android:src="@drawable/orange" />

        <ImageView
            android:id="@ id/black"
            android:layout_width="24dp"
            android:layout_height="24dp"
            android:src="@drawable/black" />

        <ImageView
            android:id="@ id/pink"
            android:layout_width="16dp"
            android:layout_height="16dp"
            android:src="@drawable/pink" />



    </FrameLayout>

</RelativeLayout>
  

введите описание изображения здесь