Frage zu Schleifen
Übersicht

CO2ehemals "SirMO"Betreff: Frage zu Schleifen |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo,
Es wird ja oft gesagt, dass Befehle wie "Delay()" schlecht für die programmierung wären, da sie das ganze Programm "aufhalten". Wie sieht das mit Schleifen aus, ich meine die halten ja auch das Programm auf, bis eine Bedingung erfüllt wurde. In dem Spiel was ich im Moment programmiere, brauche ich Schleifen die das Programm nicht aufhalten bis eine Bedingung erfüllt ist, sondern sie soll parallel zum Programm arbeiten, wie könnte ich das anstellen? |
||
mfG, CO²
Sprachen: BlitzMax, C, C++, C#, Java Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du machst in jedem Durchlauf deiner Hauptschleife nur einen Durchgang deiner 'nebenbeischleife' und speicherst die Werte wo Du in der Schleife stehst zwischen. | ||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Der Sinn vom Delay() ist ja gerade das "aufhalten". Streng genommen geht die Kontrolle zurück an das Betriebssystem, das dann in der Zeit andere Aufgaben erledigen kann. So verbraucht z.b dieses Programm 100% Prozessorleistung und stresst die Grafikkarte, obwohl es nix neues zu Zeichnen gibt:
BlitzBasic: [AUSKLAPPEN] Repeat So beruhigt sich der Rechner und zeichnet das "Bild" wenigsten nur 60x pro Sekunde: BlitzBasic: [AUSKLAPPEN] Repeat Anmerkung: ginge natürlich auch mit einem Timer, aber Marius94 wollte was mit "Delay" sehen! Um nun in eigenen Programmen auf etwas zu warten, programmierst du keine Schleifen, die erst verlassen werden, wenn das Ereignis eintritt: Nicht nachmachen: BlitzBasic: [AUSKLAPPEN] Repeat da hättest du, wie du schon selber angemerkt hast eine Schleife, die wieder die ganze Performance frisst und den Prozessor stresst. Besser wäre es, den Zustand nur 1x kurz abzufragen und dann wieder in das Hauptpgramm zu springen. Dort reagierst du auf den Zustand: BlitzBasic: [AUSKLAPPEN] Graphics 800,600,0,2 Ein schöner Effekt ist, dass Du jetzt auf das Ereignis warten kannst und die Hauptschleife trotzdem ständig läuft. Als Beweis die Zeile mit dem Millisecs(). Und wegen des Delay 15 ist die Systemauslastung unter 5% |
||
CO2ehemals "SirMO" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
dankeschön für die Antworten.
Wenn ich jetzt aber machen will, dass der Tank leerer wird nach ein paar sekunden (100%, 99%, usw.) wie mache ich das? ich kann da ja nicht nur einmal kurz einen Zustand abfragen, sondern dass muss parallel zum Programm laufen, außerdem muss ja auch je nach Geschwindigkeit des Fahrzeuges der Tank schneller oder weniger schnell leerer werden. |
||
mfG, CO²
Sprachen: BlitzMax, C, C++, C#, Java Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti |
![]() |
ozzi789 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Etwas eigen Initative wäre sinnvoll, d.h Tutorials lesen und rumpröbeln.
Nimm dir nicht zu viel vor wenn du erst gerade angefangen hast. Hier mal ein pseudo code Code: [AUSKLAPPEN] Global tank#=100
Global speed#=0 While Not KeyHit(1) Cls If KeyDown(57) And speed#<320 speed#=speed#+1 Else If speed#>0 speed#=speed#-1 EndIf EndIf tspeed#=speed#/10000 tank#=tank#-tspeed# Text 0,0,"Geschwindigkeit (erhöhen mit leertaste): "+speed# Text 0,20,"Tankinhalt: "+tank#+"%" Flip Wend Falls dus nicht verstehst, frage ruhig. mfg ozzi |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
CO2ehemals "SirMO" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ok danke | ||
mfG, CO²
Sprachen: BlitzMax, C, C++, C#, Java Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti |
![]() |
TimBo |
![]() Antworten mit Zitat ![]() |
---|---|---|
dein Problem kann man auch ganz gut mit [[Millisecs()]] lösen.
Du speicherst einmal die Anfangszeit des Programmes und dann nimmst du die aktuelle Zeit. Die Differenz ist die Zeit, die das Programm schon läuft. 100-Zeit wäre dann die Ausgabe. Grüße TimBo |
||
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31 hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group