Android Libgdx und Kollisionserkennung
Für meine android-Spiel, das ich verwenden, Libgdx und ich erkennen die Kollision zwischen der Bob (Omino) und Pflanze (Pianta) mit diesem code, der gut funktioniert :
Assets.class
pianta = new Animation(0.5f,new TextureRegion(items, 160, 384, 64, 96),
new TextureRegion(items, 224, 384, 64, 96));
Pianta.class
public class Pianta extends GameObject {
public static final float PIANTA_WIDTH = 2;
public static final float PIANTA_HEIGHT = 3;
public static float stateTime;
public Pianta(float x, float y) {
super(x, y, PIANTA_WIDTH, PIANTA_HEIGHT);
stateTime = 0;
}
public void update(float deltaTime) {
stateTime += deltaTime;
}
}
World.class
Pianta pianta1_0 = new Pianta(x+10,2.2f);
piante.add(pianta1_0);
private void collisionPiante(){
int len = piante.size();
for(int i=0;i<len;i++){
if(OverlapTester.overlapRectangles(piante.get(i).bounds,omino.bounds)){
omino.ominoMorto();
}
}
}
WorldRender.class
private void renderPiante() {
TextureRegion keyFrame;
int len = world.piante.size();
for(int i = 0; i < len; i++) {
Pianta pianta = world.piante.get(i);
keyFrame = Assets.pianta.getKeyFrame(Pianta.stateTime, Animation.ANIMATION_LOOPING);
batcher.draw(keyFrame,pianta.position.x, pianta.position.y, 2, 3);
}
}
aber wenn du dir das Bild 2 unten, Sie können sehen, dass Bob schlagen aber es gibt keine Kollision mit Stein (Pietra) !!
Dies ist der code :
Assets.class
pietra1 = new TextureRegion(items,288,416,128,64);
Pietra.class
public class Pietra extends GameObject {
public static float PIETRA_WIDTH = 4;
public static float PIETRA_HEIGHT = 2;
public Pietra(float x, float y) {
super(x, y, PIETRA_WIDTH, PIETRA_HEIGHT);
}
}
World.class
Pietra pietra1_0 = new Pietra(x+25,2.2f);
pietre.add(pietra1_0);
private void collisionPietre(){
int len2 = pietre.size();
for(int l=0;l<len2;l++){
if(OverlapTester.overlapRectangles(pietre.get(l).bounds,omino.bounds)){
omino.ominoMorto();
}
}
}
WorldRender.class
private void renderPietre() {
int len = world.pietre.size();
for(int i = 0; i < len; i++) {
Pietra pietra = world.pietre.get(i);
batcher.draw(Assets.pietra1,pietra.position.x, pietra.position.y, 4, 2);
}
}
OverlapTester
public class OverlapTester {
public static boolean overlapRectangles (Rectangle r1, Rectangle r2) {
if (r1.x < r2.x + r2.width && r1.x + r1.width > r2.x && r1.y < r2.y + r2.height && r1.y + r1.height > r2.y)
return true;
else
return false;
}
Kann mir jemand sagen, warum die Kollision mit der Anlage funktioniert einwandfrei und mit Stein Bob Treffer, auch wenn es keine Kollision? wie Sie sehen können, der code ist der gleiche, der einzige Unterschied ist, dass die pflanze ist ein animiertes Objekt, während der Stein nicht.
InformationsquelleAutor MisterX_Dev | 2012-11-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Überprüfen Sie Ihre OverlapTester. Dies ist, wie Libgdx hat es in der Rectangle.java Klasse:
InformationsquelleAutor eyespyus
Wenn ich das richtig verstanden overlapRectangles Prüfungen der Fall, wenn Rechteck ist völlig im inneren. Es ist nicht wahrscheinlich, was Sie wollen.
LibGDX hat spezielle Funktionen für die Kollisionskontrolle. Bitte überprüfen Sie die http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/Intersector.html
Ich habe auch versucht, intersector aber auch nicht funktioniert 🙁 das problem ist das gleiche und auch. Ich erkannte, dass die Anlage funktioniert, weil es ist groß, 2f, aber wenn es zu groß 3f Tat Sie auch nicht !!!
yep. ich erneut geprüft, Rechtecke Kollision. es scheint in Ordnung zu sein... hmmm... benutzt Du GameObject-Klasse aus SuperJumper Beispiel. Richtig? Hat Ihr Objekt bewegen? Wenn ja, dann prüfen, dass die Grenzen ordnungsgemäß aktualisiert werden, weil in dem code, den ich gefunden habe im internet (java2s.com/Open-Source/Android/Game/libgdx/com/badlogicgames/...) Grenzen in der initialisiert nur einmal im Konstruktor. Wenn Sie Objekt-Koordinaten-Grenzen gleich bleibt. Kann es das Problem verursachen?
Die gebundene update in Bob.classhttp://www.java2s.com/Open-Source/Android/Game/libgdx/com/badlogicgames/superjumper/Bob.java.htm für pflanze und Stein sind Sie statisches Objekt
Ok. Wenn es so funktioniert dann ist es in Ordnung. Haben Sie versucht zu drucken Rechteck Koordinaten, oder überprüfen Sie Sie im debugger?
InformationsquelleAutor son of the northern darkness
Können Sie ersetzen möchten Ihre OverlapTester mit dem Rechteck-Helfer-Funktion enthält. Zum Beispiel:
Weltklasse
Werden kann:
InformationsquelleAutor John Cipponeri