| |||||||
Das Thema "Meine Gedanken zur Spieleprogrammierung - Teil 1 - Spielstrukturen" befindet sich unter Android Codeschnipsel auf Android-Hilfe.de.
|
| | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Android-Hilfe.de Mitglied Registriert seit: 25.06.2009
Beiträge: 51
Abgegebene Danke: 0
Erhielt 5 Danke für 4 Beiträge
| Ich nenne dies hier absichtlich nicht Tutorial, howto, etc., weil es lediglich das wiedergibt, was ich mir zum Thema denke. Möglicherweise gehts auch eleganter.. Teil 1 Spielstrukturen. Wer sich schonmmal so ein Spiel angesehen hat, der weiß, das es selten gleich nach dem Aufruf des Programms losgeht. Warum auch? Vielleicht möchte man ja nur mal die Soundeinstellungen ansehen oder jemandem den Trailer zeigen? So ein Spiel besitzt also einige Komponenten, die um das eigentliche Spiel herum gestrickt sind. Im android-Deutsch wären dies Views. Selbst innerhalb des eigentlichen Spieles können diese benutzt werden- beispielsweise wenn es darum geht, ein Character sheet zu erstellen, etc. Ich möchte hier also mal zeigen, wie ich das Ganze angehen würde. Überlegen wir uns ein einfaches Spiel, bei dem man Spielstände laden und speichern kann, sowie spielen und, natürlich, das Spiel verlassen. Wir haben also folgende Views
Ich habe das Ganze so gelöst, dass meine Activity ein Interface IViewSetter implementiert. Dieses Interface sieht so aus: Code: public interface IViewSetter {
public void setView (String viewName);
} Code: public interface IGameView {
/**
* @param setter Instance of the program setting the active view
*/
public void setViewSetter (IViewSetter setter);
} Zurück zur Viewsteuerung. Die Activity bekommt also einen String übergeben, der ihr sagt, was als nächstes gezeigt werden soll. Dies kann sie dann einfach überprüfen: Code: public class MainActivity extends Activity implements IViewSetter {
public void onCreate (Context context) {
super.onCreate(context);
// blende den Titel des Programms aus (Vollbild)
requestWindowFeature(Window.FEATURE_NO_TITLE);
// Lade die Hauptansicht.
setView("main");
}
public void setView(String, viewName) {
IGameView view = null
if (viewName.equals("main")) {
view = new MainMenu(this.getContext();
} else if (...) {
} else { // alles unbekannte heißt exit
thist.finish();
}
// mache den ViewSetter bekannt
view.setViewSetter(this);
// setze die neue View
setContentView ((View) view);
}
} Code: public class MainMenu extends LinearLayout implements IGameView, OnClickListener {
IViewSetter setter = null;
public MainMenu(Context context) {
super(context);
//TODO: Buttons erstellen, etc.
}
@Override
public void setViewSetter(IViewSetter setter) {
this.setter = setter;
}
@Override
public void onClick(View v) {
// wenn etwas bestimmtes passierte, ändere die View..
this.setter.setView ("loadfile");
}
'} Soo,ich hoffe, dass ich euch damit schonmal etwas Interessantes erklären konnte. Als nächstes würde ich erklären, wie man quasi für lau Spielstände da rein bringen kann- so ihr das noch wollt .wenn du schon bis hier gekommen bist, hinterlass doch bitte eine ehrliche Meinung- bin Kritikfähig.. *Kettensäge zück* Geändert von DocJunioR (16.07.2009 um 09:12 Uhr) Grund: Kleinere Tippfehlerund eine Anmerkung zur Nutzung des ViewSetters hinzugefügt |
| | |
| Folgende Benutzer bedanken sich bei DocJunioR für diesen Beitrag: | Epic46 (26.12.2011), Luise Lustig (17.12.2009) |
| | #2 (permalink) |
| Ehrenmitglied Registriert seit: 23.01.2009
Beiträge: 1.148
Abgegebene Danke: 1
Erhielt 78 Danke für 24 Beiträge
|
Danke für den Beitrag. Bin gespannt auf die Fortsetzung. Vor allem interessiert mich das Aufbau einer Game-Engine. Habe eigentlich nur eine Anmerkung/Frage: im Android-Source sehe ich, dass die meistens die Activity wechseln, um eine andere View zu zeigen. D.h. an eine View hängt an einer Activity. Views mit setContectView zu wechseln habe ich auch schon mal gemacht und dabei keine Nachteile festgestellt. Weiß du warum (wann) die eine oder die andere Methode besser ist? |
| | |
| | #3 (permalink) |
| Android-Hilfe.de Mitglied Registriert seit: 25.06.2009
Beiträge: 51
Abgegebene Danke: 0
Erhielt 5 Danke für 4 Beiträge
|
so weit ich das verstanden habe, startet eine neue activity ein komplett neues Fenster, was m.E. mehr Ressourcen frisst als nur das Austauschen der View. Ansonsten kann es beim Tauschen der View wohl auch nicht passieren, dass man zwischendurch den Desktop sieht.. Die gleiche Mimik kann man auch über Activities machen, allerdings muss der Setter dann eien extra Klasse sein. Bisher hab ich allerdings auch noch keinen Weg gefunden, innerhalb einer Viewklasse ein layout.xml zu laden.. |
| | |
| | #4 (permalink) | |
| Erfahrener Benutzer Registriert seit: 25.06.2009
Beiträge: 212
Abgegebene Danke: 4
Erhielt 13 Danke für 11 Beiträge
| Zitat:
Ganz klar entscheidest du dich für zwei Activities anstatt für zwei Views in einem Activity. Warum? Wegen der Wiederverwendbarkeit. Das Activity zum anzeigen des Bildes im Vollbildmodus kann so von externen Activities sehr einfach genutzt werden. Das ginge zwar auch mit nur einem zentralen Activity allerdings macht es keinen Sinn die ganze Logik zum verwalten der Bilder auf der Festplatte mitzuladen, nur weil ein Programm ein Bild anzeigen will. Ein Beispiel bei dem mehrere Views verwendet werden aber nur eine Activity wäre ein Preferences-Activity mit mehreren Unterseiten. Die Wiederverwendbarkeit ist hier gering, in der Regel will der User alle möglichen Einstellungen sehen und selbst wenn eine Einstellungs-Unterseite direkt aufgerufen wird, macht es nicht viel aus den Rest mitzuladen. Die Logik ist über alle Einstellungsseiten ziemlich die gleiche. | |
| | |
![]() |
|
| Themen-Optionen | |
| Ansicht | |
| |
| ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Die beliebtesten Android Apps aus dem Android Market | philipp_weide | Foto und Multimedia | 290 | 04.09.2011 17:59 |
| [gelöst] Wie bekomme ich meine Kontakte auf den Laptop?? | brainbreed | T-Mobile G1 Forum | 2 | 25.06.2009 13:53 |
| wo ist meine app im market? | swordi | Android App Entwicklung | 7 | 04.06.2009 13:02 |
| Meine meinung zum G1 | markus90 | Smalltalk und Offtopic | 3 | 21.03.2009 11:52 |