Как создать несколько одинаковых объектов, которые преследуют один объект [Java] - PullRequest
0 голосов
/ 25 ноября 2018

У меня были некоторые проблемы с попыткой создания постоянно «порождающих» объектов (называемых Rushers), которые преследуют один объект, контролируемый пользователем (называемый Персонажем).Моя главная проблема в том, что координаты для Рашеров кажутся такими же, как и для Персонажа.

У меня код разбит на несколько классов.Вот код для символа сначала:

public class Gamepanel {

private boolean right = false, left = false, up = false, down = false;
public Character mainChar;
private static int xCoor = 230;
private static int yCoor = 210;

Это основной цикл:

public void tick(){
    mainChar = new Character(xCoor, yCoor, 30, 50);
    mainChar.setxCoor(xCoor);
    mainChar.setyCoor(yCoor);

    if(right && mainChar.getxCoor() < 469) xCoor+=5;
    if(left && mainChar.getxCoor() > 0) xCoor -= 5; 
    if(up && mainChar.getyCoor() > 0) yCoor -= 5;
    if(down && mainChar.getyCoor() < 449) yCoor+=5;
}

GFX:

mainChar.draw(g);

Элементы управления являются основными клавишами.и keyReleased методы.Я не буду публиковать их для краткости, так как они, кажется, работают нормально.

Это код для класса Character:

public class Character {

int xCoor = 230;
int yCoor = 210;
int width = 30;
int height = 50;

public Character(int xCoor, int yCoor, int width, int height) {
    this.xCoor = xCoor;
    this.yCoor = yCoor;
}

public void draw(Graphics g) {
    g.setColor(Color.GREEN);
    g.fillRect(xCoor, yCoor, width, height);
}

public int getxCoor() {
    return xCoor;
}

public void setxCoor(int xCoor) {
    this.xCoor = xCoor;
}

public int getyCoor() {
    return yCoor;
}

public void setyCoor(int yCoor) {
    this.yCoor = yCoor;
}
}

Похоже, все они работают нормальнонет массовых проблем.Самые большие проблемы у меня были с другими моими объектами, Рашерами.Вот их код в Gamepanel:

public class Gamepanel {

private Rusher rusher;
ArrayList<Rusher> rushers;
int spawnTimer = 0;

public Gamepanel() {
    rushers = new ArrayList <Rusher>();
}

public void tick(){
    spawnTimer++;
    if(spawnTimer > 75) {
        spawn();
        spawnTimer = 0;
    }

    if(rushers.size() > 0) {
        for(int i = 0; i < rushers.size(); i++) {
            rushers.get(i).tick();
        }
    }
}

GFX:

if(rushers.size() > 0) {
    for(int i = 0 ; i < rushers.size(); i++) {
        rushers.get(i).draw(g);
    }
}

Метод Spawn (уверен, что здесь ошибка):

public void spawn() {
    int xSpawn[] = new int[4];
    int ySpawn[] = new int[4];
    ySpawn[0] = 250; ySpawn[1] = 499; ySpawn[2] = 250; ySpawn[3] = 0;
    xSpawn[0] = 0; xSpawn[1] = 250; xSpawn[2] = 499; xSpawn[3] = 250;
    int spawnCoor = randomRange(0, 3);
    rusher = new Rusher(xSpawn[spawnCoor], ySpawn[spawnCoor], 10, 10);
    rusher.setxCoor(xSpawn[spawnCoor]);
    rusher.setyCoor(ySpawn[spawnCoor]);
    rushers.add(rusher);
}

и наконец, класс Рашера:

public class Rusher {

private static int xCoor;
private static int yCoor;
private int width = 20;
private int height = 20;

public Rusher(int xCoor, int yCoor, int width, int height) {
    super(xCoor, yCoor, width, height);
    Rusher.xCoor = xCoor;
    Rusher.yCoor = yCoor;
}

public void tick() {
    if(xCoor > Gamepanel.mainxCoor()) xCoor -= 2;
    if(yCoor > Gamepanel.mainyCoor()) yCoor -= 2;
    if(xCoor < Gamepanel.mainxCoor()) xCoor += 2;
    if(yCoor < Gamepanel.mainyCoor()) yCoor += 2;
}

public void draw(Graphics g) {
    g.setColor(Color.RED);
    g.fillRect(xCoor, yCoor, width, height);
}

public int getxCoor() {
    return xCoor;
}

public void setxCoor(int xCoor) {
    Rusher.xCoor = xCoor;
}

public int getyCoor() {
    return yCoor;
}

public void setyCoor(int yCoor) {
    Rusher.yCoor = yCoor;
}

}

Напомним, что основная проблема заключается в том, что Рашеры будут появляться с теми же координатами, что и Персонаж, а также будут двигаться так же быстро, несмотря на то, что я настроил их движение.на 3 медленнее, чем персонаж.Я постарался сделать это как можно более кратким.Если требуется больше кода, у меня есть некоторые другие, которые относятся к этим объектам.

Заранее спасибо.

1 Ответ

0 голосов
/ 25 ноября 2018

Я узнал это.Я устанавливал координаты для Rushers как статические, поэтому они все имели одни и те же.Когда я изменил это и отрегулировал некоторые другие, более мелкие вещи, это сработало намного лучше.

...