Anstatt Activity zu starten stürtzt App ab

  • Hi Leute,
    Ich habe eine Game Activity in der ein Background vorhanden ist der z.B. 3840*2400 groß ist. Dieses Bild hab ich erstellt und wollte nun um das ganze hinterher auf dem Tablet benutzen zu können einen horizontalen und einen verticalen Scroll einbauen.
    Der XML Code sieht folgendermaßen aus:




    Etwas anderes existiert in der Activity noch nicht. Wenn ich diese aber nun starten will, wird die App ohne Fehlermeldung geschlossen.
    Weiß jemand woran das liegen kann?

  • Hi,
    and.dev : Stimmt eine out of memory ist da ganz oben doch bei gewesen, aber danach kamen ca. 100 Debug meldungen und da ist eine Zeile untergegangen... Wie geh ich nun damit um?


    killphil75: Ja genau das versuche ich... Wieso ist das bei Android nicht möglich/blöd umzusetzen? Wenn ja wie soll ich die Karte dann aufbauen? Weil von der Fläche her müsste die schon in dem Bereich liegen um das Spielfeld unterzukriegen.

  • Zitat

    Wie gesagt es gibt keine Fehlermeldung. Die App stürtzt nicht wirklich ab, sondern wird geschlossen und ich bin wieder auf dem Homebildschirm des Emulators.

    Wie gesagt: schau halt ins Logcat, da wird schon stehen warum deine App beendet wurde.


    Zitat

    Wieso ist das bei Android nicht möglich/blöd umzusetzen?

    Wer hat denn gesagt, das sei nicht möglich?
    Der Kollege hat ganz richtig angeregt, Tilemaps zu verwenden.


    Was du da versuchst, ist ein 36.864.000 Bytes großes Bild darzustellen, und so viel Speicher (zusätzlich) wird der Emulator deiner App nicht zugestehen - das wäre jedenfalls meine Vermutung, solange du nicht in Logcat geschaut hast.


    Abgesehen davon wage ich mal vorsichtig zu bezweifeln, das man zwei ScrollViews einfach so funktionierend ineinander schachteln kann (also dann beide noch funktionieren).
    Aber da das ja hoffentlich nur ein Test sein sollte, können wir dieses Thema vorerst ignorieren ;)

  • Hi erstmal danke für deine Hilfe,
    im Prinzip ist das ein Test, aber es bleibt keiner weil irgendwann ist es mehr als ein leeres bild mit einer bestimmten Größe, sondern der Hintergrund in Form einer Karte, also bitte nicht ignorieren.
    Ich hatte den Kommentar schon geändert im Logcat steht was du vermutet hattest.
    Dann ändert sich meine Frage, es soll der hinterste Hintergrund einer Spielfläche werden, auf der später Views so verändert werden das es aussieht als würden Figuren "laufen". Ist das mit diesem Anfang überhaupt möglich, oder versuch ich ein Kampf gegen die Windmühlen? :P

  • Anti_ios


    Irgendwo hier im Forum haben wir das schon mal besprochen, wie das mit den Tilemaps funktioniert... am besten mal nach Tilemap suchen
    Ebenso solltest du die Sache mit den Scrollviews vergessen, das wird so nicht funktionieren. Sag doch lieber noch mal genau was du vorhast, da findest man sicherlich schneller einen Ansatz.



    Grundsätzliches zu einer Tilemap.


    -> in einer Grafik werden alle grafischen Elemente einer Map zwischen gespeichert. Der Aufbau erfolgt hierbei oft Blockweise, weil man das ganze besser mathematisch handeln kann. Auch das "kopieren" auf den Canvas macht blockweise mehr Sinn.


    Grafisches Beispiel von google: http://www.swingswingsubmarine…0/11/Woodland_Tileset.png


    Hier sind es zum Beispiel Quadrate 32x32. Die Teile werden nun durchnummeriert und mit koordniaten versehen.


    1 = Erde = 0,0 (0 Spalte, 0 Zeile)
    2 = wasser = 1,0 (1 spalte, 0 Zeile)
    3 = Feuer = 2,0 (2 Spalte, 0 Zeile


    ect pp.


    Deine eigentliche Spielmap (3840*2400 ) wäre somit 240x 150. Was du jetzt nur noch benötigst ist ein einfaches Array int[x,y,objekt]


    int[][] map = new int[240][150];


    Der eigentliche Wert der gespeichert wird entspricht dem eigentlichen Map Objekt. Wir reden hier immer noch nur über die MAP.
    Andere Objekte welche mit Dir und der Spielwelt interagieren, sollte man seperat ablegen. (ebenfalls Array oder List)


    Ok jetzt habe ich eine riesige Map als Ints, was nun.


    -> Darstellen:


    Um performant zu bleiben, zeigt man immer nur den Spielabschnitt welche gerade "belaufen" wird - Also im Grunde deine Bildschirmgrösse.


    nehmen wir als Beispiel 800x480 (typisch Android Handy) = 50 x 30 Blöcke a 32x32 Pixel. Für das Scrolling muss du disesen sichtbaren Ausschnitt auf deiner Riesenmap nur "verschieben" und holst Dir immer die jeweiligen Daten aus dem Array zum anzeigen.


    schematisch sieht das dann so aus.


    --------------------------------------------------------------------|
    |
    |
    | |--------------------|
    | | sichtbarer Teil |
    | |--------------------|
    |
    |
    |
    |------------------------------------------------------------------|


    Du musst das Scrolling nur noch "relativ" zu deiner Spielfigur und zu der Map berechnen.


    -> Prüfen Koordinaten der Spielfiguren (Kollisionen? Verschiebung weiter möglich oder Map Ende?)
    -> Verschiebe Koordinaten Mathematisch
    -> Zeichne Map neu
    -> Zeichne ander bewegte Spielobjekte neu (Spieler, gegener ect pp)
    -> Zeichne "onTopElemente" (Punkte, Zeit, Button)


    -> thats it.

  • Hi,
    danke für die ausführliche Hilfe, werde mich jetzt erstmal in Tilemaps einlesen.
    Das Problem warum ich die Scrollviews hatte besteht aber darin das der User in der Lage sein soll frei zu scrollen während er am Zug ist, um zu sehen was die anderen machen.

  • Zitat

    Das Problem warum ich die Scrollviews hatte besteht aber darin das der User in der Lage sein soll frei zu scrollen während er am Zug ist, um zu sehen was die anderen machen.

    Das wird ja durch dieses Konzept nicht ausgeschlossen; berechne den sichtbaren Ausschnitt in dem Fall einfach nicht nach der Postion seiner Figur (oder nur initialisierend, also wenn Spieler A am Zug ist, scrollt die Map automatisch so, das Spieler A seine Figur sehen kann), sondern implementiere zB Controls zum Springen von einer Figur zu nächsten (dann muss der Spieler nicht suchen) oder verwende Wischgeseten zur Manipulation des sichtbaren Bereiches.

Jetzt mitmachen!

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