# Spielfigur steuern



## ArtemZab (9. Jul 2008)

Ich arbeite an einem kleinen 3D Spiel. Ich nutze jogle und habe auch schon das Grundgerüst für den
Rendering-Vorgang, d.h. Render, Szenemanager und die Spielelemente. Das Rendern und Animieren
funktioniert bereits super. Momentan bin ich dabei eine Steuerungsmöglichkeit für die Spielfigur zu
entwickeln und würde mich über Tipps von euch sehr freuen. Also stellt euch vor: es gibt die Klasse Renderer und eine Schnittstelle zwischen Renderer und den zu zeichnenden Elementen des Spiels, den Szenemanager. Wird eine Instanz von Renderer erzeugt beginnt der Zeichenvorgang automatisch. Das Problem ist nun eine Verbindung zu schaffen zwischen dem Spieler vor dem Rechner und der Spielfigur, die selbst erst auf dritter ebene bzw. im Szenemanager vorkommt.

Meine Idee war hier, dass die Grafikklasse "Spielfigur" über den Szenemanger und schließlich über den Renderer offen zugänglich bleibt, sodass eine Controller Klasse, welche die Benutzereingaben registriert, diese abgreifen kann.


----------



## Evil-Devil (9. Jul 2008)

Verschaff der Spielfigur einfach Zugriff auf die Eingabegeräte und dann darüber entsprechend die Positionswerte manipulieren. So würde ich es machen.


----------



## Marco13 (9. Jul 2008)

Hm - solche Designentscheidungen sind schwierig, wenn man den Kontext nicht kennt. Soll die Figur frei bewegt werden können, oder nur auf bestimmte Positionen? Soll man die Zielposition anklicken, oder die Figur "draggen"? Du könntest dir allgemein mal über "Picking" Gedanken machen. Also GANZ grob: Eine Möglichkeit bieten, nachzufragen, was an der Position (x,y) des Bildschirms ist. Genauer vielleicht: Einen Strahl in die Szene zu schicken, und das Objekt geliefert bekommen, was von dem Strahl geroffen wird. Den Spielfiguren (die ja eher Datenmodelle oder View-Elemente sind) irgendwas über den Benutzer (und dessen Eingabegeräte) mitzuteilen halte ich für keine gute Idee..


----------



## ArtemZab (10. Jul 2008)

Um etwas Klarheit zu schaffen. Das Spiel soll ein Bomberman Klon werden. Da muss man die
Spielfigur mit den Pfeiltasten bewegen können. Also dürfte Picking ja nicht möglich sein.


----------



## EgonOlsen (10. Jul 2008)

Ich verstehe deine Architektur jetzt zwar nicht genau, aber irgendwo musst du doch eine Art "Spielschleife" haben, die die eigentliche Spielogik ausführt!? Diese sollte IMHO irgendwie auch den Spieler kennen. Im Idealfall eine modelartige Version davon, nicht zwingend den eigentlich zu rendernden View (wobei das bei 3D nicht immer trennscharf klappt, weil man teilweise den View für Kollisionerkennung braucht). Da kannst du dann den aktuellen Steuerzustand in eine move-Methode reinwerfen, die die Figur dann bewegt. Oder du setzt noch einen drauf und baust einen Controller, der das nimmt und die Figur entsprechend bewegt. Ob das nötig ist, entscheidest du selber. Ich würde es nicht als zwingend ansehen und habe es auch in meinem aktuellen Projekt auch nicht so gemacht...einem Bomberman-Klon (pic)...  :wink:


----------



## Evil-Devil (11. Jul 2008)

AlienBomber oder wie wirst es nennen? ^^


----------



## Guest (11. Jul 2008)

EgonOlsen: Ich hab grad in deinem Pic was gelesen von Server Broadcasting... ich nehm an das du damit an alle
clients die entsprechenden Daten sendest. Darf ich mal neugierig sein wie das geht? Weil ich muss da bei meiner
Serveranwendung immer alle angemeldeten Clients in ner Schleife durchlaufen, ich hab von Broadcast zwar mal 
was gehört, wusst es aber nicht umzusetzen.

Thx, und sorry wg offTopic


----------



## EgonOlsen (11. Jul 2008)

Ich mach's kurz wegen OT: Dieser spezielle BC ist ein UDP-Paket an 255.255.255.255, d.h. das gesamte LAN. Schleife für alle Clients habe ich aber auch.


----------



## Guest (14. Jul 2008)

@EgonOlsen Danke, das wollt ich hören. 

BT: Vielleicht hilft das ja weiter, ich hab mir für die Steuerung meiner Spielfiguren einen eigenen Thread gemacht,
der alle 20 ms guggt ob sich was bewegt hat. Jedes Object weiss halt wo es ist, wo es hinwill und wie schnell es ist
(oder was es am tun ist). Benutzereingaben werden entsprechend in die Objecte geschrieben, der Tread wertet nur
die Zustände in den Objecten aus. War für meine Zwecke genau was ich gebraucht hab


----------

