# Buggy Kollisionsabfrage



## gieser (5. Jul 2007)

Hi Leute,
ich hab vor ebbes längerer Zeit mal ein Flash-Game im internet gefunden und wollte das jetzt nachprogrammieren. Mein Problem ist vor allem, dass die Kollisionsabfrage bisserl buggy ist. Mit buggy meine ich, dass manchmal die Bubbles einfach durchfliegen und nicht explodieren und ich kann mir nicht erklären warum das so ist... Vielleicht kann mir ja einer sagen warum?
*Der relevante Code ist in der "BubbleList" und dort die Methode checkCollision()*... könnte das eventuell am Antialiasing liegen?
Sourcecode ist in der JAR verpackt. Die JAR ist so groß, weil das Spiel auch Sounddateien im Waveformat benutzt, bin noch nicht dazugekommen JLayer einzubauen...


Download BubbleCrisis 0.3


Ach ja noch en Screenshot für euch, das Problem sieht ma leider nicht, is grade ned aufgetreten -.-






Spielregeln: Klick an einem Punkt um die erste Explosion zu starten. Um ein Level zu bestehen musst du eine mindestanzahl an Bubbles zerstören. Das Level ist vorbei, wenn alle Explosionen vom Bildschirm verschwunden sind. Du kannst jedes Level beliebig oft wiederholen, wenn du es nicht schaffst.


ps.: ich kann auch nur den relevanten code posten, aber dann entgeht euch die sucht


----------



## Quaxli (6. Jul 2007)

Ruckelt bei mir ziemlich. Die Dinger explodieren teilweise auch, wenn kein Kollision stattfindet.

Ich hab' auch keine Lust alle Klassen zu durchsuchen, also poste mal die relevante Stelle.


----------



## Quaxli (6. Jul 2007)

Noch eine Anmerkung zum Thema "ruckeln":

Grundsätzlich hätte ich eine Move-Methode (wie einige andere auch) ja in die Klasse Bubbles gepackt, aber sei's drum.  Aber folgender Code ist u. U. für das Ruckeln (mit)verantwortlich:


```
curBubble.setPosX(posX+moveX);
                curBubble.setPosY(posY+moveY);
```

Damit setzt Du nämlich voraus, daß jeder Durchlauf Deiner Game-Routine gleich lange ist. Dieser variiert aber abhängig davon, welche Methoden aufgerufen werden. 
Um das zu vermeiden würde ich Dir folgende Vorgehensweise vorschlagen:

- innerhalb Deiner Game-Routine mißt Du mit System.currentTimeMillis(), wie lange der letzte Loop gedauert hat
- die Bewegung erfolgt dann in Abhängigkeit der benötigten Zeit, also z. B.: 


```
curBubble.setPos((posX+moveX)/delta));
```

Die Bewegungswerte müßtest Du dann u. U. noch anpassen. Dies hat aber den Vorteil, daß die Darstellung der Bewegung gleichförmiger wahrgenommen wird.


----------



## gieser (10. Jul 2007)

habe den fehler mittlerweile gefunden... es waren ein paar fehlende Klammern *arghs*

des weitern werde ich deine vorschläge versuchen umzusetzen  die meisten sachen der move()-Methode sind jetzt auch in die Klasse Bubble gewandert


----------



## Gast (11. Jul 2007)

nach lvl 5 geht es irgendwie nicht weiter...
könntest du dann irgendwann den source nochmal posten? wäre klasse!


----------

