Beiträge von XoR

    Guten Abend zusammen. :)


    Ich versuche mich momentan an meinem ersten Android-Game, was bisher auch relativ gut klappt. Dennoch stehe ich nun vor einem Problem für welches ich eure Hilfe brauche.
    Vorerst allerdings, ein kurzer Überblick der Umsetzung, um nachgehende Verwirrung zu vermeiden :).


    Der Grundriss meines Spiels stellt eine Activity(A_SPGame) dar. Das Layout der Activity beinhaltet eigentlich nur ein ImageView, das den kompletten Bildschirm ausfüllt. Dieses ImageView dient mir dazu, die Bitmap, auf der ich alle Elemente des Spiels zeichne(also das fertige Frame), anzuzeigen.
    Die Acitvity selber verarbeitet alle Events wie z.B.: Scrollen, Touch usw. Zudem beinhaltet sie als Membervariable eine Instanz meiner GameKlasse(C_SPGame), welches das eigentliche Spiel darstellt.


    Meine Frage ist nun, wo ich am besten die GameLoop unterbringe? Intuitiv wäre onCreate() der Activity meine Wahl gewesen, doch dies scheint nicht wirklich zu funktionieren, denn wenn ich die GameLoop dort unterbringe, verarbeitet meine Activity plötzlich keine Events mehr (kein aufruf von onKeyDown, Scroll usw.). Zudem wird dann auch kein Frame angezeigt(vorher getestet ohne GameLoop, also ohne while-schleife, nur mit aufruf game.update() und game.present()).


    Activity(A_SPGame):


    Game(C_SPGame):


    Bedanke mich schon mal im Voraus!


    MfG XoR :)

    Das mache ich doch...
    Das Problem hierbei ist, dass ich eine bestimmte Funktion jede Sekunde(Schussinterval des Turmes) aufrufen muss.
    Ich kenne es so, dass man Funktuionen, die in bestimmten zeitlichen Intervalen aufgerufen werden sollen(was hier der Fall ist), mithilfe von Runnables und Handler zeitverzögert aufruft.
    Ich will mich natürlich nicht auf diesen Lösungsweg versteifen, bin selber noch ein Anfänger, was Android angeht, deshalb bin ich für jeden anderen Lösungsansatz offen :). Also immer her damit! :D


    MfG XoR

    WoW! Super Erklärung, könnten sich n paar ne Scheibe davon abschneiden :P
    Dennoch finde ich es eigentlich übertrieben, dass man diese Variablen zwingend als final deklarieren muss... man könnte ja immerhin mit try - catch arbeiten um das Problem zu umgehen.


    Nochmals danke für die super Erklärung!
    MfG XoR

    Erstmal danke für deine Antwort :)


    Ich dachte mir, dass es komfortabel wäre, wenn ich das in eine Run-Methode des Turmes packe, denn wenn ich es über die Gameloop aufrufe, habe ich keinen turm-spezifischen Interval mit dem der Turm schießt(z.B.: alle 0,75sek oder 1sek).


    Wenn sich einer noch fix die Arbeit auf sich nehmen möchte, mir zu erklären, warum denn die Variable die ich in der Run-Methode benutze final sein muss(Sinn erschließt sich mir noch nicht ganz)? :D


    MfG XoR

    Guten Abend allerseits.


    In meinem Towerdefense versuche ich gerade die Türme auf die Einheiten schießen zu lassen. um dies zu bewerkstelligen habe ich eine eigene Klasse Turm, welche als membervariable eine Liste hat (ArrayList), in der alle Einheiten sind, die sich gerade auf dem Spielfeld bewegen.
    Nun wollte ich der Klasse Turm auch noch eine Instanz der Klasse Runnable geben, die jede sekunde aufgerufen wird, um einen Schuss auf eine Einheit abzugeben. Damit ich prüfen kann, ob die Einheiten sich überhaupt in Reichweite befinden, wollte ich nun in der Runnable-Methode alle Elemente der Liste, in der die Einheiten stehen, durchgehen und prüfen, ob diese Einheiten sich in der Reichweite befinden.
    Wenn ich allerdings die Liste der Einheiten in der Runnable-Methode verwenden möchte, wird mir ein Fehler("EinheitenListe cannot be resolved or is not a field") angezeigt. Was mache ich falsch, bzw. was muss ich machen damit ich die Liste zur Überprüfung in der Runnable-Methode verwenden kann?


    MfG XoR

    Hallo zusammen :)


    Wiedereinmal benötige ich eure Hilfe im Bezug auf mein TowerDefense.
    Nachdem ich Scroll- und Zoomfunktion endlich bewerkstelligen konnte, bin ich nun auf ein unerwartetes Problem gestoßen.


    Zunächst benötigt ihr aber etwas Vorwissen:
    Die Scrollfunktion habe ich, wie bereits in anderen Threads erwähnt, über zwei Rects sowie eine Bitmap und die onDraw Methode von Canvas umgesetzt:


    Konstruktor der Map:


    Scroll-Methode der Map:


    onDraw-Methode der Map:

    Code
    //------====== Draw the bitmap on canvas, and finally on bitmapShow ======------
    	private void onDraw() {
    		
    		canvas.drawBitmap(bitmapRAM, srcRect, dstRect, null);
    	}


    Nun geht es darum, die ersten Gegner auf der Map spawnen zu lassen, was im prinzip auch funktioniert.
    Das Anzeigen der Gegner erfolgt sowie bei der Map durch zwei Rects und einer Bitmap. Das Canvas-Objekt bekommt beim instanzieren die Bitmap von der Map(bitmapShow) übergeben, sodass alle Bitmaps, die auf ihr gezeichnet werden, somit auf der Bitmap der Map(bitmapShow) gezeichnet wird(Zeile 10):


    Konstruktor:


    Der Gedanke dahinter war, dass somit in gewisser Weiße eine neue Bitmap "entsteht", auf der die Bitmaps der Gegner auf einer festen Position sind. Das hätte zur Folge, dass die Koordinaten der Gegner nicht vom Scrollen abhängig wären.
    zur Verdeutlichung: feste Position(Koordinate des Gegners bezieht sich auf die Map) doch leider bezieht sich die Koordinate des Gegners auf den Bildschirm(Verdeutlichung ).
    Gibt es irgent eine Möglichkeit, die Bitmap des Gegners auf die Bitmap der Map "festzunageln"? Dies würde mir die Synchronisation zwischen den Koordinaten des Gegners und den Koordinaten des Rects, das den Bildschirmausschnitt anzeigt, erspaaren.


    Ich hoffe, ich konnte mein Problem einigermaßen verständlich darstellen ^^


    MfG XoR

    Erstmal danke für deine Antworten.
    Das Verschieben der beiden Zeilen in die Callback behebt das Problem nicht ganz.Die Map wird noch nicht angezeigt, obwohl ich die Bitmap dann einem ImageView zuweise. Zudem hat nun das Scrollen einen Absturz zur Folge. Der Fehler wird hier in Zeile 80(GameView) angezeigt und wirft eine NullPointerException aus. Ich hab dann bischen rumprobiert, und festgestellt, dass wenn ich die Breite oder Höhe vom Canvas ausgeben will, nichts ausgegeben wird(evtl. hier der Fehler?).


    Hier noch meine Dateien:
    GameView:



    InstanceActivity:



    Vielen Dank schon mal im Voraus!



    MfG XoR

    Das Problem ist, dass es auf meinem Smartphone ohne probleme läuft...
    Die Fehler wurden an meinen DevAccount geschickt, und ich werde nicht ganz schlau aus der Fehlermeldung :D

    Habe 3Abstürze, bei denen eine java.lang.ClassCastException ausgeworfen wird. Die Quellmethode ist die Methode namens CompoundButton.onRestoreInstanceState().


    Hier noch den Stacktrace:



    Habe leider keine Ahnung, was hier der Fehler ist. Könnt ihr eventuell den Fehler grob eingrenzen?


    MfG XoR

    Hmm funktioniert noch nicht einwandfrei :(
    Android wirft immer eine NullPointerException raus(Zeile 69).


    Hier der Code:



    Weiß nicht genau, was hier den Fehler verursacht. Habe es nach dem Beispiel aus deinem Link gemacht. Hoffe ihr seht, was ich nicht sehe :)



    MfG XoR

    Guten Abend allerseits.


    Ich habe mir für mein TowerDefense eine kleine Scrollfunktion gebastelt, die wie folgt funktioniert:
    Ich lade eine Bitmap und "stanze" mir mit einem Rect den Teil aus der Bitmap, den ich auf dem Bildschirm anzeigen will, und zeichne es dann mithilfe von canvas.drawBitmap(...) auf den Bildschirm.


    Hier zur verdeutlichung:

    Code
    //The rect that gets the part of the bitmap
    		srcRect = new Rect(Math.round(xPos),
    						   Math.round(yPos),
    						   Math.round(xPos+canvas.getWidth()-zoomlevel),
    						   Math.round(yPos+canvas.getHeight()-zoomlevel));
    		//The rect that is going to be displayed
    		dstRect = new Rect(0, 0, canvas.getWidth(), canvas.getHeight());
    		//Draw the displayed part of the bitmap on canvas
    		canvas.drawBitmap(bitmap, srcRect, dstRect, new Paint());


    Mein Problem ist nun, dass man anscheinend pro Activity entweder nur mit .xml dateien arbeiten kann(also layouts), ODER wie hier zu sehen mit canvas. Da mir aber die bereits vorgefertigten Elemente wie beispielsweise Buttons oder LinearLayouts das Designen der App ungemein erleichtern, wollte ich wissen, ob man den Teil der Bitmap, den ich anzeigen will, auch irgentwie als ImageView anzeigen lassen kann, anstatt mit canvas zu zeichnen? Denn dann könnte ich auch die Standardelemente wie Buttons verwenden.


    Hoffe ihr wisst da genaueres :)



    MfG XoR

    Habe mir die Tutorials mal angeschaut, doch anscheinend hat man da immer eine minimum Scrolldistanz von einem Block(in dem Spiel).
    Daher habe ich versucht es selbst umzusetzen, was im Prinzip funktioniert:
    Ich habe die eine eigene Klasse erstellt, die vom SurfaceView erbt(aus Panjutorials). Diese lass ich dann meine Map(ein teil davon) anzeigen.
    In meiner Activity habe ich dann einen GestureDetector erstellt, der die onFling-Methode aufruft, wenn der User über den Bildschirm "wischt".
    Anschliesend berechne ich die zurückgelegte X- und Y-Koordinate, und verschiebe mit hilfe des SurfaceViews meine map, indem ich X- und Y-Margin setze.


    Hier der Code zur verdeutlichung:
    (die onDraw-Methode des SurfaceViews:)



    onFling-Methode des GestureDetectors:



    Mein Problem ist nun folgendes:
    Der neue sichtbare Teil der Map wird erst dann gezeichnet, wenn ich den Finger wieder runternehme vom Display. Wenn ich also den Display an Punkt1 berühre, aber nicht vom Display wieder runtergehe, dann ca. 100pixel nach links "wische", passiert noch gar nichts. Erst wenn ich dann meinen Finger herunternehme, wird die Map neu ausgerichtet und gezeichnet. Dass macht das Ganze etwas "unflüssig" was ich natürlich beheben will.


    Hat irgenteiner eine Idee? Oder gehe ich das Ganze falsch an?


    EDIT:


    Problem behoben. Hatte die Methode onScroll total übersehen ^^

    Danke für deine Antwort. Habe die Tutorials gefunden, welche die Frage nach dem Zoomen und Scrollen leider nicht beantworten. Kennst du eventuell ein paar gute Tutorials, welche sich auf Zoomen und Scrollen beziehen?

    Guten Abend allerseits.


    Ich bin gerade drauf und dran mir ein kleines TowerDefense zu basteln, doch mir stellen sich zwei Probleme in den Weg.


    Problem1:
    Da ich natürlich nicht die ganze Map in den Bildschirm zwengen will, brauche ich eine Funktion, die es mir erlaubt, über die Map bzw. das ImageView zu Scrollen. Leider findet man im Internet nur sehr wenig dazu, weswegen ich eure Hilfe brauche. Ich nehme mal an, dass man nicht zwei ScrollViews (eine Horizontal, die andere Vertikal) übereinander legt (erscheint mir umständlich)?


    Problem2:
    Ich möchte dem Benutzer die möglichkeit geben, näher an das Geschehen heran zu zoomen, oder weg zu zoomen. Deshalb benötige ich eine Zoomfunktion. Da aber Informationen oder vernünfigte Tutorials zu diesem Thema eher rar gesät sind, benötige ich hierbei ebenfalls eure Hilfe :D .


    Vielleicht hab ich ein paar gute Tutorials übersehen, die ihr mir posten könnt.


    Freue mich auf eure Antworten!
    MfG XoR

    Danke für den Report. Auf die Idee, dass man über die Farbauswahl wischt, bin ich irgentwie gar nicht gekommen, warscheinlich zu banal^^. Sollte mit dem nächsten Update (wieder ca. 1Stunde) kein Problem mehr darstellen :)



    MfG XoR

    Der Button zu den Einstellungen sollte eigentlich auch nur noch bei der Übersicht erscheinen.
    Das drücken des Zurück-Button hatte bei meinem Smartphone keinen Absturz zur Folge, habe aber dennoch was geändert, was das Problem beheben sollte.


    Update wurde wieder aufgepspielt, sollte wieder in ca. 1 Stunde zum download bereit stehen.
    Ich entschuldige mich für die Fehler... ist nun mal meine erste App^^, find es aber super, dass du mir ständig feedback gibst! :)



    MfG XoR

    Danke für die Daten, killphil75. Habe es nun mit den Einstellungen emulieren lassen, bin aber auf keinen Fehler gestoßen. Zudem ist es eigenartig, dass im DevAccount keinerlei Abstürze angezeigt werden.


    Was das Update angeht: wurde soeben hochgeladen, sollte in ca. 1Stunde dann auch zum download bereit stehen.



    MfG: XoR



    EDIT:


    Vielleicht wäre der ein oder andere Galaxy S3 Besitzer so freundlich bischen mit dem Stundenplan rumzuprobieren um ggf. den Fehler zu bestätigen. Falls der Fehler existiert, bitte genau schildern was passiert ist und was ihr gemacht hab. Danke :)

    Sooo, habe leider die erste Meldung über einen Absturz beim erstellen des Stundenplans mit dem Samsung Galaxy S3. Leider liegen mir keinerlei nähere Informationen vor, was es sehr schwierig macht, den Fehler zu finden und somit zu beheben.
    Gibt es irgenteine Möglichkeit, Kontakt zu personen herzustellen die einen Kommentar im PlayStore hinterlassen haben?


    Eine weitere alternative wäre meine App auf dem Emulator, welcher das Galaxy S3 simuliert, laufen zu lassen. Nun aber meine Frage, wie schaffe ich es, dass der Emulator das Galaxy S3 simuliert?


    Hoffe auf schnelle Antwort.
    MfG XoR



    PS.: Update wegen den Farben usw. wird warscheinlich heut hochgeladen.