Probleme mit Geschwindigkeit
Übersicht

![]() |
prolapperBetreff: Probleme mit Geschwindigkeit |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi Leute
Ich habe gerade folgendes Spiel geschrieben. Es ist noch sehr simpel und noch nicht richtig spielbar, aber das Spielprinzip sollte mit diesem Code klar werden. Jedoch ist mir aufgefallen, dass dieses Programm sehr viel Rechnerleistung beansprucht, ist ja klar mit den ganzen Schleifen. Deswegen frage ich euch, ob vielleicht einer mir helfen kann und einen anderen Weg, der nicht so rechenaufwendig ist posten kann. Hier noch mal das Spielprinzip kurz dargelegt: ; - Alle paar Sekunden (hängt von Schwierigkeit ab) wird ein neuer Stein erstellt ; - Alle paar Hundertsl (hängt auch von Schwierigkeit ab) werden alle Steine, die "in Bewegung sind" um ein Pixel weiter nach unten verschoben ; ; - Alle Steine, die nicht weg sind werden gezeichnet ; ; - Es wird überprüft ob eine Taste gedrückt wurde und wenn ja welche. ; - Wenn Es ein Buchstabe ist wird in einer Schleife ein Stein mit dem selben Buchstaben herausgesucht und wird entfernt ; - Wenn Es Esc ist kommt man ins Menü ( Es wird beendet ) ; - Später werden noch Zusatztasten eingefügt. Code: [AUSKLAPPEN] ;-------------------------------------------------------Images laden------------------------------------------------------------ Global hintergrund = LoadImage("Grafiken\hintergrund2.bmp") Global stein_a = LoadImage("Grafiken\A.bmp") Global stein_b = LoadImage("Grafiken\B.bmp") Global stein_c = LoadImage("Grafiken\C.bmp") Global stein_d = LoadImage("Grafiken\D.bmp") Global stein_e = LoadImage("Grafiken\E.bmp") Global stein_f = LoadImage("Grafiken\F.bmp") Global stein_g = LoadImage("Grafiken\G.bmp") Global stein_h = LoadImage("Grafiken\H.bmp") Global stein_i = LoadImage("Grafiken\I.bmp") Global stein_j = LoadImage("Grafiken\J.bmp") Global stein_k = LoadImage("Grafiken\K.bmp") Global stein_l = LoadImage("Grafiken\L.bmp") Global stein_m = LoadImage("Grafiken\M.bmp") Global stein_n = LoadImage("Grafiken\N.bmp") Global stein_o = LoadImage("Grafiken\O.bmp") Global stein_p = LoadImage("Grafiken\P.bmp") Global stein_q = LoadImage("Grafiken\Q.bmp") Global stein_r = LoadImage("Grafiken\R.bmp") Global stein_s = LoadImage("Grafiken\S.bmp") Global stein_t = LoadImage("Grafiken\T.bmp") Global stein_u = LoadImage("Grafiken\U.bmp") Global stein_v = LoadImage("Grafiken\V.bmp") Global stein_w = LoadImage("Grafiken\W.bmp") Global stein_x = LoadImage("Grafiken\X.bmp") Global stein_y = LoadImage("Grafiken\Y.bmp") Global stein_z = LoadImage("Grafiken\Z.bmp") ;--------------------------------Variablen Deklarieren ----------------------------------------------------------------------- MaskImage hintergrund, 255,0,255 SeedRnd MilliSecs() ZanfangEr = MilliSecs() ;Diese Variable wird nur manchmal deklariert und ist für das ERSTELLEN VON STEINEN zuständig ;Er == Erstellen ZanfangBe = ZanfangEr ;Diese Variable wird nur manchmal deklariert und ist für das BEWEGEN VON STEINEN zuständig ;Be == Bewegen Zmomentan = MilliSecs () ;Diese Variable wird jede Schleife neue deklariert MilisecNrstein = 1000 ;Millisekunden bis zum erstellen des nächsten Steins MilisecBestein = 30 ;Millisekunden bis zum Bewegen der Steine Global welcher = 0 ;Variable, die der Funktion 'Imageermitteln()' übergeben wird, die das richtigen Image für den Stein zum Ausgeben ermittelt Global stein ;Varable, die angibt welches Image ausgegeben wird ;---------------------------Typen und DIM-Felder------------------------------------------------------- Type Stein Field X, Y, Art, Bewegung ; Bewegung = 0 == Stein wird nicht gezeichnet ; Bewegung = 1 == Stein bewegt sich gerade ; Bewegung = 2 == Stein bewegt sich nicht ; ; Art = 97 == Art = "A" ; Art = 98 == Art = "B" ; Art = 99 == Art = "C" ; Art = 100== Art = "D" ; ... ; ... ; ... ; ... ; Art = 122== Art = "Z" End Type Dim Steine.Stein(60) For I = 1 To 60 Steine(I)= New Stein Steine(I)\Bewegung = 0 Next ;---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Graphics 800,600,0,2 SetBuffer BackBuffer () ;--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ;----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ;--------------------------------------------------------HAUPTSCHLEIFE--------------------------------------------------------------------------------------------------------------------------------------------------------------- ;----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Repeat Cls Zmomentan = MilliSecs() ;------------------------STEIN erstellen-------------------- If Zmomentan - ZanfangEr => MilisecNrstein For I = 1 To 60 If Steine(I)\Bewegung = 0 Then Welchespalte = Rand(1,6) If Welchespalte = 1 Then Welchespalte = 30 If Welchespalte = 2 Then Welchespalte = 114 If Welchespalte = 3 Then Welchespalte = 198 If Welchespalte = 4 Then Welchespalte = 282 If Welchespalte = 5 Then Welchespalte = 366 If Welchespalte = 6 Then Welchespalte = 450 Steine(I)\Bewegung = 1 Steine(I)\X = Welchespalte Steine(I)\Y = -5 Steine(I)\Art = Rand(97,122) Exit EndIf Next ZanfangEr = ZanfangEr + MilisecNrstein EndIf ;------------------------------------------------------------ Zmomentan = MilliSecs() ;-----------------------Steine bewegen----------------------- If Zmomentan - ZanfangBe => MilisecBestein For I = 1 To 60 If Steine(I)\Bewegung = 1 Then Steine(I)\Y = Steine(I)\Y + 1 EndIf Next ZanfangBe = ZanfangBe + MilisecBestein EndIf ;------------------------------------------------------------ ;----------------------Steine zeichnen(Grafik ausgeben)----------------------- For I = 1 To 60 If Steine(I)\Bewegung <> 0 Then welcher = Steine(I)\Art Imageermitteln(welcher) DrawImage stein, Steine(I)\X, Steine(I)\Y EndIf Next ;------------------------------------------------------------ DrawImage hintergrund, 0, 0 Flip Until KeyHit(1) ;--------- End;------ ;--------- ;--------------------------------------------------------FUNKTIONEN-------------------------------------------------------------------------------------------------------------------------------------------------------------------- ;---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ;(-)-[-]-{-}-\-/-{-}-[-]-(-)-(-)-[-]-{-}-\-/-{-}-[-]-(-)-(-)-[-]-{-}-\-/-{-}-[-]-(-)-(-)-[-]-{-}-\-/-{-}-[-]-(-)- Function Imageermitteln(welcher) If welcher = 97 Then stein = stein_a If welcher = 98 Then stein = stein_b If welcher = 99 Then stein = stein_c If welcher = 100 Then stein = stein_d If welcher = 101 Then stein = stein_e If welcher = 102 Then stein = stein_f If welcher = 103 Then stein = stein_g If welcher = 104 Then stein = stein_h If welcher = 105 Then stein = stein_i If welcher = 106 Then stein = stein_j If welcher = 107 Then stein = stein_k If welcher = 108 Then stein = stein_l If welcher = 109 Then stein = stein_m If welcher = 110 Then stein = stein_n If welcher = 111 Then stein = stein_o If welcher = 112 Then stein = stein_p If welcher = 113 Then stein = stein_q If welcher = 114 Then stein = stein_r If welcher = 115 Then stein = stein_s If welcher = 116 Then stein = stein_t If welcher = 117 Then stein = stein_u If welcher = 118 Then stein = stein_v If welcher = 119 Then stein = stein_w If welcher = 120 Then stein = stein_x If welcher = 121 Then stein = stein_y If welcher = 122 Then stein = stein_z End Function Danke im Voraus Prolapper |
||
P.S: ICH SUCHE NOCH EINEN GRAFIKER UND EINEN PROGRAMMIERER FÜR EIN RPG
E-Mail: prolapper@gmx.net |
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
also....
1.) Gib Graphics ganz an den Anfang. Weiß nicht, wie du es zusammengebracht hast, dass bei deiner Konstruktion kein Fehler kommt... Beim Aufruf von Graphics werden nämlich alle Graphiken gelöscht. 2.) Dein Spiel ist so langsam, weil du "Flip" drin hast. Schreib mal "Flip 0". Deine Berechnung selbst ist auf meinem PC blitzschnell, ein Schleifendurchlauf in weniger als 1ms 3.) Ich hatte keine Graphiken zum testen, also hab ich mir selber welche gemacht ![]() Code: [AUSKLAPPEN] SetFont LoadFont("Arial Black",24)
img=CreateImage(32,32) SetBuffer ImageBuffer(img) For i=65 To 90 Color Rand(0,255),Rand(0,255),Rand(0,255) Rect 0,0,32,32 Color 255,255,255 Text 16,16,Chr(i),1,1 SaveBuffer ImageBuffer(img),Chr(i)+".bmp" Next 4.) Ich würd die Graphiken übrigens in inen Array packen, wär "schöner" mfG, Christoph. |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
![]() |
prolapper |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hey danke für die schnelle Antwort.
Hab die Sachen etz umgeändert. Also auf des Array hat ich eigentlich selbst kommen müssen ^^. Aber trotzdem: Der Bildablauf ist sehr instabil. Mal raßen die Steine für 0,2 Sek. und dann ruckeln sie sich in beunruigend langsamen bewegungen zum Boden. Ich denke vielleicht gar nicht, dass es am rechenaufwand liegt, weil sich die schnellen und langsamen Bewegungsabschnitte im Durchschnitt auflösen und dann genau so schnell wären wie gewünscht. Aufgefallen ist mir auch , dass die Steine immer GENAU nach der ursprünglichen erdachten Zeit erstellt werden. *Verzweifel* Prolapper *EDIT : Hab etz mal nen FPS-berechner eingebaut und der gibt ein verblüffendes Ergebnis zurück: Der sagt, dass das bild sehr oft in der Sekunde aufgebaut wird. Also kann es nicht am Ausgeben der Grafiken liegen und am erstellen wie gesagt auch nicht. Es muss also ein Fehler am aktualiesieren der Stein positionen liegen. Aber ich weiß nicht welcher ?! |
||
P.S: ICH SUCHE NOCH EINEN GRAFIKER UND EINEN PROGRAMMIERER FÜR EIN RPG
E-Mail: prolapper@gmx.net |
![]() |
prolapper |
![]() Antworten mit Zitat ![]() |
---|---|---|
Etz versteh ich garnix mehr ...
Wenn ich etz irgendwo im Quellentext den Befehl Code: [AUSKLAPPEN] Print "..."
einfüg, dann funktionierts genau richtig. ????????????????????????????????????????????? Ist übrigens egal was der Befehl ausgibt, hauptsache er gibt was aus. Kann sich das jemand erklären ??? Später möcht ich dann nicht so einen gammigen Print-Befehl im Spiel haben ^^ |
||
P.S: ICH SUCHE NOCH EINEN GRAFIKER UND EINEN PROGRAMMIERER FÜR EIN RPG
E-Mail: prolapper@gmx.net |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group