Не понимаю принцип работы метода

210
14 апреля 2022, 18:50

Это часть кода мобильной игры:

public class Plane {
        Bitmap plane[] = new Bitmap[15];
        int planeX, planeY, velocity, planeFrame;
        Random random;
    
        public Plane(Context context) {
            plane[0] = BitmapFactory.decodeResource(context.getResources(),R.drawable.plane_1);
            plane[1] = BitmapFactory.decodeResource(context.getResources(),R.drawable.plane_2);
            plane[2] = BitmapFactory.decodeResource(context.getResources(),R.drawable.plane_3);
            plane[3] = BitmapFactory.decodeResource(context.getResources(),R.drawable.plane_4);
            plane[4] = BitmapFactory.decodeResource(context.getResources(),R.drawable.plane_5);
            plane[5] = BitmapFactory.decodeResource(context.getResources(),R.drawable.plane_6);
            plane[6] = BitmapFactory.decodeResource(context.getResources(),R.drawable.plane_7);
            plane[7] = BitmapFactory.decodeResource(context.getResources(),R.drawable.plane_8);
            plane[8] = BitmapFactory.decodeResource(context.getResources(),R.drawable.plane_9);
            plane[9] = BitmapFactory.decodeResource(context.getResources(),R.drawable.plane_10);
            plane[10] = BitmapFactory.decodeResource(context.getResources(),R.drawable.plane_11);
            plane[11] = BitmapFactory.decodeResource(context.getResources(),R.drawable.plane_12);
            plane[12] = BitmapFactory.decodeResource(context.getResources(),R.drawable.plane_13);
            plane[13] = BitmapFactory.decodeResource(context.getResources(),R.drawable.plane_14);
            plane[14] = BitmapFactory.decodeResource(context.getResources(),R.drawable.plane_15);
            random = new Random();
            resetPosition();
        }
        public Bitmap getBitmap(){
            return plane[planeFrame];
        }
        public int getWidth(){
            return plane[0].getWidth(); // не понимаю, что происходит здесь. Почему возвращается именно нулевой элемент, причём с обращением к этому же методу
        }
        public int getHeight(){
            return plane[0].getHeight();
        }
        public void resetPosition(){
            planeX = GameView.dWidth + random.nextInt(1200);
            planeY = random.nextInt(300);
            velocity = 8 + random.nextInt(13);
            planeFrame = 0;
        }
    }

Этот метод (около которого есть комментарий), вызывается в методе другого класса:

 @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.drawBitmap(background, null, rect, null);
        for (int i = 0; i < planes.size(); i++) {
            canvas.drawBitmap(planes.get(i).getBitmap(), planes.get(i).planeX, planes.get(i).planeY, null);
            planes.get(i).planeFrame++;
            if (planes.get(i).planeFrame > 14) {
                planes.get(i).planeFrame = 0;
            }
            planes.get(i).planeX -= planes.get(i).velocity;
            if (planes.get(i).planeX < -planes.get(i).getWidth()) {
                planes.get(i).resetPosition();
                life--;
                if(life == 0){ // конец игры (смерть)
                    Intent intent = new Intent(context, GameOver.class);
                    intent.putExtra("score", (count * 10));
                    context.startActivity(intent);
                    ((Activity) context).finish();
                }
            }
            canvas.drawBitmap(planes2.get(i).getBitmap(), planes2.get(i).planeX, planes2.get(i).planeY, null);
            planes2.get(i).planeFrame++;
            if (planes2.get(i).planeFrame > 9) {
                planes2.get(i).planeFrame = 0;
            }
            planes2.get(i).planeX += planes2.get(i).velocity;
            if (planes2.get(i).planeX > (dWidth + planes2.get(i).getWidth())) {
                planes2.get(i).resetPosition();
                life--;
                if(life == 0){
                    Intent intent = new Intent(context, GameOver.class);
                    intent.putExtra("score", (count * 10));
                    context.startActivity(intent);
                    ((Activity) context).finish();
                }
            }
        }
        for (int i = 0; i < missiles.size(); i++) {
            if (missiles.get(i).y > -missiles.get(i).getMissileHeight()) {
                missiles.get(i).y -= missiles.get(i).mVelocity;
                canvas.drawBitmap(missiles.get(i).missile, missiles.get(i).x, missiles.get(i).y, null);
                if (missiles.get(i).x >= planes.get(0).planeX && (missiles.get(i).x + missiles.get(i).getMissileWidth())
                        <= (planes.get(0).planeX + planes.get(0).getWidth()) && missiles.get(i).y >= planes.get(0).planeY &&
                        missiles.get(i).y <= (planes.get(0).planeY + planes.get(0).getHeight())) {
                    Explosion explosion = new Explosion(context);
                    explosion.explosionX = planes.get(0).planeX + planes.get(0).getWidth()/2 - explosion.getExplosionWidth()/2;
                    explosion.explosionY = planes.get(0).planeY + planes.get(0).getHeight()/2 - explosion.getExplosionHeight()/2;
                    explosions.add(explosion);
                    planes.get(0).resetPosition();
                    count++;
                    missiles.remove(i);
                    if(point != 0){
                        sp.play(point, 1, 1, 0, 0, 1);
                    }
                }else if (missiles.get(i).x >= planes.get(1).planeX && (missiles.get(i).x + missiles.get(i).getMissileWidth())
                        <= (planes.get(1).planeX + planes.get(1).getWidth()) && missiles.get(i).y >= planes.get(1).planeY &&
                        missiles.get(i).y <= (planes.get(1).planeY + planes.get(1).getHeight())) {
                    Explosion explosion = new Explosion(context);
                    explosion.explosionX = planes.get(1).planeX + planes.get(1).getWidth()/2 - explosion.getExplosionWidth()/2;
                    explosion.explosionY = planes.get(1).planeY + planes.get(1).getHeight()/2 - explosion.getExplosionHeight()/2;
                    explosions.add(explosion);
                    planes.get(1).resetPosition();
                    count++;
                    missiles.remove(i);
                    if(point != 0){
                        sp.play(point, 1, 1, 0, 0, 1);
                    }
                }else if (missiles.get(i).x >= planes2.get(0).planeX && (missiles.get(i).x + missiles.get(i).getMissileWidth())
                        <= (planes2.get(0).planeX + planes2.get(0).getWidth()) && missiles.get(i).y >= planes2.get(0).planeY &&
                        missiles.get(i).y <= (planes2.get(0).planeY + planes2.get(0).getHeight())) {
                    Explosion explosion = new Explosion(context);
                    explosion.explosionX = planes2.get(0).planeX + planes2.get(0).getWidth()/2 - explosion.getExplosionWidth()/2;
                    explosion.explosionY = planes2.get(0).planeY + planes2.get(0).getHeight()/2 - explosion.getExplosionHeight()/2;
                    explosions.add(explosion);
                    planes2.get(0).resetPosition();
                    count++;
                    missiles.remove(i);
                    if(point != 0){
                        sp.play(point, 1, 1, 0, 0, 1);
                    }
                }else if (missiles.get(i).x >= planes2.get(1).planeX && (missiles.get(i).x + missiles.get(i).getMissileWidth())
                        <= (planes2.get(1).planeX + planes2.get(1).getWidth()) && missiles.get(i).y >= planes2.get(1).planeY &&
                        missiles.get(i).y <= (planes2.get(1).planeY + planes2.get(1).getHeight())) {
                    Explosion explosion = new Explosion(context);
                    explosion.explosionX = planes2.get(1).planeX + planes2.get(1).getWidth()/2 - explosion.getExplosionWidth()/2;
                    explosion.explosionY = planes2.get(1).planeY + planes2.get(1).getHeight()/2 - explosion.getExplosionHeight()/2;
                    explosions.add(explosion);
                    planes2.get(1).resetPosition();
                    count++;
                    missiles.remove(i);
                    if(point != 0){
                        sp.play(point, 1, 1, 0, 0, 1);
                    }
                }
            } else {
                missiles.remove(i);
            }
        }
        for(int j=0; j<explosions.size(); j++){
            canvas.drawBitmap(explosions.get(j).getExplosion(explosions.get(j).explosionFrame), explosions.get(j).explosionX,
                    explosions.get(j).explosionY, null);
            explosions.get(j).explosionFrame++;
            if(explosions.get(j).explosionFrame > 8){
                explosions.remove(j);
            }
        }
        canvas.drawBitmap(tank, (dWidth / 2 - tankWidth / 2), dHeight - tankHeight, null);
        canvas.drawText("Pt: " + (count * 10), 0, TEXT_SIZE, scorePaint);
        canvas.drawRect(dWidth - 110, 10, dWidth - 110 + 10*life, TEXT_SIZE, healthPaint);
        handler.postDelayed(runnable, UPDATE_MILLIS);
    }
READ ALSO
Задание кроссбраузерной верстки

Задание кроссбраузерной верстки

Искал в интернете Кроссбраузерная верстка

155
Как присвоить тегу атрибут в puppeteer?

Как присвоить тегу атрибут в puppeteer?

Как присвоить тегу input атрибут в puppeteer?

237
инспекция кода random&#39;айзера

инспекция кода random'айзера

Данный код генерирует числа из введённого диапазонаМожете показать на ошибки в коде, и как его можно улучшить

252
Создание адаптивного меню навигации в сетку 2&#215;2

Создание адаптивного меню навигации в сетку 2×2

У меня есть навигационное меню которое надо сделать адаптивным Само меню состоит из 4 кнопок, и мне нужно что бы они перестраивались в сетку...

193