Spiel-Programmieren. Wenn ein Objekt den anderen berührt.

Diskutiere Spiel-Programmieren. Wenn ein Objekt den anderen berührt. im Java Basics - Anfänger-Themen Bereich.
S

SystemExit

Also,
Ich habe zwei jLabels mit Icons.
Ein jlabel kann sich bewegen- wenn er den anderen jlabel berührt, soll der jLabel seinen Icon wechseln.
Ich weiss aber nicht, wie ich den zweiten Teil umsetzten kann. Also ich kann ja nicht die Location der beide vergleichen, weil die sich ja schon früher "berühren".
Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

public class NeuesProjekt extends JFrame implements KeyListener  {
  // start attributes
  private JLabel FigurMain = new JLabel();
  private ImageIcon figurMainIcon = new ImageIcon(getClass().getResource("images/InfizierterJunge.png"));
  private JLabel FigurNichtInfiziert = new JLabel();
  private ImageIcon figurNichtInfiziertIcon = new ImageIcon(getClass().getResource("images/normalerJunge.png"));
  // end attributes

  public NeuesProjekt() {
    super("VirusRun!");
    setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    int frameWidth = 326;
    int frameHeight = 323;
    setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (d.width - getSize().width) / 2;
    int y = (d.height - getSize().height) / 2;
    setLocation(x, y);
    setResizable(false);
    Container cp = getContentPane();
    cp.setLayout(null);
    // start components
    this.addKeyListener(this);
    FigurMain.setBounds(120, 144, 41, 49);
    FigurMain.setIcon(figurMainIcon);
    cp.add(FigurMain);
    FigurNichtInfiziert.setBounds(72, 144, 41, 49);
    FigurNichtInfiziert.setIcon(figurNichtInfiziertIcon);
    cp.add(FigurNichtInfiziert);
    // end components
    setVisible(true);
  }

  public static void main(String[] args) {
    new NeuesProjekt();
  }

   public void keyTyped(KeyEvent e) {
    }

    public void keyPressed(KeyEvent e) {
      if(e.getKeyCode() == KeyEvent.VK_RIGHT) {
      FigurMain.setLocation(FigurMain.getLocation().x +1, FigurMain.getLocation().y);
      InfiziertAufNichtInfiziert();
    } else if (e.getKeyCode() == KeyEvent.VK_LEFT){
      FigurMain.setLocation(FigurMain.getLocation().x -1, FigurMain.getLocation().y);
      InfiziertAufNichtInfiziert();
    } else if(e.getKeyCode() == KeyEvent.VK_DOWN) {
      FigurMain.setLocation(FigurMain.getLocation().x, FigurMain.getLocation().y+1);
      InfiziertAufNichtInfiziert();
    } else if(e.getKeyCode() == KeyEvent.VK_UP) {
      FigurMain.setLocation(FigurMain.getLocation().x, FigurMain.getLocation().y -1);
      InfiziertAufNichtInfiziert();
    }
  }

    public void keyReleased(KeyEvent e) {
    }

    public void InfiziertAufNichtInfiziert() {
    if ( /* hier treffen sich beide, weiss aber nicht, was ich vergleichen muss*/) {
      FigurNichtInfiziert.setIcon(figurMainIcon);
    }
   
  }
   

  // end methods
} // end of class NeuesProjekt
https://www.java-forum.org/thema/bild-beruehrt-bild.128003/ da wurde zwar das Gleiche gefragt, ich verstehe es abernicht wirklich.
 
Zuletzt bearbeitet:
S

SystemExit

Ich kann alle Punkte, wo die sich beide treffen vergleichen, aber das ist ja nicht der Sinn der Sache, wie kann man das einfacher lösen?
 
J

JustNobody

Also erst einmal bitte die Namenskonventionen einhalten. Ersten Buchstaben von Methoden und Instanz-/Lokale Variablen klein von Klassen groß schreiben.

Und Deine Label haben doch einen Ort und eine Größe. Damit sollte es doch einfach sein zu prüfen, ob die sich berühren / überschneiden. Da die Größe gleich ist musst du auch gewisse Sonderfälle nicht betrachten. Somit reicht es sogar die Positionen zu vergleichen. dx muss <= Breite und dy <= Höhe sein. Mit dx und dy dem (positiven) Abstand zwischen den Punkten in x bzw. y Richtung.
 
S

SystemExit

Also erst einmal bitte die Namenskonventionen einhalten. Ersten Buchstaben von Methoden und Instanz-/Lokale Variablen klein von Klassen groß schreiben.
Aber "FigurMain" ist doch richtig oder ? dachte alles was sichtbar ist, wird gross geschrieben. Also Label, Button und so weiter
Alles andere ist klar, wird geändert.

Somit reicht es sogar die Positionen zu vergleichen. dx muss <= Breite und dy <= Höhe sein. Mit dx und dy dem (positiven) Abstand zwischen den Punkten in x bzw. y Richtung.
Das habe ich nicht richtig verstanden. Vielleicht einmal ohne Programmierung, was macht man genau? welchdn Abstand? Verstehe es nicht so richtig., auch ohne Programmierung.

Also man hat die Breite und die Höhe ? Und dann rechnet man den Abstand zwischen den Punkten in x bzw- y richtung?
 
J

JustNobody

Mal es Dir einmal auf. Generell ist es doch so, dass eine Kollision vorliegt, wenn ein Eckpunkt des einen Elements innerhalb/auf dem Rechteck des anderen Elements ist.

Damit hast du 4 Bedingungen, die du überprüfen kannst / musst. => universelle Lösung

Du kannst aber auch jeden Punkt darstellen mit der Position des Elements und der Größe des Elements.
Das kannst du auch einsetzen bei den 4 Gleichungen und schauen, was da dann raus kommt.... dann kommst du auf die einfachere Darstellung,

Aber evtl. macht es auch für Dich Sinn, einfach einmal etwas die Grundlagen zu lesen. Kollisionserkennung ist ein Thema, das bei vielen Einführungen enthalten ist und zu dem es auch viele Informationen im Netz gibt ....
 
T

temi

Aber "FigurMain" ist doch richtig oder ? dachte alles was sichtbar ist, wird gross geschrieben.
Es ist in Java als Konvention weithin anerkannt, dass Klassen, Interfaces und Enums im UpperCamelCase (Großbuchstabe am Anfang) und Variabalen und Methoden im lowerCamelCase (Kleinbuchstabe am Anfang) geschrieben werden. Konstanten werden normalerweise komplett groß geschrieben.

Mit sichtbar oder nicht hat das gar nichts zu tun.
 
S

SystemExit

Könntest du das bitte in meinem Code noch hinzufügen? Ich werde mir gleich das Ganze anschauen mit Kollisionserkennung und denke, dass ich das dann besser verstehen werde, bei meinen eigenen Code
 
Thema: 

Spiel-Programmieren. Wenn ein Objekt den anderen berührt.

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben