Threadprogrammierung
Übersicht

Philipp J.Betreff: Threadprogrammierung |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo zusammen,
ich beschäftige mich nun seit einiger Zeit mit Blitz Basic, bin aber noch kein Profi ![]() im Moment probiere ich ein bisschen rum, um 1. Dinge dazuzulernen und 2. endlich mal ein vernünftiges Blindenspiel zu programmieren. Es regt mich total auf, dass es überhaupt keine vernünftigen Blindenspiele gibt! Deswegen programmier ich jetzt selber eins. Und in diesem Zusammenhang habe ich auch eine Frage: In meinem Spiel, dass so ähnlich wie "Port Royale" sein soll - falls ihr das kennt - soll es ein Zeitsystem geben. Das heißt, wenn das möglich ist, soll im Hintergrund eine spieleigene Zeitrechnung laufen. Ich habe erfahren, dass es in anderen Programmiersprachen eine sogenannte Threadprogrammierung dafür gibt, d. h. Befehle, die das Programm im Hintergrund ständig ausführt. Nun, meine Frage: Gibt es so etwas auch in BlitzBasic? WEnn ja, wie funktioniert es? WEnn nein, fällt euch eine andere Lösung zur Programmierung eines Zeitsystemes ein, bei dem die Zeit im Hintergrund konstant weiterläuft? Viele Grüße Philipp J. |
||
![]() |
Thorsten |
![]() Antworten mit Zitat ![]() |
---|---|---|
Millisecs() gibt dir die Zeit seit dem Start von Windows zurück.
Wenn du einmal am Anfang misst und dann Millisecs()-Anfangszeit rechnest, weißt du, wie lange das Spiel schon läuft. mfG Thorsten |
||
Philipp J. |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Gute Idee. Aber das Prblem ist, dass die Zeit dann nicht konstant im Hintergrund verläuft, sondern immer nur zu bestimmten Zeitpunkten, nämlich wenn diese Funktion, die ich dann schreiben würde, berechnet wird.
Die Zeit würde sich also "sprunghaft" bewegen und nicht kontinuierlich/konstant im Hintergrund laufen. |
||
![]() |
skey-z |
![]() Antworten mit Zitat ![]() |
---|---|---|
natürlich läuft die Zeit konstant im Hintergrund weiter, da bei jedem aufruf von millisecs() die aktuellen millisekunden seit dem PC start zurückgegeben werden, du solltest dir dann nur ne funktion schreiben, die in jedem Schleifendurchlauf aufgerufen wird und in unser Zeitformat (hh:mm:ss) ausgegeben wird. | ||
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz BAC#57: 2. Platz |
![]() |
tft |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo ...
gleich mit Threadprogrammierung anzufangen ist dann doch ein bischen fiel. Arbeite dich doch erst mal in die Grund möglichkeiten von BB ein. Eine Echte thread programierung wie in PP zum beispiel gibt es nicht in BB. Das must du alles selber Coden. Selbst BM ist noch nicht soweit. Das dies ohne komplikationen möglich ist. Es giebt einige Umwehge dies doch vorzuteuschen. Aber das setzt erheblich mer erfahrung in BB voraus. Versuche erst mal eine Inteligente Schleifenkonstruktion die mittels Type die Daten verarbeitet ohne das es im Haupt Loop besonders auffält. Aber prizipiel kann man das auch im BB Simuliren. Fiel Spass noch beim Tüfteln |
||
TFT
https://www.sourcemagic.ch Monkey,HTML5,CSS3,W 10 64 Bit, 32 GB Ram, GTX Titan, W8 ist Müll !!!!!! |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wenn du Threadprogrammierung oder etwas wie "parallel verarbeitung" möchtest, würde ich empfehlen speziell 2 Dinge mit in die Überlegungen einzubeziehen:
1. Echtzeit: Braucht man das in einem Spiel? Eigentlich nicht, von Userinput abgesehen. Eine tick basierende Welt funktioniert für gewöhnlich ebenfalls mindestens so gut. (kenne kaum eine kommerzielle 3D Engine die Echtzeit Simulation nutzt) 2. Wichtigste FPS Killbremse: Flip. Ich empfehle via Code dafür zu sorgen dass das nicht die ganze Zeit aufgerufen wird. Denn es ist ohne Frage (als blockender Befehl wenn nicht flip 0) der Hauptgrund dafür dass deine Tick Funktionen nimmer funktionieren können. Hinzu kommt das es keinen Sinn macht mehr Frames zu rendern als angezeigt werden können. Bei 60Hz kannst du so potentiell auf 300'000 mainloop durchläufe kommen mit input handling und so ... und an dem punkt ist millisec SOVIEL ungenauer als was du potentiell erreichen könntest, das es irrelevant wird ^^ |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
LukasBanana |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi,
ich hab mich auch schon gefragt ob es Thread- Programmierung in BB gibt! Aber anscheinend gibt es, wie auch schon "tft" sagte, in BB keine direkte Möglichkeit ein Thread im Hintergrund laufen zu lassen. Natürlich ist das nicht unbedingt nötig, aber es währe schon nicht schlecht, wenn ich in meinem Spiel z.B. die Sounds mit einem Thread laden könnte. Dadurch würde das Spiel jedenfalls schneller laden, denn durch Threads bekommt mein Programm 'mehr von der CPU ab'. Oder wie seht ihr das? Gruß LukasBanana |
||
Mein YouTube Channel: http://www.youtube.com/user/SoftPixel
Mein Twitter Profil: https://twitter.com/LukasBanana Meine Projekte auf github.com: https://github.com/LukasBanana Meine Projekte auf bitbucket.org: https://bitbucket.org/LukasBanana |
Philipp J. |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Dreamora hat Folgendes geschrieben: Wenn du Threadprogrammierung oder etwas wie "parallel verarbeitung" möchtest, würde ich empfehlen speziell 2 Dinge mit in die Überlegungen einzubeziehen:
1. Echtzeit: Braucht man das in einem Spiel? Eigentlich nicht, von Userinput abgesehen. Eine tick basierende Welt funktioniert für gewöhnlich ebenfalls mindestens so gut. (kenne kaum eine kommerzielle 3D Engine die Echtzeit Simulation nutzt) 2. Wichtigste FPS Killbremse: Flip. Ich empfehle via Code dafür zu sorgen dass das nicht die ganze Zeit aufgerufen wird. Denn es ist ohne Frage (als blockender Befehl wenn nicht flip 0) der Hauptgrund dafür dass deine Tick Funktionen nimmer funktionieren können. Hinzu kommt das es keinen Sinn macht mehr Frames zu rendern als angezeigt werden können. Bei 60Hz kannst du so potentiell auf 300'000 mainloop durchläufe kommen mit input handling und so ... und an dem punkt ist millisec SOVIEL ungenauer als was du potentiell erreichen könntest, das es irrelevant wird ^^ Sekunde... 1. Ich will das Spiel gar nicht in Echtzeit laufen lassen. Das ist ja genau der Punkt. Ich will es irgendwie schaffen, dass innerhalb des Spiels eine konstante Zeitrechnung abläuft. Ein Beispiel: während der Spieler mit seinem Schiff/seiner Flotte über das Meer reist, vergeht Zeit. Beträgt die Zeit, die der Spieler benötigt um von Insel A nach B zu kommen, z. B. 3 Tage (im Spiel), dann sollte nach jedem Tag angesagt werden können "jetzt ist ein tag vorbei", ohne, dass der Spieler tetwas tut (tAste drückt), um eine Funktion, die eine dafür nötige Zeitberechnung ausführt, zu starten. Die Zeit soll also nicht immer nur dann berechnet werden, wenn der Spieler durch eine Aktion eine diesbezügliche Funktion startet, sondern sie soll kontinuierlich im Hintergrund berechnet werden. 2. Was du da unter 2. geschrieben hast... hört sich nach Grafikprogrammierung an. Nur, um das nochmal klarzustellen: Das, was ich programmieren will, ist ein "Blindenspiel". D. H.: Keine Grafik! Von Grafikprogrammierung versteh ich auch nix... ![]() Also, ich brauche eine Lösung für mein Problem... Viele Grüße Philipp J. |
||
![]() |
aMulSieger des Minimalist Compo 01/13 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Problem? Da gibt es im eigentlichen Sinne kein Problem. Und wenn doch, dann heißt die Lösung Millisecs().
Man kann zum Beispiel in einer Variable speichern, bei wie vielen Millisekunden der letze Tag begonnen hat. Und dann fragt man jeden Schleifendurchlauf ab ob die Zeit die ein Spieltag in echt dauert schon rum ist, wenn ja wir die Variable auf diese neue Zeit gesetzt und die Meldung ausgegeben. So einfach ist das. |
||
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans! Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wenn es nur einen konstante Zeit braucht ist 1) mehr als ausreichend.
Dafür brauchst du bei weitem keine Threads, Threads braucht man nur wenn etwas "parallel" laufen muss. Für jede Stunde oder von mir aus Viertelstunde im Spiel gibt es einen Tick. Wenn es nur Text sein soll kannst du den Spass dann sogar noch mit delays füttern zwischen den ticks. Was du allerdings im endeffekt machst ist einfach eine Mainloop wo du bei jedem durchlauf die Zeit überprüfst. Wenn die zeitdifferenz zum letzten tick > als tickzeit ist (das wird unzählige loops dauern ohne zeichenoperationen. mit 60 FPS zeichnen komme ich auf fast eine halbe milliarde mainloop durchläufe wenn ich nur die FPS if-e. was du machst ist identisch nur das du net zeichnest ^^), dann rufst du einfach "doTick" auf wo alle deine Dinge drin sind. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group