Ich brauche deinen Ratschlag für die beste Möglichkeit, ein scrollbares Spielfeld in einem einfachen Spiel zu implementieren. Das Feld besteht aus mehreren Zeilen mit jeweils 9 Zellen in jeder Zeile. Die Reihen können im Laufe des Spiels dynamisch hinzugefügt und entfernt werden. Jede Zelle hat eine Ziffer und optional mehrere überlagerte Bilder, wie Auswahl, Auswahl über, Durchgestrichen usw. (siehe Bild unten). Der Benutzer sollte in der Lage sein, auf einzelne Zellen einer Zeile zu klicken, um die berührten Zellen auszuwählen / abzuwählen / zu kreuzen. Zu jedem Zeitpunkt im Spiel kann es 0 bis 3000 Zellen geben (0 bis etwa 333 Zeilen). Das Feld sollte sanft nach oben und unten scrollen.
Ich habe über eine ListView nachgedacht, bei der jede Zeile eine Zeile auf dem Feld ist. Auf diese Weise konnte ich während des Spiels dynamisch Zeilen hinzufügen / entfernen. Wie genau sollte ich jedoch eine Zeile implementieren: eine Bitmap, die eine Zeile darstellt, und dann, wenn der Benutzer sie berührt - die Koordinaten des Berührungsbereichs abrufen und herausfinden, welche Zelle betroffen ist, und dann darauf reagieren. Ist es möglich, die Touch-Koordinaten einer Zeile in ListView zu erhalten? Wenn nicht, sollte ich 9 Dummy-Bildplatzhalter in jeder Zeile platzieren und dann darauf reagieren, dass der Benutzer diese berührt? Was ist mit Leistung?
Oder sollte ich ein riesiges Bitmap / Canvas haben, das das gesamte Feld darstellt, es in eine ScrollView einfügen und dann alle Koordinaten berechnen und aktualisieren, wenn der Benutzer damit interagiert? Wird es schneller oder langsamer als das ListView?
Irgendwelche anderen Lösungen?
Ich bevorzuge es, ein "normales" App-Typ-Spiel zu sein, kein Loop-basiertes Spiel, da ich glaube nicht, dass ich wirklich 30 Mal pro Sekunde neu zeichnen muss.
Ich bin ziemlich neu in Android. Danke für Ihre Vorschläge.
Sie können diese Art von Setup schnell mit einer "Game Loop" / SurfaceView-Kombination ausführen. Das bedeutet keine ListView, nur benutzerdefinierte Zeichnung und Ereignisbehandlung. Glücklicherweise ist die Ereignisbehandlung nicht so schwierig und Sie werden später gewinnen, weil Sie viel mehr Kontrolle über die Benutzeroberfläche haben, als wenn Sie mit einer Reihe von benutzerdefinierten Ansichten und Layouts gegangen wären.
Ich würde das Tutorial von www.droidnova.com vermeiden, es verwendet HashMaps unnötigerweise, was Sie nur in der Leistung kostet.
So würde ich gehen:
Sie haben nun ein Raster mit Objekten, die auf Ihrem Bildschirm angezeigt werden. Jetzt möchten Sie die Anzahl der aktuell angezeigten Zeilen einschränken und einige Funktionen hinzufügen, um zu ändern, welche Zeilen sichtbar sind. Dies geschieht folgendermaßen:
newCurrentRow = (touch.y / canvas.height()) * boardSize;
zu. Das erfordert einige Feinabstimmungen, aber du kommst auf die Idee. Dieser Ansatz hat den Nachteil, dass nur eine ganze Reihe von Zeilen gleichzeitig angezeigt wird, sodass das Scrollen nicht reibungslos ist. Sie haben jedoch die vollständige Kontrolle über Ihre Arbeitsfläche und das, was Sie zeichnen. Mit ein wenig mehr Mathematik könnten Sie also einen reibungslosen Scroll-Mechanismus implementieren, der um eine Bruchzeilenhöhe in y-Richtung anstelle von ganzen Zeilen versetzt wäre.
Ich weiß nicht, ob Sie ein Spiel, wie Sie es beschrieben haben, mit guter Leistung erstellen können. Ich würde mich mit der grundlegenden Programmierung von Kacheln beschäftigen.
Aber durch die Vermeidung der Standard-Ansicht müssen Komponenten, die alle Logik selbst schreiben, ziemlich viel Arbeit erfordern. Dinge wie die Handhabung von "Klick" -Ereignissen in verschiedenen Reihen müssen anhand der Kachelposition relativ zur Spielkamera berechnet werden. Es gibt also viele neue Sachen, um zu lernen, Spiel auf einer niedrigeren Ebene zu entwickeln.
Sie müssen das Rendering Ihres Spiels auch selbst in die Hand nehmen, indem Sie eine Spielschleife entwickeln, die Ihre Kacheln ständig aktualisiert und aus einem Hintergrundthread zeichnet, um den Bildlauf / Status Ihres Spiels widerzuspiegeln. Weitere Informationen zu den Grundlagen einer Spielschleife erhalten Sie unter:
Wenn Sie mehr erfahren möchten, sollten Sie die folgenden Keynotes von android sehen.
Das gibt Ihnen einen sehr guten Einblick in die Entwicklung von Spielen für Andriod auf einem niedrigen Level, wo Sie die Performance optimieren können.
Tags und Links android