Android Android Game

Trunk

Mitglied
Hallo!

ich habe vor kurzem ein kleines Android-Spiele-Projekt in Angriff genommen, und es kamen mir zwei Fragen auf, welche ich mir leider nicht durch google oder die Forensuche beantworten konnte, also stelle ich sie einfach mal hier. :oops:

Meine erste Frage:

Wenn ich ein Spiel in Android programmieren, werde ich ja aller wahrscheinlichkeit nach die onDraw() Methode benutzten, um damit sozusagen auf das "Canvas" zu zeichnen. Ist es dann trotzdem noch möglich, die Buttons und anderen Elemente des Layout-Editors in Eclipse zu benutzten? Oder muss ich diese Buttons dann selbst programmieren?

Und die zweite Frage:

Wenn ich ein Spiel habe, bei dem sagen wir mal zB der Bau einer Burg 4 Stunden dauert, und man das Spiel quasi wie ein Offline-Browser-Game spielt, wie stelle ich das am besten an? Wie verhindere ich, dass der User einfach die Zeit auf dem Smartphone verändert und so mogelt? Ich kann die App ja kaum andauernd im Hintergrund laufen lassen, also dachte ich dass sie beim Start immer schaut, wieviel Zeit seit dem letzten Mal vergangen ist und dementsprechend updatet. Hat jemand eine mögliche Lösung hierzu?

Ich bedanke mich schonmal recht herzlich! :)

LG
 
G

Gast2

Gast
Wenn ich ein Spiel in Android programmieren, werde ich ja aller wahrscheinlichkeit nach die onDraw() Methode benutzten, um damit sozusagen auf das "Canvas" zu zeichnen. Ist es dann trotzdem noch möglich, die Buttons und anderen Elemente des Layout-Editors in Eclipse zu benutzten? Oder muss ich diese Buttons dann selbst programmieren?

Keine Ahnung kenne Android da nicht gut genug, aber zu

Wenn ich ein Spiel habe, bei dem sagen wir mal zB der Bau einer Burg 4 Stunden dauert, und man das Spiel quasi wie ein Offline-Browser-Game spielt, wie stelle ich das am besten an? Wie verhindere ich, dass der User einfach die Zeit auf dem Smartphone verändert und so mogelt? Ich kann die App ja kaum andauernd im Hintergrund laufen lassen, also dachte ich dass sie beim Start immer schaut, wieviel Zeit seit dem letzten Mal vergangen ist und dementsprechend updatet. Hat jemand eine mögliche Lösung hierzu?

Hier würde ich einfach die Möglichkeit nutzen die aktuelle Zeit von einem ntp server wie einem der PTB zu beziehen. Internetzugriff ist ja kein Problem auf einem Android Gerät!

[EDIT]Nachtrag: Physikalisch-Technische Bundesanstalt (PTB)[/EDIT]
 

Marco13

Top Contributor
Beim Android SDK wird doch in Eclipse so ein GUI-Bau-Tool mitinstalliert!? (Und ... obwohl ich solche Tools hasse, kommt man da kaum drumrum, wenn man nicht seine "R" per Hand schreiben will :autsch: )
 

Trunk

Mitglied
Beim Android SDK wird doch in Eclipse so ein GUI-Bau-Tool mitinstalliert!? (Und ... obwohl ich solche Tools hasse, kommt man da kaum drumrum, wenn man nicht seine "R" per Hand schreiben will :autsch: )

Die Frage ist nun auch, ob ich den GUI-Editor überhaupt für ein Spiel nutzen sollte. Kann ich dann überhaupt noch onDraw() usw benutzen, wenn ich eine xml-Datei als View angebe?

@kappesf: Danke für den Tipp mit der Zeit!
 

Marco13

Top Contributor
Kenn' mich da auch nicht so gut aus, aber ... onDraw ist ja nur von "irgendeiner" View, und wenn man genau diese View mit dem GUI-Editor einsetzt, und ein paar Buttons drumherum, sollte das gehen... Aber vielleicht weiß da noch jemand was genaueres...
 

Trunk

Mitglied
Also so wie es aussieht kann man eine eigene Klasse schreiben, die von "SurfaceView" erbt, und auf ein solches kann man dann Buttons drüberlegen, da ein Surfaceview wohl im Hintergrund liegt.

Nachdem ich mich jetzt nochmal mit der Uhrzeitsache auseinandergesetzt habe, kommen doch nochmal einige Fragen auf; Ermittelt der oben gegebene Link nicht zB nur deutsche Zeit?
 

schlingel

Gesperrter Benutzer
Wenn das Spiel Serverkommunikation benötigt zwecks Interaktion mit anderen Spielern würde ich die Synchronisation mit Timestamps lösen die vom Server geladen werden. Jedes Mal wenn die App startet, holst du dir einen. Die kannst du dann in der App komplett autark von der Systemzeit verwenden.

Je nachdem was du zeichnen möchtest, genügt es tatsächlich, dass du eine Klasse schreibst die von View erbt und dann zeichnet was du brauchst. Die kannst du dann auch wie einen Button in deinen Layout-Container einfügen was es dir erlaubt Buttons, ImageViews etc. zu verwenden.

Der GUI-Editor ist grottenschlecht, ich schreibe immer alles per Hand.

(Und ... obwohl ich solche Tools hasse, kommt man da kaum drumrum, wenn man nicht seine "R" per Hand schreiben will )
Hm? Das generieren von R und die darin enthaltenen IDs ist vollkommen unabhängig vom UI-Editor.
 

Marco13

Top Contributor
Hm... ich habe mich noch nicht intensiv genug damit beschäftigt, um zu wissen, wo die IDs herkommen, die man bei "getViewById" übergibt/übergeben kann - meine ersten Gehversuche hatte ich auch "handschriftlich" gemacht (vermute aber, dass es auf Android bessere Gründe gibt, das nicht zu tun, als z.B. bei Swing: Auflösungsabhänigkeit von Resourcen, Portrait/Landscape... aber vielleicht erscheint das nur im ersten Moment komplizierter, als es ist, wenn man mal mehr damit macht - das wenige, was ich bisher mit Android gemacht habe, hatte nicht viel mit GUIs zu tun)
 
B

...ButAlive

Gast
Vielleicht interessiert dich dieses Video: Google I/O 2009 - Writing Real-Time Games for Android - YouTube

Ist ein Vortrag auf der Google I/O 2009. Es geht relativ tief im Detail darauf ein, auf was man, bei Spieleprogrammierung unter Android, achten sollte. Dabei erklärt der Sprecher wie er replicaisland entwickelt hat.

Ist jetzt nicht gerade leichte Kost, aber der Typ hat einen recht lockeren Stil. Wenn du mit Englisch kein Problem hast, sollte es für dich interessant sein.
 

Trunk

Mitglied
Vielleicht interessiert dich dieses Video: Google I/O 2009 - Writing Real-Time Games for Android - YouTube

Ist ein Vortrag auf der Google I/O 2009. Es geht relativ tief im Detail darauf ein, auf was man, bei Spieleprogrammierung unter Android, achten sollte. Dabei erklärt der Sprecher wie er replicaisland entwickelt hat.

Ist jetzt nicht gerade leichte Kost, aber der Typ hat einen recht lockeren Stil. Wenn du mit Englisch kein Problem hast, sollte es für dich interessant sein.

Danke für das video, war auf jedenfall interessant und der Typ ist auch ein sehr sympatischer. :)

Während ich meine App nun schon ein bisschen weiterprogrammiert habe, ist mir aufgefallen, dass es wohl noch eine grundlegende Sache gibt, welche ich so nicht ganz verstanden habe... :

Sagen wir ich habe zwei Activities, eine für das Spiel selbst und eine für ein Settings-Menü.
Die Spiel Activity startet bei onCreate() eine GameThread-Klasse, welche zB einen Timer enthält welcher den Spielfluss übernimmt. Ich hoffe soweit ist das klar. Nun wechsle ich so per Button zu dem Settings-Menü:

Java:
Intent intent = new Intent(ga, SettingsActivity.class);
	startActivity(intent); }

Wenn ich in dieser neuen Activity bin merke ich nun, dass zB der Timer immernoch läuft. Was von der alten Activity ist denn nun noch da? Wie komme ich zurück? Ich bin davor immer davon ausgegangen dass man die Activity beim zurückgehen wieder mit startActivity(intent); neu starten muss...

Ich hoffe jemand versteht mein grundlegendes Problem? ???:L
 

schlingel

Gesperrter Benutzer
activity_lifecycle.png


Wie du an dieser Grafik sehen kannst, wird eine App beim Starten einer zweiten Activity schlafen gelegt. Du bekommst das in deiner Activity mit in dem du die onPause() Methode überschreibst.

Ob die App dann beendet wird - wenn z.B. der Speicher gebraucht wird - oder ob dann ein Resume aufgerufen wird, weißt du vorhier nie.

Das heißt, du musst in deinem Spiel den aktuellen Screen pausieren, dir merken wo du gerade warst und dann die zweite Activity per startActivityForResult starten. Wenn du es mit dieser Methode startest, bekommst du ein Resultat zurück, wenn deine Settings-Activity wieder geschlossen wurde.
Das bekommst du in der onActivityResult-Methode mit. Prinzipiell alles in der Doku zur Activity nachzulesen, was ein jeder Anfänger auch tun sollte.

So wie ich das sehe, kommst du um ein ordentliches pause/resume nicht herum - der Benutzer könnte ja über die Notifications oder einen Anruf eine andere App starten. Trotzdem würde ich das Starten der Settings-Activity in einen Startbildschirm vorlagern.
 

Trunk

Mitglied
Ich denke ich habe das Prinzip auch ganz gut verstanden, die Grafik kannte ich auch schon; was mich nun noch verwirrt, ist folgendes:

Wenn ich zur Activity B wechsle, kann es ja passieren dass Activity A beendet ist, wenn ich wieder zurückwechseln will - auf jeden fall wird onCreate wieder aufgerufen. In der Oncreate erstelle und starte ich meine GameThread-Klasse mit Timer.. und wenn ich nun zurückwechsle wird logischerweise ein neues Objekt davon erstellt, nur wieso hört der alte Timer nicht auf zu ticken? ???:L

Danke trotzdem!
 

schlingel

Gesperrter Benutzer
Wenn ich zur Activity B wechsle, kann es ja passieren dass Activity A beendet ist, wenn ich wieder zurückwechseln will - auf jeden fall wird onCreate wieder aufgerufen.
onCreate wird nicht auf jeden Fall aufgerufen. Die Garantie gibt's nur bei onResume. In der Grafik siehst du ja eh, dass die Activity nur im Bedarfsfall abgeschossen wird. Gerade bei neuen Geräten mit viel RAM passiert das nicht so häufig.

und wenn ich nun zurückwechsle wird logischerweise ein neues Objekt davon erstellt, nur wieso hört der alte Timer nicht auf zu ticken?
Weil der Thread noch läuft. Warum sollte der GC einen Thread beenden der noch läuft? Könnte ja sein, dass dies beabsichtigt ist.
Nimm zum Beispiel an, du schreibst einen Web-Server. Das wäre doch saublöd, wenn dir der GC einfach den Thread abschießt nur weil seit 5 Minuten keine Anfrage mehr hereinkam.

Wie gesagt, um ein ordentliches pause/resume kommst du nicht herum.
 

Trunk

Mitglied
Ok danke, ich denke das hab ich jetzt hinbekommen, das mit dem Thread beenden auch. :)

Eine Frage hätt ich aber noch: Wenn ich in Android Bilder via der BitMapFactory lade, wann tue ich das am Besten? Ständiges neuladen sollte ja verhindert werden.. :eek:
 

schlingel

Gesperrter Benutzer
Beim onCreate. Ich persönlich starte dabei immer einen AsyncTask und erledige die zeitintesiven Punkte in asynchron und am Schluss erledige ich das Setzen der geladenen Ressourcen im UI-Thread.

Ich hab zu dem Thema einen Artikel geschrieben der erklärt wie das ganze funktioniert.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Android game programmieren Android & Cross-Platform Mobile Apps 5
N Android Game Background Service Android & Cross-Platform Mobile Apps 11
L Android Von Android Game Highscore auf Facebook posten Android & Cross-Platform Mobile Apps 2
M Android Game, welche Layout? Android & Cross-Platform Mobile Apps 2
D Android Game Projekt Android & Cross-Platform Mobile Apps 15
J Benachrichtigung Freigabe ab Android 14 Android & Cross-Platform Mobile Apps 1
J Android Benachrichtigung zum Zeitpunkt ers Android & Cross-Platform Mobile Apps 15
J Das Beispiel von Android erzeugt Fehler Android & Cross-Platform Mobile Apps 8
J Zeitdifferenzen unter Android 7 (API < 26) berechnen Android & Cross-Platform Mobile Apps 4
W Netzwerk Verbindungen Java Android Android & Cross-Platform Mobile Apps 107
Z Android IntelliJ Android & Cross-Platform Mobile Apps 2
M Repository bei Room-Database in Android Studio (Java) Android & Cross-Platform Mobile Apps 2
Android App auf das eigene Handy bekommen Android & Cross-Platform Mobile Apps 3
Alex IV Android App erstellen Android & Cross-Platform Mobile Apps 3
OnDemand CrossPlatform Kotlin iOs/Android Datenverbrauch Android & Cross-Platform Mobile Apps 2
W In Android Studio Integer an andere activities übergeben Android & Cross-Platform Mobile Apps 2
wladp Android Studio Room Database Android & Cross-Platform Mobile Apps 1
N "Schöne" Datatable in Android und setzen von Parametern von Textview im Code Android & Cross-Platform Mobile Apps 5
T Android Studio: Einen Button in einer For Schleife verwenden Android & Cross-Platform Mobile Apps 2
K BLE Komunikation mit Android studio und esp32 Android & Cross-Platform Mobile Apps 5
G Android UDP Kommunikation Android & Cross-Platform Mobile Apps 1
M Paper DB wird in Android Studio nicht erkannt Android & Cross-Platform Mobile Apps 7
J Android zugrif auf Thread nach Handy drehen. Android & Cross-Platform Mobile Apps 10
T Android Android Augmented Faces in Java. Neue Landmarks erstellen Android & Cross-Platform Mobile Apps 1
K Android Android In-App-Purchase lädt nicht Android & Cross-Platform Mobile Apps 0
Besset Android http request an interne ip adresse funktioniert nicht Android & Cross-Platform Mobile Apps 8
J Is Android Development Head First Outdated? Android & Cross-Platform Mobile Apps 3
J Android Android Datenbankverbindung zum Raspberry Pi Android & Cross-Platform Mobile Apps 1
lolcore Android Studio -Download Documentation for Android SDK Android & Cross-Platform Mobile Apps 0
S Sinnvollste weg eine SQLite DB mit Android auslesen Android & Cross-Platform Mobile Apps 7
W Problem mit Android Studio Android & Cross-Platform Mobile Apps 0
W App Abo Android Android & Cross-Platform Mobile Apps 10
OSchriever Android Android MediaPlayer bei Anruf stoppen/pausieren Android & Cross-Platform Mobile Apps 2
OSchriever Auf onClick-Listener reagieren und Parameter übergeben (Android Studio) Android & Cross-Platform Mobile Apps 4
W removeNetwork Android App mit Spendenaktion fürs Tierheim! Android & Cross-Platform Mobile Apps 1
T Android R.string.test+i Problem Android & Cross-Platform Mobile Apps 2
P undefinierbarer Fehler Android Android & Cross-Platform Mobile Apps 8
T Android ArrayList sortieren mit 2 Werten ohne thencomparing , Wie? Android & Cross-Platform Mobile Apps 10
W Variable überschreiben (Android Studio) Android & Cross-Platform Mobile Apps 2
ruutaiokwu Android Selbst entwickelter SMTP-Client läuft auf PC, nicht aber auf Android Android & Cross-Platform Mobile Apps 9
ruutaiokwu Android Warum muss man bei Android Studio immer 2x auf "Run" klicken damit die App auf dem Gerät startet Android & Cross-Platform Mobile Apps 8
ruutaiokwu Android Wo das 'android.useAndroidX' property hinzufügen? Android & Cross-Platform Mobile Apps 8
ruutaiokwu Android In einem Android-“Spinner”-Element GLEICHZEITIG Bild (links) UND Text (rechts) anzeigen Android & Cross-Platform Mobile Apps 0
P Login und Registrierung Android Anzeige Android & Cross-Platform Mobile Apps 7
S Von JavaFx zu Android Android & Cross-Platform Mobile Apps 12
K Android to Pi | Websocket Problem Android & Cross-Platform Mobile Apps 3
ruutaiokwu Wie fügt man bei Android Studio .jar-Libraries zu einem Android-Java-Projekt hinzu? Android & Cross-Platform Mobile Apps 33
M Komponenten positionieren in Android Studio 3.6.3 Android & Cross-Platform Mobile Apps 1
M Android Studio - Property-Fenster einblenden Android & Cross-Platform Mobile Apps 1
M Android Studio - App auf dem Smartphone testen Android & Cross-Platform Mobile Apps 7
M Barrierefreie Appentwicklung für Android - Suche Codebeispiele Android & Cross-Platform Mobile Apps 8
M Android Studio - Configuration fehlt Android & Cross-Platform Mobile Apps 20
M Wo kann ich das Android SDK herunterladen / wie kann ich es installieren Android & Cross-Platform Mobile Apps 3
M Unsupported class file major version 57 - Fehlermeldung bei Android Studio Android & Cross-Platform Mobile Apps 27
ruutaiokwu Android Studio (SDK) ANDROID_SDK_ROOT-Variable? Android & Cross-Platform Mobile Apps 5
O Web API in Android (JAVA) einbinden Android & Cross-Platform Mobile Apps 3
J Android Studio macht seltsame Sachen Android & Cross-Platform Mobile Apps 2
J Android 9.1 aber android Studio findet API22 Android & Cross-Platform Mobile Apps 0
Dimax Web-Seite in native app convertieren mit Android Studio Android & Cross-Platform Mobile Apps 8
A Android Studio: while-Schleife beginnt nicht Android & Cross-Platform Mobile Apps 5
lolcore android studio: fehler bei laden des emulators Android & Cross-Platform Mobile Apps 10
J Android App - Browser öffnen und Text eingeben/Button click auslösen Android & Cross-Platform Mobile Apps 10
A Android-Studio: 2. Layout nach kurzer Zeit aufzeigen Android & Cross-Platform Mobile Apps 2
A jpg wird im Android Studio nicht akzeptiert Android & Cross-Platform Mobile Apps 3
J Android Studio - ArrayList - Selected Item ermitteln Android & Cross-Platform Mobile Apps 13
T Android SDK-Manager startet nicht in Eclipse Android & Cross-Platform Mobile Apps 5
T Bringen mir die Java-Basics irgendetwas für die Android-Programmierung Android & Cross-Platform Mobile Apps 4
J Was soll das bedeuten ? does not require android.permission.BIND_JOB_SERVICE permission Android & Cross-Platform Mobile Apps 7
A Android Studio: ImageView verpixelt Android & Cross-Platform Mobile Apps 2
J intend Service im Android Studio Android & Cross-Platform Mobile Apps 4
L Android Android Development eventuell mit Flutter Android & Cross-Platform Mobile Apps 1
S Android Layout - welchen Typ? Android & Cross-Platform Mobile Apps 3
T Fehler Android Studio: java.net.MalformedURLException: no protocol: http%3A%2F%2Fwww.mal ..... Android & Cross-Platform Mobile Apps 2
Arif Android Android Studio: Fehler beim Einbinden fremder Bibliothek? Android & Cross-Platform Mobile Apps 2
L Android Android Contacts DB auslesen Android & Cross-Platform Mobile Apps 1
A Android Studio - App mit Nearby Android & Cross-Platform Mobile Apps 1
L Android content URI Datei einlesen Android & Cross-Platform Mobile Apps 9
Jackii Android Android Studio Error im Testlauf ohne zu programmieren Android & Cross-Platform Mobile Apps 9
B Android Probleme mit Android Studio Android & Cross-Platform Mobile Apps 6
Excess Android Service läuft nicht in Sandby weiter Android & Cross-Platform Mobile Apps 2
B Android Projekt für Android und IOS erstellen? Android & Cross-Platform Mobile Apps 5
J App funktioniert auf Android 5, auf 6 nicht Android & Cross-Platform Mobile Apps 2
J Android Snake Android & Cross-Platform Mobile Apps 15
J Android TaschenRechner Android & Cross-Platform Mobile Apps 22
I Das Problem mit der Tastatur... android:windowSoftInputMode="adjustPan" Android & Cross-Platform Mobile Apps 1
E Wie erhalte ich Zugriff auf das Microfon? (Android Studio) Android & Cross-Platform Mobile Apps 9
C Android Programmierung speziell oder einfach Java Buch kaufen? Android & Cross-Platform Mobile Apps 3
B Android Kein Zugriff auf Telefonspeicher (Android 6) Android & Cross-Platform Mobile Apps 1
T Android Equalizer für Android Android & Cross-Platform Mobile Apps 3
L Android Android Studio - Exportierte APK funktioniert nicht Android & Cross-Platform Mobile Apps 6
L Android Methode funktioniert nicht unter Android Android & Cross-Platform Mobile Apps 3
A Beginnen mit Serverkommunikatsion in Android Studio Android & Cross-Platform Mobile Apps 6
E Android Studio Android & Cross-Platform Mobile Apps 15
L Android Android Studio Setup killt Explorer Android & Cross-Platform Mobile Apps 3
K Android Videos rendern Android & Cross-Platform Mobile Apps 1
J Variable in strings.xml (Android Studio) Android & Cross-Platform Mobile Apps 0
B Android Android Studio lässt PC abstürzen Android & Cross-Platform Mobile Apps 3
B Android App Fehler Android & Cross-Platform Mobile Apps 21
J android Spinner funktioniert nicht Android & Cross-Platform Mobile Apps 14
G Android Push Notification Android & Cross-Platform Mobile Apps 2

Ähnliche Java Themen

Neue Themen


Oben