Kollision für Arkanoid

Status
Nicht offen für weitere Antworten.
F

frozen-man

Gast
Hallo
Ich schreibe gerade einen Arkanoid Klon und bin aufgrund von problemen mit der Kollisionsüberprüfung schon ziemlich frustriert.
Ich poste einfach mal meinen Code, vieleicht hat ja irgendjemand eine Ahnung wieso das nicht richtig funktioniert.
Die Logik die dahinter steckt ist folgende:
Ich berechne von jedem stein die Kollisionszeiten mit oben, unten, links und rechts (Seiten vom Stein).
Dann prüfe ich ob das t >0 und <1 ist (1 bedeutet einen ganzen Bewegungsschritt und 0 keine Bewegung),
berechne die neue Position und überprüfe ob der Ball an einer der Kanten auftrifft und starte die kollisionsbehandlung

Vielen Dank schon mal im Vorraus

Gruß

Tobi

Code:
 public void pruefeKollisionStein(){
        double t=kleinstesT();
        this.ballxPos = neuePos(ballxPos, richtungx, t);
        this.ballyPos = neuePos(ballyPos, richtungy, t);
        ball.setxPos(ballxPos);
        ball.setyPos(ballyPos);
        
        kollisionStein();
            
    	
    	}


 public double kleinstesT(){
       double t, speicher =1;
       this.ballxPos = ballxPos - richtungx;
       this.ballyPos = ballyPos - richtungy;
       for(int i=0; stein[i]!=null; i++){
           if(stein[i].vorhanden == true){
               int oben = stein[i].getOben();
               int unten = stein[i].getUnten();
               int links = stein[i].getLinks();
               int rechts = stein[i].getRechts();
               
               // für Kollision mit "Unten"
               t = tBerechnen(ballyPos, richtungy, unten);
               if((t>0)&& (t < 1)){
                   if(imBereich(neuePos(ballxPos, richtungx, t),links, rechts)){
                       if(t<speicher){
                           speicher = t;
                       }
                   }
               }
	       // für Kollision mit "Oben"
               t=tBerechnen((ballyPos+ballRadius), richtungy, oben);
               if((t>0) && (t<1)){
                   if(imBereich(neuePos(ballxPos, richtungx, t),links, rechts)){
                       if(t<speicher){
                           speicher = t;
                       }
                   }
               }
 		
               if(richtungx!= 0){
		   // für Kollision mit "Links"
                   t=tBerechnen((ballxPos+ballRadius), richtungx, links);
                       if((t>0) && (t<1)){
                           if(imBereich(neuePos(ballyPos, richtungy, t), oben, unten)){
                               if(t<speicher){
                                   speicher=t;
                               }
                           }
                       }
		       // für Kollision mit "Rechts"
                       t=tBerechnen(ballxPos, richtungx, rechts);
                       if((t>0) && (t<1)){
                           if(imBereich(neuePos(ballyPos, richtungy, t), oben, unten)){
                               if(t<speicher){
                                   speicher=t;
                       
                   
                               	}
                           }
               
                       }
               }
           }
       }
       
       return speicher;
   }


private int neuePos(int aktPos, int richtung, double t) {
    
    return (int)(aktPos + (t*richtung));
}


private double tBerechnen(int aktPos, int richtung, int konst) {
    double wert = 0.0;
    wert+= ((konst-aktPos)/(double)richtung);
    return wert;
}
private boolean imBereich(int x, int kleinerWert, int großerWert){
    if(((x+ballRadius) >= kleinerWert) && (x <= großerWert)){
        return true;
    }
    else
        return false;
}
 

MPW

Top Contributor
hm, also ich kenne jetzt das Spiel nicht, aber was passiert denn wenn sich zwei Steine aufeinander zubewegen? Ist das auch beruecksichtigt?
 
G

Guest

Gast
Hallo frozen-man!

Deine Aktion mit dem Arkanoid Clone finde ich eine coole Sache - bin selber ein großer Fan von alten Arkade-Spielen. Deshalb hab ich in den letzten Tagen auch noch einmal Galaga gecloned (ebenfalls in Java). Da dort auch die Kolision mit einem anderen Raumschiff berücksichtigt werden muss, sollten die Quellcodes also ähnlich aussehen. Die effizienteste und kürzeste Möglichkeit, einen Gegner (oder Stein in deinem Fall) zu realisieren erschien mir deshalb diese als Klasse zu definieren. Dies bietet dir den unschlagbaren Vorteil, dass jeder Stein eine Methode implementieren kann, die darauf aufpasst, ob er dein Raumschiff gerammt hat. Darüber hinaus kannst du auch noch rel. bequem am Anfang deines Codes ein Array an Steinen erzeugen.

In code übersetzt sähe dies dann wie folgt aus:

Code:
		public void lookup(int ship_x, int ship_y, int ship_w, int ship_h) {
			int current_x, current_y;
			for(current_x=this.s_x, current_y=this.s_y; current_x<this.s_x+this.s_width; current_x++)
				if(current_x>ship_x && current_x<(ship_x+ship_w) && current_y>ship_y && current_y<(ship_y+ship_w))
					looser_screen(myGraphics);
			for(current_x=this.s_x, current_y=this.s_y+this.s_height; current_x<this.s_x+this.s_width; current_x++)
				if(current_x>ship_x && current_x<(ship_x+ship_w) && current_y>ship_y && current_y<(ship_y+ship_w))
					looser_screen(myGraphics);
		}

Die Methode lookup könntest du theoretisch in eine Klasse "Stein" implementieren. Diese bräuchte als Argumente lediglich die aktuelle Positioin deines Schiffes (ship_x, ship_y) sowie dessen Breite und Höhe (ship_w, ship_h). Die Feldvariablen this.s_x, this.s_y sowie this.s_width und this.s_height geben dabei die Koordinaten sowie die Breite des Gegners an. Damit stehen dir alle Werte zur Verfügung, um eine mögliche Kolision abzufragen. Du müsstest alleine nur noch darüber nachdenken, ob du in die obige Methode noch zwei weitere Schleifen implementierst, um eine Kolision an der linken und an der rechten Seite abzufragen. Bei mir ging es aber auch ohne den Mehraufwand.

Noch viel Erfog bei deinem kleinen Projekt
Zaphod
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Kollision Spiele- und Multimedia-Programmierung 5
A Kollision funktioniert nicht richtig bei zu schneller Geschwindigkeit des Spielers Spiele- und Multimedia-Programmierung 0
N Kollision von zwei ImageIcons Spiele- und Multimedia-Programmierung 8
D Kollision funktioniert unten aber nicht oben Spiele- und Multimedia-Programmierung 4
J Kollision (libgdx) Spiele- und Multimedia-Programmierung 2
S Kollision Spiele- und Multimedia-Programmierung 2
J Kollision genau erkennen mit intersects Spiele- und Multimedia-Programmierung 27
K a* kollision der einheiten Spiele- und Multimedia-Programmierung 3
S Probleme bei Breakout - Brick kollision Spiele- und Multimedia-Programmierung 2
F Rechteck Kollision Spiele- und Multimedia-Programmierung 10
H 2- D Kollision Spiele- und Multimedia-Programmierung 14
C Zeldaklon Problem mit Wand-Kollision Spiele- und Multimedia-Programmierung 8
O Kollision Polygon und Rechteck Spiele- und Multimedia-Programmierung 2
S Pacman Kollision von Münzen und Mauern Spiele- und Multimedia-Programmierung 11
P Gridpane Kollision Spiele- und Multimedia-Programmierung 3
Androbin Kollision zwischen Raster und Nicht-Raster Spiele- und Multimedia-Programmierung 2
L Kollision soll nur an oberer Seite (Breite) möglich sein Spiele- und Multimedia-Programmierung 6
Hercules Kisten Kollision Spiele- und Multimedia-Programmierung 2
S 3D-Kollision mit zwei ArrayLists Spiele- und Multimedia-Programmierung 7
T Pixelgenaue Kollision Spiele- und Multimedia-Programmierung 5
A LWJGL 3D Objekte Kollision Spiele- und Multimedia-Programmierung 3
S Kollision tile-based 2D Plattformer Spiele- und Multimedia-Programmierung 2
D Greenfoot Kollision Spiele- und Multimedia-Programmierung 5
D Kollision verhindern Spiele- und Multimedia-Programmierung 2
R Frage zur Kollision Spiele- und Multimedia-Programmierung 5
Maxim6394 [Java3D] Probleme bei Kollision Spiele- und Multimedia-Programmierung 7
Kr0e Kollision zweier Kugeln... Wo ist Newton ?? Spiele- und Multimedia-Programmierung 9
C Kollision zwischen 2 Kreisen Spiele- und Multimedia-Programmierung 3
Helgon Kollision von jeder Seite des Blocks Spiele- und Multimedia-Programmierung 3
Fab1 Kollision die 100ste Spiele- und Multimedia-Programmierung 5
D Jump'n'run Kollision bei Blöcken Spiele- und Multimedia-Programmierung 10
P PingPong Spiel - Kollision Spiele- und Multimedia-Programmierung 2
C Bitmaske und Kollision Spiele- und Multimedia-Programmierung 2
J Spielprogrammierung mit bewegung und kollision Spiele- und Multimedia-Programmierung 24
S Kollision Kreis Rechteck Spiele- und Multimedia-Programmierung 8
aze Java3D: Gegenstände aufeinander zubewegen ohne Kollision Spiele- und Multimedia-Programmierung 4
baddestpoet pixelgenaue Kollision Spiele- und Multimedia-Programmierung 4
S Kollision in 2D Spiele- und Multimedia-Programmierung 12
B Gedrehte Rechtecke Kollision Spiele- und Multimedia-Programmierung 4
J Kollision mit Block (Wand) Spiele- und Multimedia-Programmierung 11
C Kollision in Java3D Spiele- und Multimedia-Programmierung 4
J Kollision von Objekten Spiele- und Multimedia-Programmierung 7
M Asteroids Clone: Kollision zwischen Schuss und Feind Spiele- und Multimedia-Programmierung 13
F Bewegung/Kollision von Objekten auf Tastendruck Spiele- und Multimedia-Programmierung 6
Z Kollision Spiele- und Multimedia-Programmierung 3
N Kollision abfragen Spiele- und Multimedia-Programmierung 3
K Sprites / Kollision Spiele- und Multimedia-Programmierung 3
S Jump'n'Run: Probleme mit Kollision Spiele- und Multimedia-Programmierung 13
N Minecraft Frage für einen Minecraft Server Spiele- und Multimedia-Programmierung 2
Drachenbauer Speicher-Tool für ein Spiel schreiben Spiele- und Multimedia-Programmierung 13
B Deepmind Poker Bot für PokerStars konfigurieren? Spiele- und Multimedia-Programmierung 2
G Minecraft PlayerBot (Listener Thread für jeden Spieler?) Spiele- und Multimedia-Programmierung 3
K Wie bekomme ich eine Transition für alle Objekte zum stoppen? Spiele- und Multimedia-Programmierung 1
E Organisation für Game Spiele- und Multimedia-Programmierung 1
Excess Ballerfisch für Android Spiele- und Multimedia-Programmierung 3
coolian ich brauche irgendeine gui lib für lwjgl2 Spiele- und Multimedia-Programmierung 51
krgewb Anderer Algorithmus für Bounding Box Spiele- und Multimedia-Programmierung 9
MiMa MP3 Dateien für Metadaten abgleichen Spiele- und Multimedia-Programmierung 0
Freshy Bot für Discord Spiele- und Multimedia-Programmierung 61
R Ideen für die Backend-Entwicklung eines Games gesucht Spiele- und Multimedia-Programmierung 8
G Mikrophon-/Audiosteuerung für einen Character Spiele- und Multimedia-Programmierung 1
P Tennis- Spielstand- Zähler für Schule programmieren Spiele- und Multimedia-Programmierung 6
M Logik für ein Quiz Spiele- und Multimedia-Programmierung 7
P Hilfe für Seminar Arbeit Spiele- und Multimedia-Programmierung 9
MiMa Metadaten für Multimedia Daten ermitteln Spiele- und Multimedia-Programmierung 4
G Übungsprogramm für Matheaufgaben Spiele- und Multimedia-Programmierung 1
F Algorithmus für bessere Kollisionsabfragen Spiele- und Multimedia-Programmierung 10
S Bilder Für Schachfiguren Spiele- und Multimedia-Programmierung 14
Timo_neu_in_java Suche etwas einfaches für Anfänger Spiele- und Multimedia-Programmierung 6
I Minecraft Suche Plugin Developer für Minecraft Netzwerk! Spiele- und Multimedia-Programmierung 2
S GUI erstellen für Text Adventure Spiele- und Multimedia-Programmierung 4
S Eigene Klasse vec_t - 3 oder 4 Einheiten für x, y, z und w Spiele- und Multimedia-Programmierung 11
R Vererbbarer GameLoop für Engine Spiele- und Multimedia-Programmierung 14
J Vektor für Gravitation erzeugen Spiele- und Multimedia-Programmierung 34
I Minecraft: Craftingrecipe für Braustand ändern Spiele- und Multimedia-Programmierung 9
Z Minimax-Algorithmus für TicTacToe Spiele- und Multimedia-Programmierung 5
H KI für Spiele Spiele- und Multimedia-Programmierung 1
S Pssende Datenstruktur für ein Netz Spiele- und Multimedia-Programmierung 5
S MouseEvents für Sprites Spiele- und Multimedia-Programmierung 3
I Spectator Modus für Spiel ähnlich zu Terraria Spiele- und Multimedia-Programmierung 8
K Bestes Bildformat für Spielegrafiken und deren Einbindung in Java Spiele- und Multimedia-Programmierung 2
J mehrere Listener für einen Button / Label Spiele- und Multimedia-Programmierung 1
C Port umleiten: lesen und schreiben für MCServer-Client über Skype Spiele- und Multimedia-Programmierung 0
J Musik Bibliothek für GUI Spiele- und Multimedia-Programmierung 7
B Hauptmenü für Spiel Spiele- und Multimedia-Programmierung 1
R Ratschlag für 2D-3D Engine für die Spieleentwicklung gesucht Spiele- und Multimedia-Programmierung 4
Androbin KI für Verfolgung im Raster Spiele- und Multimedia-Programmierung 2
A Bot für Browsergame Spiele- und Multimedia-Programmierung 2
H Tutorials für Fortgeschrittene 3D-Anwedungen Spiele- und Multimedia-Programmierung 2
lord239123 suche Graphiker für ein Pokemon-Spiel Spiele- und Multimedia-Programmierung 6
Furtano Vektoren für Bewegung für eine 2D-Simulation Spiele- und Multimedia-Programmierung 3
T Sinusgenerator für eine Hp Spiele- und Multimedia-Programmierung 8
J Menü für Snakespiel in einzelnem JFrame Spiele- und Multimedia-Programmierung 5
M Minecraft weitere Java Entwickler für minecraft projekt gesucht Spiele- und Multimedia-Programmierung 0
Guybrush Threepwood Ketzerische Frage: Opus-Codec für Java Spiele- und Multimedia-Programmierung 14
L Hilfe bei Klassendesign für Spiel Spiele- und Multimedia-Programmierung 2
N Animationen für ein 2D game Spiele- und Multimedia-Programmierung 6
S Aufbau für 2D Spiele Spiele- und Multimedia-Programmierung 7
L Client für ein Browsergame Spiele- und Multimedia-Programmierung 21
Devil0s Swing Elemente für Inventar? Spiele- und Multimedia-Programmierung 9

Ähnliche Java Themen

Neue Themen


Oben