Ressourcen sparen bei Zufallseditor

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Lars

Betreff: Ressourcen sparen bei Zufallseditor

BeitragDi, März 09, 2010 22:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey Allerseits!

Ich programiere momentan einen Zufallseditor für mein 2d jump and run Spiel.
Allerdings zieht der entweder sehr viel ressourcen und oder da functioniert etas nicht.
Der Codeabschnitt vom editor ist:
Code: [AUSKLAPPEN]
Function zufallf()

         gy=0   
         a=0

         [color=red]Repeat[/color]   

               SeedRnd MilliSecs ()

         Repeat
               zwy = Rnd(0,9)
               zwx = Rnd(1,6)
               
               If zwy=0 Then y=350-(gy+0)
               If zwy=1 Then y=350-(gy+12)
               If zwy=2 Then y=350-(gy+24)
               If zwy=3 Then y=350-(gy+36)
               If zwy=4 Then y=350-(gy+48)
               If zwy=5 Then y=350-(gy+60)
               If zwy=6 Then y=350-(gy+72)
               If zwy=7 Then y=350-(gy+84)
               If zwy=8 Then y=350-(gy+96)
               If zwy=9 Then y=350-(gy+108)


               If zwx=1 Then map%(0,y) = 1
               If zwx=2 Then map%(44,y) = 1
               If zwx=3 Then map%(88,y) = 1
               If zwx=4 Then map%(132,y) = 1
               If zwx=5 Then map%(176,y) = 1
               If zwx=6 Then map%(220,y) = 1
                             
               

               
               a=a+1

          Until a=10       

          gy=gy+109

          [color=red]Until gy>=109[/color]                 
               

End Function


Wenn man die rote schleife allerdings mit einenm Until was erst bei über 109 aufhört fnktioniert garnichts mehr!
Ich hoffe auf Hilfe!

LG Lars

Pokoyo

Betreff: Re: Ressourcen sparen bei Zufallseditor

BeitragDi, März 09, 2010 22:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi, habe mir jetzt nicht alles angesehen aber dies :

Lars hat Folgendes geschrieben:

If zwy=0 Then y=350-(gy+0)
If zwy=1 Then y=350-(gy+12)
If zwy=2 Then y=350-(gy+24)
If zwy=3 Then y=350-(gy+36)
If zwy=4 Then y=350-(gy+48)
If zwy=5 Then y=350-(gy+60)
If zwy=6 Then y=350-(gy+72)
If zwy=7 Then y=350-(gy+84)
If zwy=8 Then y=350-(gy+96)
If zwy=9 Then y=350-(gy+108)


könntest du schonmal ersetzen durch : y=350-gy+(zwy*12)
spart dir schon mal ein paar if abfragen Smile

gruss pokoyo


edit rechtschreibung Wink
|Win10 64bit|FX 8350@4,5 GHz|Asrock 990FX Killer Fatality|16GB HyperX|R9 290X|Blitz3D|BlitzMax|

Midimaster

BeitragMi, März 10, 2010 9:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Deine innere Schleife wird dann abgebrochen, wenn a=10. Dies kann nur beim ersten Mal der Fall sein. Da Du a in der äußeren Schleife nicht wieder auf 0 setzt, wird es im 2.(äußeren) Durchgang nun auf 11 bis 20 gestellt.

Meiner Meinung nach muss die Zeile "A=0" nach dem "roten" Repeat im code stehen.


BlitzBasic: [AUSKLAPPEN]
Function Zufallf()
Local Gy%, A%, X%, Y%
Repeat
SeedRnd MilliSecs ()

For A=1 To 10
zwY = Rnd(0,9)
zwX = Rnd(1,6)
Y=350-gY+zwY*12
X=zwX*44
Map(X,Y) = 1
Next

gY=gY+109
Until gy>109
End Function

So sieht die Funktion etwas gestrafft aus:
1. Wenn Du eine feste Anzahl Durchläufe A% erwartest, kannst Du es ebenso mit einer For/Next-Schleife machen.
2. Aus den Zufallszahlen zwX und zwY lassen sich in deinem Code die Map-Koordinaten ausrechnen, weil sie ja in deinen IF-Abfragen linear um 12 bzw. 44 ansteigen (wie Pokoyo schon geschrieben hat und mit den Zufallszahlen in Korrelation stehen. If-Abfragen sind immer dort sinnvoll, wenn die Geltungsbereiche völlig zusammenhanglos sind (oder scheinen...)

Der Abbruch "Until gY>109" macht eigentlich auch wenig Sinn, da auch dieser Zustand immer nach dem 2.Durchlauf erreicht wird. Hier wäre auch eine "For b%=1 to 2"-Schleife denkbar.
 

Lars

BeitragMi, März 10, 2010 17:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für die Antworten!
Jetzt läuft alles!

LG Lars

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group