ElapsedMilliseconds mit BlitzMax ?
Übersicht

funkheldBetreff: ElapsedMilliseconds mit BlitzMax ? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo, guten Tag.
Wie kann man bitte ElapsedMilliseconds mit Blitzmax benutzen? Danke. Gruss |
||
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
BlitzMax: [AUSKLAPPEN] start=MilliSecs() Meinst Du sowas? |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
funkheld |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke.
So ähnlich. Muss aber noch kleiner sein als Milli. Gruss |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Falls du es für eine Zeitrechnung, wie in beispielsweise in Rennspielen benötigst, dann musst du wohl den Bewegungsvektor der durch das Ziel geht mit in die Zeit einrechnen. Das wird benutzt, wenn zum Beispiel zwei Spieler im selben Frame durch das Ziel fahren, der eine aber eine halbe Wagenlänge vor dem anderem war (das kann vorkommen, wenn die Geschwindigkeit der Fahrzeuge sehr schnell ist). Dafür rechnet man den Bewegungsvektor als zusätzliche Einheit zur Zeitrechnung mit ein.
Edit Eine genauere Zeiteinteilung als Millisekunden ergeben daher auch keinen Sinn, da ein Programm ja dann mit mehr als 1000 FPS laufen müsste, was in jeglicher Hinsicht quatsch ist. |
||
CO2ehemals "SirMO" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Naja, wenn es auf irgendeiner Art von Controller verwendet wird, kann ich mir schon vorstellen, dass Millisekunden zu grobkörnig sind.
Zum Thread: Ich kenne leider keine BlitzMax-Funktion, die soetwas kann. In C++ könnte es aber klappen. Ich versuche mal was zusammenzuschustern... EDIT: Ich weiß nicht, wie akkurat diese Lösung ist. C++ ("microsec.cpp") Code: [AUSKLAPPEN] #include <sys/time.h>
#include <unistd.h> #include <iostream> timeval *pTV = NULL; extern "C" void StartMicro() { if (pTV != NULL) delete pTV; pTV = new timeval(); gettimeofday(pTV, NULL); } extern "C" unsigned long long EndMicro() { if (pTV) { timeval TV2; gettimeofday(&TV2, NULL); unsigned long long retval = TV2.tv_usec - pTV->tv_usec; delete pTV; pTV = NULL; return retval; } else return 0ll; } BlitzMax: [AUSKLAPPEN] Import "microsec.cpp" |
||
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 |
funkheld |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke für die Info.
Dein C++ funktioniert. Gruss |
||
sinjin |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich habe es mal in Assembler gemacht, du benutzt/bzw du nimmst einfach den 1000 Millisekunden Timer...egal wann der aufgerufen wird...der wird einfach aufgerufen alle 1000 millisec, das hat sogar mit deiner Berechnung der Vektoren nichts mehr zu tun! Der wird vom Prozessor IMMER alle 1000 Millisekunden aufegrufen egal wo der CodePointer gerade ist, das kann auch inmitten deiner komischen Vectorberechnung passieren:
Code: [AUSKLAPPEN] ;in fs:si - ttimer ; bx:di - proc ; pushw - freq >=18 ;out es - destroyed proc ttimer_init xor ax,ax mov es,ax mov eax,[es:timerirq1 shl 2] mov [fs:si+ttimer.oldint],eax mov [fs:si+ttimer.start],round fldcw [fs:si+ttimer.start] pushd tickspersec mov bp,sp fild [word ptr ss:bp+8] fdiv [dword ptr ss:bp] pop eax fistp [fs:si+ttimer.start] mov ax,[fs:si+ttimer.start] mov [fs:si+ttimer.count],ax mov ax,timerfreq and 0FFFFh mov dx,timerfreq shr 16 div [word ptr ss:bp+8] cli mov [es:timerirq1 shl 2],di mov [es:timerirq1 shl 2+2],bx mov bl,al mov al,36h ;b67=counter0 b45=0-7,8-15 b123=square b0=binary out porttimer+03h,al mov al,bl out porttimer,al mov al,ah out porttimer,al sti retcode 2 endp |
||
sinjin |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Je länger und mehr du drüber nachdenkst, mein Code ist einfach schneller und wird auch correct aufgerufen, glaubst du Windows ist schneller? lol Windoof benutzt den selben "DOS"/Assembler code, Du schreibst dich einfach ein ![]() ![]() ![]() |
||
sinjin |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Du definierst einfach den Punkt der am nächsten der Motorhaube liegt, dann berechnest du halt nur den Punkt, anstatt alle durchzugehen welcher Punkt ist denn vorne ![]() So korrekt wie möglich, und der Computer rechnet so lange....zu lange! Vergiss das einfach!!!!!!!!! Für mich klappt, der Computer fährt, ok Mittelpunkt, Ziellinie, vorderster Punkt. vergiss die ganzen "korrekten" Berechnungen auch wenn ich gar keinen Mittelpunkt "in Wirklichkeit" habe, pfftt einen von den zwei Punkten, fertig! Als ob du das merkst!!!! Verstehste jetzt? Noch einmal, wenn es so korreckt wie möglich sein soll, das Spiel wäre mir zu lahm!!!! Wenn ich einfach über die Ziellinie fahre und der Computer auch....das will ich! Fertig! Auch die ganzen andere grossen Konzerne wie Sierra oder Lucas Games...Ziellinie...fertig!!!! Nich warten..oh, der einer Verktor war aber drüber nach den 1000 Berechnugen...wirklich? nee, der eine punkt IST einfach da!!!!! Fertig! Wenn dieses spezielle Ereignis stattfindet, dann kannste immernoch einfach nachprüfen, ok, der eine Punkt ist 0.1 grösser als der andere....FERTIG! DIE BERECHNING IST ERLEDIGT! du kannst dann ja immernoch hergehen...bla.....pffft wen interesiersts????? Du oder wir, werden es nicht checken!!!!!!!!! Ja genau: Rein mathematisch...warte mal....wie gesagt, ich will keine 5 Runden fahren um nachher zu hören: WARTE MAL hahaha Am Ende reichen mir die 1000 Millisekunden weil die einfach schneller als deine komischen 3D Berechnngen sind: fertig, der Computer hat nach 5 Runden gewonnen!!! Ende! 3 Millisekunden Unterschied.....Ende aus! Fertig!!!! Wenn du es wirklich korrekt haben möchtest...dann vergiss alle anderen Runden, nur die Ziellinie zählt, ja dann musst du eventuell alle Punkte checken und auch die Zeit!!!!! und sogar auch interpolieren zwischen den Punkten und der Zeit die du hast....ganz ehrlich? pfft Ist fast dasselbe, obwohl, da "merke" ich die Mathematik, ich habe ein Quadrat von 2x2 egal, aber ein Objekt kommt an mit einer Geschwindigkeit von 4x4, so gesehen hat mein Objekt mein Quadrat nicht mal gesehen....aber korrekterweise hat es geschnitten also doch berührt.....ganz erhrlich in Spielen? egal, dann ist es halt durch gegangen! Hatte ich ich in mehr oder weniger modernen Spielen X2...da war ich so schnell, ich bin einfach "durch" das Poratal geflogen....habe also nicht geportet...egal!!!!!!!!! Bei 2D Spielen finde ich es alldeing cool wenn die Spiele auch die Zeit betrachten, solche 2D- Berechningen sind nicht so Zeit intensiv wie bei 3D (Die 3D Berechnung dauert halt wesentlich länger als 2D, welch 3D Objekt kannst du dir vorstellen....welches 2D Object kannst du dir vorstellen?) 2D dauert nicht soo lange korrekt zu brechenen...omg ist bzw kann aber auch sehr schwer sein! |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich möchte dich bitten von Postings im trunkenen / benebelten Zustand abzusehen.
Danke. |
||
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 |
![]() |
Thunder |
![]() Antworten mit Zitat ![]() |
---|---|---|
Der Assemblercode ist sicher schnell... im Crashen
cli ist ein privilegierter Befehl, der im Userspace eine General Protection Exception auslöst. Beim C++ Code finde ich schade, dass es eine globale Variable gibt und dass new/delete verwendet wird. |
||
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Es gibt in Windows den QueryPerformance-Timer der genauer als Millionstel Sekunden ist. Man kann ihn gut dazu verwenden, die Zeit zwischen zwei Code-Zeilen zu messen. | ||
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe |
![]() |
Jolinah |
![]() Antworten mit Zitat ![]() |
---|---|---|
Im Codearchiv hatte ich mal ein Beispiel dazu gepostet, könnte vielleicht hilfreich sein ![]() https://www.blitzforum.de/foru...hp?t=33180 |
||
sinjin |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
So besser?
Code: [AUSKLAPPEN] addhook emiteventhook,hookemit function hookemit:object(id%,data:object,context:object) if (tevent(data).id=event_timertick) then print "ok" endif return data endfunction |
||
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
genau Jolinah, so geht das. Tolles Code-Beispiel | ||
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
sinjin hat Folgendes geschrieben: So besser?
Code: [AUSKLAPPEN] addhook emiteventhook,hookemit function hookemit:object(id%,data:object,context:object) if (tevent(data).id=event_timertick) then print "ok" endif return data endfunction Und was hat dein Code mit der Fragestellung im Thread zu tun? |
||
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 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group