D
DocJunioR
Ambitioniertes Mitglied
- 7
Vorwort:
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:
Jetzt muss unsere View noch wissen, wer unser ViewSetter ist. Da wir noch nicht wissen, ob wir eine SurfaceView, ListView oder ein Layout dafür nutzen, definieren wir ein weiteres Interface IGameView. Dies hat den Nachteil, dass wir das Ganze jedes Mal neu implementieren müssen, aber durch geschickte Vererbung eigentlich auch nur einmal pro Viewtyp.
Die IGameView wird später sämtliche View-übergreifenden Funktionen transportieren.
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:
Auch, wenn es nicht unbedingt notwendig ist, hier der Vollständigkeit halber die Implementierung der IGameView in einem LinearLayout:
Um die Geschwindigkeit des Viewwechsels zu erhöhen könnte man sämtliche Views zu Anfang instanziieren und einfach die Instanzen tauschen. Ob das wirklich einen merklichen Vorteil bringt, hängt wohl davon ab, was man zu instanziieren hat.
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*
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
- Hauptmenue (da fängt das Programm nach dem Start an)
- Load Game
- Save Game, was aber nur dann sichtbar sein sollte, wenn was zu speichern da ist
- das eigentliche Spiel
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*
Zuletzt bearbeitet: