В этом игровом коде пианино есть некоторые проблемы. Весь экран становится черным, когда я включаю это действие - PullRequest
0 голосов
/ 24 апреля 2020

Это метод onCreate, который вызывает указанные функции

    int displayScore;
    int posPart11, posPart12, posPart13, posPart21, posPart22, posPart23, posPart31, posPart32, posPart33, posPart41, posPart42, posPart43;
    View part11, part12, part13, part21, part22, part23, part31, part32, part33, part41, part42, part43;
    boolean b,c,d,e;
    int rand = 0, prevRand, score = 0;
    int displayHeight;
    int viewHeight;
    int viewInitPos;

    Random random = new Random();
    Handler handler;
    Runnable runnable;

    @SuppressLint("SourceLockedOrientationActivity")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        setContentView(R.layout.activity_game);


        displayHeight = getScreenHeight(GameActivity.this);
        viewHeight = (int) (displayHeight * 0.20);
        viewInitPos = -viewHeight;

        initXML();
        initColor();
        logic();
    }


    public static int getScreenHeight(Activity h){
        DisplayMetrics height = new DisplayMetrics();
        h.getWindowManager().getDefaultDisplay().getMetrics(height);
        return height.heightPixels;
    }

Вот логика c этой игры, я создал один тип анимации на простом языке java. Здесь я использовал обработчик и метод runnable для анимации.

private void logic() {

    handler = new Handler();
    runnable = new Runnable() {
        @Override
        public void run() {
            while (true) {

                prevRand = rand;
                rand = random.nextInt(4);

                while (prevRand == rand) {
                    rand = random.nextInt(4);
                }

                b = posPart21 == 0 || posPart31 == 0 || posPart41 == 0 || posPart22 == 0 || posPart23 == 0 || posPart32 == 0 || posPart33 == 0 || posPart42 == 0 || posPart43 == 0;
                c = posPart12 == 0 || posPart31 == 0 || posPart41 == 0 || posPart11 == 0 || posPart13 == 0 || posPart32 == 0 || posPart33 == 0 || posPart42 == 0 || posPart43 == 0;
                d = posPart21 == 0 || posPart41 == 0 || posPart12 == 0 || posPart13 == 0 || posPart22 == 0 || posPart23 == 0 || posPart11 == 0 || posPart42 == 0 || posPart43 == 0;
                e = posPart21 == 0 || posPart31 == 0 || posPart12 == 0 || posPart13 == 0 || posPart22 == 0 || posPart23 == 0 || posPart32 == 0 || posPart33 == 0 || posPart11 == 0;

                handler.postDelayed(runnable, 2);


                if ((rand == 0) && b && (posPart13 != 0) && (posPart11 > displayHeight)) {
                    posPart11 = viewInitPos;
                }
                if (posPart11 == displayHeight - viewHeight) {
                    if (((ColorDrawable) part11.getBackground()).getColor() == Color.BLACK) {
                        displayScore = score;
                        break;
                    }
                }
                if (posPart11 == displayHeight) {
                    part11.setBackground(new ColorDrawable(Color.BLACK));
                }
                part11.setY(posPart11);
                posPart11++;



                if (posPart11 <= displayHeight && posPart11 >= viewInitPos) {
                    if ((rand == 0) && b && (posPart11 != 0)) {
                        posPart12 = viewInitPos;
                    }
                }
                if (posPart12 == displayHeight - viewHeight) {
                    if (((ColorDrawable) part12.getBackground()).getColor() == Color.BLACK) {
                        displayScore = score;
                        break;
                    }
                }
                if (posPart12 == displayHeight) {
                    part12.setBackground(new ColorDrawable(Color.BLACK));
                }
                part12.setY(posPart12);
                posPart12++;



                if ((posPart11 <= displayHeight && posPart11 >= viewInitPos) && (posPart12 <= displayHeight && posPart12 >= viewInitPos)) {
                    if ((rand == 0) && b && (posPart12 != 0)) {
                        posPart13 = viewInitPos;
                    }
                }
                if (posPart13 == displayHeight - viewHeight) {
                    if (((ColorDrawable) part13.getBackground()).getColor() == Color.BLACK) {
                        displayScore = score;
                        break;
                    }
                }
                if (posPart13 == displayHeight) {
                    part13.setBackground(new ColorDrawable(Color.BLACK));
                }
                part13.setY(posPart13);
                posPart13++;



                if ((rand == 1) && c && (posPart23 != 0) && (posPart21 > displayHeight)) {
                    posPart21 = viewInitPos;
                }
                if (posPart21 == displayHeight - viewHeight) {
                    if (((ColorDrawable) part21.getBackground()).getColor() == Color.BLACK) {
                        displayScore = score;
                        break;
                    }
                }
                if (posPart21 == displayHeight) {
                    part21.setBackground(new ColorDrawable(Color.BLACK));
                }
                part21.setY(posPart21);
                posPart21++;



                if (posPart21 <= displayHeight && posPart21 >= viewInitPos) {
                    if ((rand == 1) && c && (posPart21 != 0)) {
                        posPart22 = viewInitPos;
                    }
                }
                if (posPart22 == displayHeight - viewHeight) {
                    if (((ColorDrawable) part22.getBackground()).getColor() == Color.BLACK) {
                        displayScore = score;
                        break;
                    }
                }
                if (posPart22 == displayHeight) {
                    part22.setBackground(new ColorDrawable(Color.BLACK));
                }
                part22.setY(posPart22);
                posPart22++;



                if ((posPart21 <= displayHeight && posPart21 >= viewInitPos) && (posPart22 <= displayHeight && posPart22 >= viewInitPos)) {
                    if ((rand == 1) && c && (posPart22 != 0)) {
                        displayScore = score;
                        posPart23 = viewInitPos;
                    }
                }
                if (posPart23 == displayHeight - viewHeight) {
                    if (((ColorDrawable) part13.getBackground()).getColor() == Color.BLACK) {
                        displayScore = score;
                        break;
                    }
                }
                if (posPart23 == displayHeight) {
                    part23.setBackground(new ColorDrawable(Color.BLACK));
                }
                part23.setY(posPart23);
                posPart23++;



                if ((rand == 2) && d && (posPart33 != 0) && (posPart31 > displayHeight)) {
                    posPart31 = viewInitPos;
                }
                if (posPart31 == displayHeight - viewHeight) {
                    if (((ColorDrawable) part31.getBackground()).getColor() == Color.BLACK) {
                        displayScore = score;
                        break;
                    }
                }
                if (posPart31 == displayHeight) {
                    part31.setBackground(new ColorDrawable(Color.BLACK));
                }
                part31.setY(posPart31);
                posPart31++;



                if (posPart31 <= displayHeight && posPart31 >= viewInitPos) {
                    if ((rand == 2) && d && (posPart31 != 0)) {
                        posPart32 = viewInitPos;
                    }
                }
                if (posPart32 == displayHeight - viewHeight) {
                    if (((ColorDrawable) part32.getBackground()).getColor() == Color.BLACK) {
                        displayScore = score;
                        break;
                    }
                }
                if (posPart32 == displayHeight) {
                    part32.setBackground(new ColorDrawable(Color.BLACK));
                }
                part32.setY(posPart32);
                posPart32++;



                if ((posPart31 <= displayHeight && posPart31 >= viewInitPos) && (posPart32 <= displayHeight && posPart32 >= viewInitPos)) {
                    if ((rand == 2) && d && (posPart32 != 0)) {
                        posPart33 = viewInitPos;
                    }
                }
                if (posPart33 == displayHeight - viewHeight) {
                    if (((ColorDrawable) part33.getBackground()).getColor() == Color.BLACK) {
                        displayScore = score;
                        break;
                    }
                }
                if (posPart33 == displayHeight) {
                    part33.setBackground(new ColorDrawable(Color.BLACK));
                }
                part33.setY(posPart33);
                posPart33++;



                if ((rand == 3) && e && (posPart43 != 0) && (posPart41 > displayHeight)) {
                    posPart41 = viewInitPos;
                }

                if (posPart41 == displayHeight - viewHeight) {
                    if (((ColorDrawable) part41.getBackground()).getColor() == Color.BLACK) {
                        displayScore = score;
                        break;
                    }
                }
                if (posPart41 == displayHeight) {
                    part41.setBackground(new ColorDrawable(Color.BLACK));
                }
                part41.setY(posPart41);
                posPart41++;



                if (posPart41 <= displayHeight && posPart41 >= viewInitPos) {
                    if ((rand == 3) && e && (posPart41 != 0)) {
                        posPart42 = viewInitPos;
                    }
                }
                if (posPart42 == displayHeight - viewHeight) {
                    if (((ColorDrawable) part42.getBackground()).getColor() == Color.BLACK) {
                        displayScore = score;
                        break;
                    }
                }
                if (posPart42 == displayHeight) {
                    part42.setBackground(new ColorDrawable(Color.BLACK));
                }
                part42.setY(posPart42);
                posPart42++;



                if ((posPart41 <= displayHeight && posPart41 >= viewInitPos) && (posPart42 <= displayHeight && posPart42 >= viewInitPos)) {
                    if ((rand == 3) && e && (posPart42 != 0)) {
                        posPart43 = viewInitPos;
                    }
                }
                if (posPart43 == displayHeight - viewHeight) {
                    if (((ColorDrawable) part43.getBackground()).getColor() == Color.BLACK) {
                        displayScore = score;
                        break;
                    }
                }
                if (posPart43 == displayHeight) {
                    part43.setBackground(new ColorDrawable(Color.BLACK));
                }
                part43.setY(posPart43);
                posPart43++;

            }
        }
    };
    runnable.run();
}

Здесь я инициализировал некоторую высоту вида, цвет и их начальную позицию.

private void initColor() {

        part11.getLayoutParams().height = viewHeight;
        part21.getLayoutParams().height = viewHeight;
        part31.getLayoutParams().height = viewHeight;
        part41.getLayoutParams().height = viewHeight;
        part12.getLayoutParams().height = viewHeight;
        part22.getLayoutParams().height = viewHeight;
        part32.getLayoutParams().height = viewHeight;
        part42.getLayoutParams().height = viewHeight;
        part13.getLayoutParams().height = viewHeight;
        part23.getLayoutParams().height = viewHeight;
        part33.getLayoutParams().height = viewHeight;
        part43.getLayoutParams().height = viewHeight;

        part11.setBackground(new ColorDrawable(Color.BLACK));
        part21.setBackground(new ColorDrawable(Color.BLACK));
        part31.setBackground(new ColorDrawable(Color.BLACK));
        part41.setBackground(new ColorDrawable(Color.BLACK));
        part12.setBackground(new ColorDrawable(Color.BLACK));
        part22.setBackground(new ColorDrawable(Color.BLACK));
        part32.setBackground(new ColorDrawable(Color.BLACK));
        part42.setBackground(new ColorDrawable(Color.BLACK));
        part13.setBackground(new ColorDrawable(Color.BLACK));
        part23.setBackground(new ColorDrawable(Color.BLACK));
        part33.setBackground(new ColorDrawable(Color.BLACK));
        part43.setBackground(new ColorDrawable(Color.BLACK));

        posPart11 = viewInitPos;
        posPart12 = displayHeight;
        posPart13 = displayHeight;
        posPart21 = displayHeight;
        posPart22 = displayHeight;
        posPart23 = displayHeight;
        posPart31 = displayHeight;
        posPart32 = displayHeight;
        posPart33 = displayHeight;
        posPart41 = displayHeight;
        posPart42 = displayHeight;
        posPart43 = displayHeight;

        part11.setY(posPart11);
        part12.setY(posPart12);
        part13.setY(posPart13);
        part21.setY(posPart21);
        part22.setY(posPart22);
        part23.setY(posPart23);
        part31.setY(posPart31);
        part32.setY(posPart32);
        part33.setY(posPart33);
        part41.setY(posPart41);
        part42.setY(posPart42);
        part43.setY(posPart43);
    }

Здесь я установил все onclicklistener для всех видов.

private void initXML() {

    part11 = findViewById(R.id.part11);
    part11.setOnClickListener(this);
    part12 = findViewById(R.id.part12);
    part12.setOnClickListener(this);
    part13 = findViewById(R.id.part13);
    part13.setOnClickListener(this);
    part21 = findViewById(R.id.part21);
    part21.setOnClickListener(this);
    part22 = findViewById(R.id.part22);
    part22.setOnClickListener(this);
    part23 = findViewById(R.id.part23);
    part23.setOnClickListener(this);
    part31 = findViewById(R.id.part31);
    part31.setOnClickListener(this);
    part32 = findViewById(R.id.part32);
    part32.setOnClickListener(this);
    part33 = findViewById(R.id.part33);
    part33.setOnClickListener(this);
    part41 = findViewById(R.id.part41);
    part41.setOnClickListener(this);
    part42 = findViewById(R.id.part42);
    part42.setOnClickListener(this);
    part43 = findViewById(R.id.part43);
    part43.setOnClickListener(this);
}

@Override
public void onClick(View view) {
    switch(view.getId()) {
        case R.id.part11:
            part11.setBackground(new ColorDrawable(Color.LTGRAY));
            score++;
            break;
        case R.id.part12:
            part12.setBackground(new ColorDrawable(Color.LTGRAY));
            score++;
            break;
        case R.id.part13:
            part13.setBackground(new ColorDrawable(Color.LTGRAY));
            score++;
            break;
        case R.id.part21:
            part21.setBackground(new ColorDrawable(Color.LTGRAY));
            score++;
            break;
        case R.id.part22:
            part22.setBackground(new ColorDrawable(Color.LTGRAY));
            score++;
            break;
        case R.id.part23:
            part23.setBackground(new ColorDrawable(Color.LTGRAY));
            score++;
            break;
        case R.id.part31:
            part31.setBackground(new ColorDrawable(Color.LTGRAY));
            score++;
            break;
        case R.id.part32:
            part32.setBackground(new ColorDrawable(Color.LTGRAY));
            score++;
            break;
        case R.id.part33:
            part33.setBackground(new ColorDrawable(Color.LTGRAY));
            score++;
            break;
        case R.id.part41:
            part41.setBackground(new ColorDrawable(Color.LTGRAY));
            score++;
            break;
        case R.id.part42:
            part42.setBackground(new ColorDrawable(Color.LTGRAY));
            score++;
            break;
        case R.id.part43:
            part43.setBackground(new ColorDrawable(Color.LTGRAY));
            score++;
            break;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...