Kreisbewegung in Shooter-Game verlangsamt das Programm
Übersicht

SirthawBetreff: Kreisbewegung in Shooter-Game verlangsamt das Programm |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Guten Abend!
Wie der Titel schon sagte, habe ich das Problem, dass ich einen Gegner in einem Shooter-Game darstellen möchte, der eine einfache Kreisbewegung durchführt, doch leider wird nach wenigen Sekunden mein Spiel immer langsamer und ich weiss nicht warum. Hoffentlich könnt ihr mir helfen. Hier ist die Funktion, die den Gegner erzeugt: Code: [AUSKLAPPEN] Function createSkystar() skystar_w=skystar_w+1 If skystar_w=>360 Then skystar_w=0 If zaehler_skystar=0 Then instanz.skystar = New skystar instanz\skystar_x = 600+20 instanz\skystar_y = 100-20 instanz\skystar_energie=50 zaehler_skystar=1 EndIf For instanz.skystar = Each skystar DrawImage skystar_image,instanz\skystar_x+20*Cos(skystar_w),instanz\skystar_y-20*Sin(skystar_w) Next End Function Mit freundlichen Grüßen Sirthaw |
||
![]() |
Abrexxes |
![]() Antworten mit Zitat ![]() |
---|---|---|
2D ist zu langsam um in Echtzeit zu drehen. Benutze 8 oder 16 Einzelbilder.
cu |
||
Sirthaw |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke für die Antwort.
Also gibt es keine andere Möglichkeit außer Einzelbilder? Das ist nämlich echt ärgerlich, weil ja so viele Varianten für Gegnerbewegungen wegfallen, oder? |
||
PhillipK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Abrexxes:
Wenn ich das richtig sehe, wird keinerlei rotation durchgeführt. Lediglich Sinus / Cosinus wird verwendet um die X/Y position des einzelbildes zu verändern. Dh um die eigentliche position der skystar instanz "rotiert". Was ich mir vorstellen könnte, ist, das du "zaehler_skystar" evtl pro frame zurücksetzt? Das würde bedeuten, das du pro frame eine neue instanz erstellst, was schnell zu einem extremen leak führen kann - grade weil, wie Abrexxes schrieb, pures 2d langsam ist. Hast du noch mehr code, der dazu gehört? Wo rufst du die funktion auf? Hast du schonmal beim erstellen eines Skystars ein print laufen lassen, gucken wie oft es ausgeführt wird? Eventuell ist "zaehler_skystar" auch nur lokal vorhanden. In diesem fall wird die variable jeden aufruf von "CreateSkystar" mit 0 initialisiert. Was auch bedeuten würde, das bei jedem aufruf eine instanz erstellt wird. |
||
Sirthaw |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
XD
Du hast Recht, PhillipK, ich habe aus Versehen Global skystar_zaehler geschrieben anstatt zaehler_skystar! Vielen Dank! |
||
PhillipK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
oft sind es die kleinen dinge, die man übersieht.
Ein tipp fürs nächste mal: Grade wenn du eine solche funktion hast, solltest du klar zwischen Create und Update / Draw trennen. Und wenns dann doch mal probleme gibt.. einfach ein print zum erstellen um sicher zu gehen, das nur eine gewünschte anzahl instanziert wird ![]() |
||
![]() |
Tennisball |
![]() Antworten mit Zitat ![]() |
---|---|---|
Manche IDEs haben eine Art "Rechtschreibprüfung" eingebaut, die dir dabei hilft solche Tippfehler sofort zu bemerken. Wenn du eine Variable nicht definiert hast, bevor du sie verwendest, wird dir das mitgeteilt. Ich bin mir nicht sicher ob IDEal das unterstützt, da könntest du mal nachgucken.
Gruß, Tennisball |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Der "Strict" Modus von IDEal färbt alle undeklarierten Variablen rot ein - sehr zu empfehlen. | ||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
Sirthaw |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Okay, ich schau mich mal nach ner anderen IDE um.
Danke. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group