2D Kolissions Erkennung Problem

  • Aloha android-developers Community,


    Ich beschäftige mich seit einiger Zeit mit Java und Android und hab bin jetzt dabei ein kleines 2D Android Spiel zu entwickeln.
    So
    weit so gut, das Spiel besteht im wesentlichen daraus, dass der Spieler
    ein Objekt(character) lenkt und einem Anderem Objekt(Sprite) ausweichen
    muss. also sehr einfach.


    Zum Laufen hab ich schon recht viel
    bekommen: Layout,Musik, Automatische Bewegung von Sprite, interaktive
    Bewegung von Character,usw.


    Nun das Problem: Die Kolissions Erkennung


    Jetzt denken einige bestimmt, wie einfach:
    jedem Objekt ein Rechteck zuordnen und per intersect-Methode kolissionen überprüfen...
    die Kolissionerkennung hab ich dabei in einen extra Thread ausgelagert.


    So hab ich es auch gemacht, aber es funktioniert nicht wie gewollt.
    Das Problem liegt vermutlich daran:



    [Blockierte Grafik: http://s14.directupload.net/images/140520/56bi53o9.jpg
    Intersect zwischen Character(orange) und Sprite(gruen) wird ausgeführt und Kolission erkannt;
    KolissionThread führt aus:



    handir ist der Handler, der bei Kolission die GameOver Activity startet
    .
    er führt aus:


    Soweit so gut, Kolission erkannt, Intent gesendet und Gameover gestartet....
    Nur
    brauch der Intent dermaßig lange(1,5s) um die Activity zustarten, dass
    es dazu kommt das trotz Kolission, das Bild erneut gezeichnet wird:


    [Blockierte Grafik: http://s14.directupload.net/images/140520/evse7b7b.jpg]


    Es entsteht also eine überlappung, die sehr schlampig wirkt.


    das
    komische: bei einer kollision wird der GameLoopThread, der für das
    aufrufen der ondraw Methode der SurfaceView zuständig ist gestoppt(
    siehe oben "GameLoopThread.setRunning(false);"), dennoch wird es noch
    ein letztes mal gezeichnet.


    ich weiß nicht was ich noch anders
    machen kann, wenn bei einer Kolission GameLoopThread.sleep() als erstes
    aufgerufen wird, funktioniert die Kollision tadelos, wenn jedoch die
    Sleep Zeit vorbei ist und der Intent gesendet wird entsteht wieder das
    bekannte Problem des weiterzeichnens.


    Ich hoffe das war nicht zu verwirrend, zum besseren Verständniss hier:


    der Code des GameLoopThreads:


    und der SurfaceView mit dem Canvas:


    Ich vermute das man das SurfaceView irgendwie dazubringen müsste sofort stehenzubleiben und nichts mehr zu zeichnen,aber egal...


    Hat jemand eine Idee wie man das Problem lösen kann? :D


    Grüße Jan

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!