/ / wywołanie metody z metody w tej samej klasie - metody, wykrywanie kolizji, wywołanie metody

metoda wywołania metody z tej samej klasy - metody, wykrywanie kolizji, wywołanie metody

Mam klasę platformówek, która tworzy oknoi spawnuje platformy i „postać”. Do tworzenia platform używa platformy innej klasy. Postać ma podskoczyć i wylądować na platformach. używam getBounds i getTopY funkcje wykrywania kolizji, ale działają tylko na pierwszej platformie. Jak sprawić, by działały na wielu platformach?

public class Platformer extends JPanel {
Platform platform = new Platform(this);
Character character = new Character(this);

public Platformer() {
addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
character.keyTyped(e);
}

@Override
public void keyReleased(KeyEvent e) {
character.keyReleased(e);
}

@Override
public void keyPressed(KeyEvent e) {
character.keyPressed(e);
}
});

setFocusable(true);
}

@Override
public void paint(Graphics g) {
super.paint(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

platform.Location(150,200);
platform.paint(g2d);

platform.Location(200,120);
platform.paint(g2d);

character.paint(g2d);
}

private void move(){
character.move();
}

public static void main(String args[]){
JFrame frame = new JFrame("Mini Tennis");

//create new game
Platformer platformer = new Platformer();

//add game
frame.add(platformer);

//size
frame.setSize(400, 400);
frame.setVisible(true);

//set close condition
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

while (true) {
platformer.move();
platformer.repaint();

try {
Thread.sleep(10);//sleep for 10 sec
} catch (InterruptedException ex) {
Thread.currentThread().interrupt();
}
}
}
}

public class Platform {
private static final int Height = 10;
private static final int Width = 60;
int x;
int Y;
private Platformer platformer;

public Platform(Platformer platformer) {
this.platformer = platformer;
}

public void Location(int xin, int yin) {
x = xin;
Y = yin;
}

public void paint(Graphics2D g) {
g.fillRect(x, Y, Width, Height);
}

public Rectangle getBounds() {
return new Rectangle(x, Y, Width, Height);
}

public int getTopPlat() {
return Y;
}
}

Odpowiedzi:

0 dla odpowiedzi № 1

W rzeczywistości masz tylko jedną platformę. I rysujesz tę platformę dwa razy w różnych miejscach (paint funkcja w Platformer):

platform.Location(150,200);
platform.paint(g2d);

platform.Location(200,120);
platform.paint(g2d);

Dlatego przypuszczam, że obsługujesz tylko jedną platformę (o współrzędnych 200 i 120). Musisz zachować wszystkie swoje platformy i obsługiwać każdą z nich osobno.