Laden...

Silverlight Game Ruckelt

Erstellt von malignate vor 15 Jahren Letzter Beitrag vor 15 Jahren 1.529 Views
malignate Themenstarter:in
742 Beiträge seit 2005
vor 15 Jahren
Silverlight Game Ruckelt

Hi,
ich habe angefangen ein kleines Silverlight Game zu machen, um mich bissle in die Thematik einzufinden:

http://www.gpstudio.de/Breakout1/TestPage.html

Leider ruckelt es zeitweise und ich habe 0 Ahnung wie ich das raus bekomme: Meine Bewegung wird mit der Zeit berechnet und ich habe alle hier genannten Methoden ausprobiert: http://silverlight.net/blogs/msnow/archive/2008/04/01/timers-and-the-main-game-loop.aspx

Den FPS Counter den ich mal drinne hatte, hat auch den fast 10 getesteten Rechnern immer 60 FPS angezeigt und ich finde keine Erklärung geschweige denn eine Lösung für dieses Problem.

Falls jemand eine Idee oder einen Vorschlag hat, wäre ich darüber sehr dankbar.

Btw: Enter oder Space zum Starten und Pfeiltasten zum Steuern.

3.430 Beiträge seit 2007
vor 15 Jahren

Hallo,

ich habe das gerade getestet und es läuft sehr flüssig.
Es gab nicht einen Momentan an dem es geruckelt hat.

Verwendet habe ich den IE7.

Gruss
Michael

5.941 Beiträge seit 2005
vor 15 Jahren

Hallo zusammen

Auch IE7, läuft problemlos bis auf den Ball (Den du wahrscheinlich meinst).
Der läuft nicht sauber durch, sondern schleift sich ab und an etwas.

Ohne Code (Vorallem den mit dem du die Position des Balles bewegst) kann man da allerdings wenig sagen.
Hast du das Spiel aufgrund von einem Tutorial erarbeitet, wenn ja welches und läuft dieses ohne dieses Problem?

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

B
81 Beiträge seit 2008
vor 15 Jahren

Auch keine Probleme, im IE7 und Firefox 3, in Opera startet das Spiel gar nicht(die Box bewegt sich und nicht das Brett...)

5.742 Beiträge seit 2007
vor 15 Jahren

Hallo malignate,

mit dem FF 3.04 kann ich dein Problem nachvollziehen.
Das Spiel läuft sehr lange flüssig, aber ca. alle 30 Sekunden stockt es kurz für eine halbe Sekunde.

Woran das liegen könnte, weiß ich nicht.

Erzeugst du eventuell sehr viele Objekte, sodass der GC übermäßig viel zu tun hat? Normalerweise läuft so eine GC aber extrem schnell ab.

Wie renderst du denn die Objekte?
Etwas (schemenhafter) Quellcode wäre hilfreich.

malignate Themenstarter:in
742 Beiträge seit 2005
vor 15 Jahren

Danke für die schnelle Antworten.
Das Problem ist in der Tat der Ball. Das Game habe ich anhand keines Tutorials erstellt sondern ist auf meinem Mist gewachsen. Alle Game Objekte inkl. dem Ball sind UserControls und befinden sich auf einem Canvas und werden über ein Property Position bewegt, welches ungefähr wie folgt aussieht:


public Vector2D Position
{
   set 
   {
      SetValue(Canvas.LeftProperty, value.X);
      SetValue(Canvas.TopProperty, value.Y);
   }
   get
   {
      _position.X = (double)this.GetValue(Canvas.LeftProperty);
      _position.Y = (double)this.GetValue(Canvas.TopProperty);
      return _position;
   }
} 

Viele Grüße,
Sebastian

5.941 Beiträge seit 2005
vor 15 Jahren

Hallo malignate

Wieso UserControls, ich würde dazu nur ein Objekt benutzen dass die Referenz zu einem Bild, die Koordinaten und ggf. 2, 3 Statusfelder enthält.
UserControls für ein einzelnes Objekt ist m.E. zu viel Overhead.

Hast du schon mal einen Test gemacht, wie das ohne UserControls läuft oder die Vorgehensweise mit einem ähnlichen Projekt verglichen (Es wird davon viele Clone geben).

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

malignate Themenstarter:in
742 Beiträge seit 2005
vor 15 Jahren

Dann reduziert sich meiner Meinung nach der Vorteil von Silverlight für Games extrem. Ich sehe das gerade als Vorteil an, dass ich User Controls verwenden kann, um das zum Beispiel einem Designer in die Hand zu drücken, der mein Game aufpeppt oder um auch Grafiken zur Laufzeit zu generieren. Außerdem habe ich ja nicht unbedingt Performance Probleme bei 60 FPS pro Sekunde.

Wenn ich mich noch selbst um das ganze Rendering Zeug kümmern muss, kann ich auch gleich nen Applet schreiben...

Habe bisher nur ein paar kleine Beispielgames gesehen, die auch User Controls verwendet haben.

Und wie läuft das mit den ganzen Animationen in normalen Anwendungen?

Edit: Mit UserControls kann man auch Expression Blend schön als "Level-Editor" verwenden.

5.941 Beiträge seit 2005
vor 15 Jahren

Hallo malignate

Ich kann mich auch gut irren, aber bei Echtzeitanwendungen zählt alles.
Wie schon geschrieben würde ich deinen Code einfach mit bestehenden Lösungen vergleichen.

Vielleicht hast du irgendwo eine Bremse drin.
Debugging könnte beim Aufsprüren sicherlich helfen, sowie ein Profiler.

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

malignate Themenstarter:in
742 Beiträge seit 2005
vor 15 Jahren

@Peter:
So auf die Schnelle geschaut geben die Tutorials mir Recht, die machen das über UserControls.

Die Games, zu denen ich bis jetzt Code gefunden habe, verwenden allerdings keine UserControls.

z.B. http://nokola.com/Shock/

Ich finde das aber schon ein bisschen merkwürdig.

L
862 Beiträge seit 2006
vor 15 Jahren

Dann reduziert sich meiner Meinung nach der Vorteil von Silverlight für Games extrem. Ich sehe das gerade als Vorteil an, dass ich User Controls verwenden kann, um das zum Beispiel einem Designer in die Hand zu drücken, der mein Game aufpeppt oder um auch Grafiken zur Laufzeit zu generieren. Außerdem habe ich ja nicht unbedingt Performance Probleme bei 60 FPS pro Sekunde.

Wenn ich mich noch selbst um das ganze Rendering Zeug kümmern muss, kann ich auch gleich nen Applet schreiben...

Habe bisher nur ein paar kleine Beispielgames gesehen, die auch User Controls verwendet haben.

Und wie läuft das mit den ganzen Animationen in normalen Anwendungen?

Edit: Mit UserControls kann man auch Expression Blend schön als "Level-Editor" verwenden.

Das heisst nicht dass du dich gleich selbst um alles kümmern musst. Wenn du für deine Objekte (Ball, Balken...) Bilder benutzt, diese dann auf per DrawingContext auf ein globales ImageSource legst und dieses in einem ImageControl anzeigst solltest du ohne viel Aufwand schon mal etwas Performance bekommen.
Ob das bei einem kleinen Projekt wie dem Breakout viel ausmacht lassen wir mal so dahingestellt. Jedoch wird das Spiel bei sehr vielen Controls auch sehr langsam.
Und JPEGs kannst du auch einem Grafiker in die Hand drücken. Kannst natürlich auch div. Brushes benutzen wie du sie warscheinlich verwendet hast.
Und Animationen sind eigendlich auch nur bei kleineren Sachen sinnvoll. Komplexe und Performante Abläufe lassen sich damit eben kaum realisieren.
Aber wie gesagt bei einem kleinen Spiel wie diesem sollte es alles noch kein Problem darstellen.

Und das Spiel läuft bei mir auf FF 3.0.4 übrigens flüssig.

malignate Themenstarter:in
742 Beiträge seit 2005
vor 15 Jahren

@Lector: Ich denke bei Web Games reden wir eh meist über "kleine" Projekte, was die Komplexität einer einzelnen Szene angeht.

Sicher muss ich nicht alles selber machen, aber ich lande dann wieder auf einem ganz anderen Level, was die Art zu programmieren angeht.

Ich habe auch schon Games mit Open GL gemacht und C++ oder Java und von diesem Modell bin ich dann nicht mehr weit entfernt, mir fehlt dann aber die Flexibilität und die "richtige" Unterstützung von Silverlight Tools, z.B. Visual Studio und Expression Blend. Mit WYSIWYG ist nix mehr wenn ich keine Controls mehr verwende.

Ich würde nie auf die Idee kommen sowas mit Winforms machen zu wollen, aber bei Silverlight erwarte ich das einfach irgendwie. Das ist aber eher meine persönliche Erwartungshaltung und keine Konsequenz aus wochenlangen Überlegungen mit dem enstprechenden technischen Background-Wissen.

3.971 Beiträge seit 2006
vor 15 Jahren

Hallo,
es gibt zwar keine wirklichen Profiler für Silverlight, aber dennoch lassen sich ein paar Performancechecks mit diversen Programmen ala perfmon.exe beispielsweise machen.

In Memory & performance profiler for Silverlight 2.0? ist auch das neue xperf.exe. Eventuell hilfts dir ja weiter

Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...