Moin moin,
also ich lese hier schon länger als Gast mit, bin durch einen Freund auf das Forum gekommen. Und eben jener Freund ist auch der Anlass warum ich ein Projekt gestartet habe
Ich habe behauptet das es sehr wohl möglich ist mittels GDI+ ein Online RPG-Spiel zu erstellen
Das ganze ist kein Projekt, welches die Ambitionen hat fertig zu werden - aber ausgeschlossen ist es nicht - ich will lediglich die machbarkeit beweisen
Und hier fangen wir mal an was ich bereits habe und wo ich Hilfe gebrauchen könnte
Was sieht man hier:
Ein Problem ist meine Hauptschleife, welche ich mit dem Idle Event realisiert habe:
Probleme macht mir hier das AppStillIdle, welches wie folgt implementiert ist:
Auf 95% aller Rechner läuft die Endlosschleife bis man das Spiel beendet, allerdings gibt es einige Rechner die der Meinung sind, das es durchgehend WindowMessages gibt und ich habe absolut keine Ahnung woran das liegen kann, hat damit jemand Erfahrungen?
Gibt es hier einen Thread, welcher auf generelle Tweaks bei GDI+ eingeht? Das war es erstmal von der Fragefront, ich hoffe jemand kann mir bei der Hauptschleife weiter helfen
also ich lese hier schon länger als Gast mit, bin durch einen Freund auf das Forum gekommen. Und eben jener Freund ist auch der Anlass warum ich ein Projekt gestartet habe
Ich habe behauptet das es sehr wohl möglich ist mittels GDI+ ein Online RPG-Spiel zu erstellen
Das ganze ist kein Projekt, welches die Ambitionen hat fertig zu werden - aber ausgeschlossen ist es nicht - ich will lediglich die machbarkeit beweisen
Und hier fangen wir mal an was ich bereits habe und wo ich Hilfe gebrauchen könnte
Was sieht man hier:
- Diverse GDI+ Controls (Window, Button, Textbox, Textfeld, Image)
- Alle mit dem GameServer verbundenen Spieler
- Es gibt für alle Spieler animationen (Idle, Attack, Death, Cast, RangeAttack, Hit, Run)
- Spieler haben verschiedene Ausrüstung
- Kollisionsbereiche
Ein Problem ist meine Hauptschleife, welche ich mit dem Idle Event realisiert habe:
C#-Quellcode
- void Application_Idle(object sender, EventArgs e)
- {
- while (AppStillIdle)
- {
- bool wasBusy = m_GUIBusy;
- float elapsed = m_Timer.GetElapsedMilliseconds();
- UpdateTimers(elapsed);
- m_GUIBusy = m_GUI.Update(m_Input, elapsed);
- m_Engine.Update(m_Input, elapsed);
- if (!m_Game.tcpClient.IsConnected || (m_Input.KeyPressed(Keys.Escape) && !wasBusy))
- this.Close();
- m_Input.NewFrame();
- }
- }
Probleme macht mir hier das AppStillIdle, welches wie folgt implementiert ist:
C#-Quellcode
- [System.Security.SuppressUnmanagedCodeSecurity]
- [DllImport("User32.dll", CharSet = CharSet.Auto)]
- public static extern bool PeekMessage(out Message msg, IntPtr hWnd, uint messageFilterMin, uint messageFilterMax, uint flags);
- [DllImport("User32.dll")]
- private static extern short GetAsyncKeyState(System.Windows.Forms.Keys vKey);
- /// <summary>
- /// Prüft ob auch ja keine Window-Message zwischen geschoben werden müssen
- /// </summary>
- private bool AppStillIdle
- {
- get
- {
- Message msg;
- return !PeekMessage(out msg, IntPtr.Zero, 0, 0, 0);
- }
- }
Auf 95% aller Rechner läuft die Endlosschleife bis man das Spiel beendet, allerdings gibt es einige Rechner die der Meinung sind, das es durchgehend WindowMessages gibt und ich habe absolut keine Ahnung woran das liegen kann, hat damit jemand Erfahrungen?
Gibt es hier einen Thread, welcher auf generelle Tweaks bei GDI+ eingeht? Das war es erstmal von der Fragefront, ich hoffe jemand kann mir bei der Hauptschleife weiter helfen
Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „TheLianos“ ()