1

Sonntag, 17. Mai 2015, 17:47

RMXP-Spiele durch Java onlinefähig machen

Hallo liebe Community,

ich bin zwar neu im Forum, weiß aber von damals als ich noch "gemakert" habe, dass das Thema "Online-Skript" schon sehr oft angesprochen wurde. Da ich ziemlich gute Java-Kenntnisse habe und auch schon Erfahrungen mit dem Programmieren von Client-Server-Applikationen habe, habe ich mich folgendes gefragt:
Ist es generell möglich eine Schnittstelle zwischen RMXP (kenne mich leider null mit Ruby aus) und Java zu coden, sodass man die Server-Kommunikation über ein paralell laufendes Java-Programm ermöglichen kann?

Ich weiß, dass die RPG-Maker einfach nicht auf Online-Games ausgerichtet sind und ich kann mir denken dass viele dieses Thema sicher schon leid sind. Ich würde mich trotzdem über konstruktive Antworten sehr freuen :)

VG Vinny

2

Sonntag, 17. Mai 2015, 18:20

Kurz gesagt: Der RMXP kann das leider nicht.
Lang gesprochen: Du kannst den Server in Java schreiben, aber Ruby kann nicht direkt mit deinem Javaclientprogramm kommunizieren. Eine Lösungsmöglichkeit wäre über Rubys Socket API mit dem Javaclient zu sprechen, aber dann könnte es via Socket API auch direkt mit dem Javaserver sprechen. Weitere Rubybibliotheken (in deinem Fall welche, die dir ermöglichen Java mit Ruby zu verwenden) kann der Rubyinterpreter des RMXP leider nicht laden. Mindestens der Client sollte also in Ruby geschrieben und direkt ins Spiel eingebettet sein.

Inzwischen gibt es schon Rubyskripter, die sich der Sache angenommen haben und Online-System für den Maker findest Du im Netz.
Wenn Du es selber machen möchtest würde ich dir empfehlen Ruby zu lernen, um die Aufgabe zu lösen. Das ist wenn man schon eine Programmiersprache gelernt hat garnicht schwer. Es gibt auf ruby-lang.org einen Artikel To Ruby From Java, der schonmal den Einstieg erleichtert und für alles weitere macht es die Übung. Bei Fragen oder Schwierigkeiten greift dir natürlich die Community unter die Arme. :kumpel:

3

Sonntag, 17. Mai 2015, 18:29

Das ist schade, dabei hatte ich schon eine sehr genaue Vorstellung zur Umsetzung :D

Ruby habe ich mir mal angeschaut, ist tatsächlich nicht so schwer, es ist mehr das Klassenmodell im RMXP wo ich nicht durchblicke. Kann einfach die Logik dahinter nicht nachvollziehen :kA:
Ist es denn möglich per Maker-Skript Rubi-APIs anzusprechen?

An sich ging es mir einfach um die Herausforderung so etwas umzusetzen, daher bringen mir die Lösungen anderer nicht so viel ;)

VG Vinny

4

Sonntag, 17. Mai 2015, 18:46

Kannst dir ja angucken, wie andere das Problem gelöst haben. ;)

Der Maker hat einen leicht modifizierten Rubyinterpreter in der Sprachversion Ruby 1.8.1 - teil dieses ist die Standardklasse Win32API[1], mit der Du beliebige DLLs laden und deren Funktionen aufrufen kannst. Der Weg wäre dann die Winsock DLLs[2] zu verwenden, um mit dem Server zu kommunizieren.

Zum Klassenkonzept im RGSS, was ist dir denn da nicht klar? Ich empfehle den Einsteigerkurs von KaiD[3], wenn Du dich allgemein vertrauter machen möchtest, und sonst einfach hier viele Fragen zu stellen. :)


[1] Artikel zur Win32API Klasse auf Scientia
[2] Winsock Dokumentation auf MSDN
[3] Rubyeinsteigerkurs mit dem RMXP auf Scientia

5

Sonntag, 17. Mai 2015, 19:30

Im Scientia werde ich mich mal etwas genauer umsehen, ich danke dir :)

Zu der Frage was ich am Klassenkonzept nicht verstehe:
Ich hatte mir vor einiger Zeit mal vorgenommen ein Custom Movement Script zu schreiben (ja ich weiß, da gibt es auch schon dutzende, nur gab es keins das so war wie ich es damals wollte :D ). Allerdings ist dieses Vorhaben schon daran gescheitert, dass ich nicht einmal den Key Listener finden konnte welcher Tastendruck registriert. Deswegen konnte ich auch nicht richtig durchblicken wie der RMXP die Sache mit dem Movement aktuell macht :kA: .

Aber die Einsteigerkurse etc. klingen vielversprechend. Ich schau mal ob ich durchblicke.
Vielen Dank nochmal :thumbsup:

VG Vinny

6

Sonntag, 17. Mai 2015, 20:05

Das liegt daran, dass das Ruby Game Scripting System das Konzept des Keylistener und verschiedener Threads nicht hat. ;)

Es gibt ein Inputmodul das frameweise geupdatet wird und für dieses Frame dann für logische Buttons (A,B,C,X,Y,Z,Up,Down,Left,Right) - die dann auf die Computertasten Enter oder Escape etc. gemappt werden - den Status (triggered, pressed, repeatet) hält.
Die Klasse Game_Player (Unterklasse eines Game_Character = Spielfigur in der Map) fragt dann in ihrer Updatemethode nach: if Input.trigger?(Input::C) und jenachdem aktiviert es dann das Event vor sich (der logische C-Button ist die Aktionstaste und standardmäßig auf Leertaste und Enter gemappt).
Das ganze Spiel läuft in einem einzigen Thread, nebenläufigkeit wird über Updatemethoden realisiert, die vom Hauptthread regelmäßig aufgerufen werden.

7

Dienstag, 19. Mai 2015, 11:50

Alles klar, ich schaus mir nochmal an. Danke nochmal :) Thread kann geclosed werden.

VG Vinny

Ähnliche Themen

Verwendete Tags

Java, Online

Social Bookmarks