Как установить скорость перемещения шариков в диапазоне скоростей (Java) - PullRequest
0 голосов
/ 17 апреля 2019

Я пишу программу, которая имеет дело с движениями шара / частицы.Я хочу запрограммировать логику так, чтобы «горячие» шары перемещались между 4 и 6 см в секунду, а «холодные» шары - между 2 и 4 см в секунду.Как я могу использовать пиксели на см (113 / 2.54), где 113 - это разрешение экрана на дюйм, чтобы установить скорости?

Я просто использую фиксированное число для значений vx и vy дляшары.

Это мой конструктор Ball

public Ball(Side s, Color color) { //Side character used to determine if ball should spawn on left or right side.

        //makeRandom method gives positive or negative direction for each ball
        if (color == Color.RED){
            this.vx = 8 * makeRandom(); 
            this.vy = 8 * makeRandom();
        } else {
            this.vx = 5 * makeRandom();
            this.vy = 5 * makeRandom();
        }

        speed = Math.sqrt(Math.pow(this.vx, 2)+Math.pow(this.vy, 2));

        //position is randomized for each ball 
        if(s == Side.LEFT) {
            this.x = leftSideBallX + (int) (50 * Math.random());
            this.y = leftSideBallY + (int) (50 * Math.random()); 
        } else {
            this.x = rightSideBallX + (int) (50 * Math.random());
            this.y = rightSideBallY + (int) (50 * Math.random());
        }

    }

, а это мой игровой цикл

@Override
    public void run() {

        running = true;

        addParticlesToVector();

        long start;
        long elapsed;
        long wait;

        while (running) {

            start = System.nanoTime();

            gameUpdate();
            this.repaint();

            leftTemp.setText("Temperature: " + df.format(lTemp));
            rightTemp.setText("Temperature: " + df.format(rTemp));

            elapsed = (start - System.nanoTime());
            wait = targetTime - elapsed/1000000;

            try {
                Thread.sleep(wait);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }   
    }

1 Ответ

0 голосов
/ 17 апреля 2019

Если вы действительно хотите, чтобы скорость находилась в диапазоне (а не по скоростям x и y), вам нужно будет отдельно генерировать скорость и направление. В данный момент вы генерируете скорости x и y независимо, что даст вам гораздо больший диапазон комбинированных скоростей. Для этого нужен базовый триггер.

Я предлагаю хранить значения модели отдельно от соображений пользовательского интерфейса (таких как преобразование из cms в #pixels. Я также предлагаю инкапсулировать вашу концепцию тепла.

class Ball {
    private float angle;
    private float speed;

    public Ball(Random random, Heat heat) {
        this.angle = random.nextFloat(Math.PI * 2);
        this.speed = heat.randomSpeed(random);
    }

    public float xVelocity() {
        return speed * Math.cos(angle);
    }

    public float yVelocity() {
        return speed * Math.sin(angle);
    }
}

class ScreenConverter {
    private static final float PIXELS_PER_CM = 113f/2.54f;

    public float pixelsToDistance(int pixels) {
        return pixels * PIXELS_PER_CM;
    }

    public int distanceToPixels(float distanceInCMs) {
        return int(distanceInCM / PIXELS_PER_CM);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...