LibGDX, лучший способ хранить несколько разных позиций спрайтов - PullRequest
0 голосов
/ 15 апреля 2020

Итак, я сейчас создаю небольшую игру, в которой всего 25 спрайтов в одной сцене. 1 спрайт - игрок, а остальные - вражеские спрайты.

То, что я пытаюсь сделать, это установить положение 24 вражеских спрайтов в их собственных уникальных областях. Это легко сделать, просто набрав sprite.setPosition(x,y), но это означало бы, что мне придется написать 24 разных setPosition оператора.

Все мои спрайты хранятся в ArrayList, который добавляет 24 спрайта в список, которые затем отображаются 24 раза в методе render(). В настоящее время все 24 спрайта отображаются в 0,0.

Существует ли более простой и эффективный способ задания позиции каждого спрайта, который затем можно обновить, чтобы он работал с deltatime для перемещения спрайта.

1 Ответ

0 голосов
/ 15 апреля 2020

Вы можете сохранить каждый из спрайтов в массиве, а затем просто установить их позиции на случайную позицию на радиусе расширяющегося круга при переборе всех вражеских спрайтов:

...
private Sprite[] enemies;
...
public void positionSprites() {
    for(int i = 0; i < enemies.length; i++) {
        //Gets the enemy from the array.
        Sprite enemy = enemies[i];
        //Generates a random angle between 0 and 2pi in radians to move the sprite to.
        double randAngle = 2 * Math.PI * Math.random();
        //Calculates the radius of the circle to be the (iteration count + 1) * the diagonal size of the sprites to prevent them from overlapping.
        double radius = (i + 1) * Math.sqrt(Math.pow(enemy.getWidth(), 2) + Math.pow(enemy.getHeight(), 2));
        //Calculates the position the enemy at the random angle along the circle.
        float x = (float) radius * Math.cos(angle), y = (float) radius * Math.sin(angle);
        //Sets the enemy position to the new position.
        enemy.setPosition(x, y);
    }
} 
...