Hi!
Ich beschäftige mich zur Zeit mit dem Umstieg auf SDL und bin bisher schon recht überrascht, wie einfach das eigentlich war Beim näheren Blick fällt mir allerdings auf, dass ich ja um die Anwendung auch auf anderen Platformen starten zu können, auf einige von Windows gelieferte Units und damit auf viele Funktionen verzichten muss (Ich schätze mal SysUtils ist ne Windows Unit!?).
Da wären u.a. folgende Dinge die mir ins Auge fallen:
1. In der SysUtils gab es einen TFileStream. Aber wie soll ich das jetzt meine Dateien laden, ohne den?
2. Ich bräuchte den Pfad der ausführenden Datei. Wie bekommt man den ohne dass ich eine Form habe?
3. Die Maustasten kann ich zwar alle wunderbar abfangen, aber wie geht das mit dem Mausrad?
Registriert: Mo Jan 20, 2003 20:10 Beiträge: 424 Wohnort: nähe Starnberg
Die Units SysUtils, Classes und ContNrs kann ich unter Windows und Linux verwenden. Mein SDL - Beispiel läuft unter beiden Welten ohne Quellcode - Änderung, habe aber nicht jede Klasse geprüft.
Die ganzen Delphi-Units sind erstmal von Borland. Von denen gibt es ein paar, die plattformspezifischen Code enthalten. Du merkst das daran, dass du beim Kompilieren unten eine Warnung stehen hast, dass die Unit 'FileCtrl' z.B. nicht Cross-Platform ist.
_________________ "Für kein Tier wird so viel gearbeitet wie für die Katz'."
Zuletzt geändert von Frase am Fr Okt 21, 2005 15:18, insgesamt 1-mal geändert.
Hallo nochmal,
Ich habe jetzt ein neues Projekt angefangen, und dementsprechend noch nicht viel Performanceraubendes eingebaut, also noch läuft die ganze Sache recht schnell. Allerdings ist das SDL_GetTicks dafür ziemlich ungenau, da es zumindest beim timebased movement schon ein Unterschied ist, ob ein Frame 1, 2, 3, 4 oder mehr Millisekunden gebraucht hat. Später fällt das bei ~100 fps natürlich nicht mehr so auf, aber zur Zeit ist es schon ziemlich nervig, wenn das auf einmal doppelt so schnell läuft wie noch vor zwei Sekunden. Kennt jemand vielleicht eine elegantere Lösung als die Framerate zu begrenzen?
Danke
Registriert: Sa Jan 01, 2005 17:11 Beiträge: 2068
Programmiersprache: C++
Schau dir das Spiele-Tutorial von Sascha an.
Dort behandelt er ausführlich Timebasedmovement.
Funktioniert so wie ich es verstanden habe aber nur unter Windows
Ja, das kenn ich schon, da war der Zähler auch genau genug. Aber ich bin ja auch auf SDL umgestiegen wegen der Platformunabhängigkeit :-/ Dafür noch ne Windowsfunktion zu benutzen wär Blödsinn
Also das was später in SDL soll. Wäre nett wenn du die Procedure in Pascal übersetzen könntest und hier postest.
Mit Assembler habe ich keine Erfahrung.
PS:
In der todo steht auch das die Mousewheelteile eigene Events werden sollen
Registriert: Sa Nov 13, 2004 11:00 Beiträge: 229 Wohnort: Steinhude
hab zum rdtsc vor einiger zeit mal ein unit geschrieben. sollte halbwegs verständlich sein, wenn sich jemand dafür interessiert.
ansonsten macht man das hier:
Code:
Code:
void ReadTSCLow( unsigned int& runLow )
{
__asm cpuid
__asm rdtsc
__asm mov runLow,eax
}
imo in pascal am besten so:
Code:
Function GetHRSCounter :int64;
asm
push ebx;
xor eax, eax;
cpuid;
rdtsc;
pop ebx;
end;
wobei das cpuid nur benötigt wird, um sicherzugehen, dass die vorherlaufenden instructionen abgeschlossen sind. wenns nicht absolut genau sein muss tuts auch das hier:
Code:
Function GetHRSCounter :int64;
asm
rdtsc;
end;
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Registriert: Di Dez 02, 2003 12:47 Beiträge: 300 Wohnort: Marburg
Moment:
Zitat:
Die ganzen Delphi-Units sind erstmal von Borland. Von denen gibt es ein paar, die plattformspezifischen Code enthalten. Du merkst das daran, dass du beim Bompilieren unten eine Warnung stehen hast, dass die Unit 'FileCtrl' z.B. nicht Cross-Platform ist.
und solange da keine warnung steht, müsste mein prog auch unter linux laufen??? Ich dachte immer das währe schwieriger. (habe leider kein linux... noch nicht!)
_________________ Nothing, oh sweet nothing,
today we are doing nothing at all...
http://www.geo-progs.de
Registriert: Do Jun 19, 2003 10:44 Beiträge: 991 Wohnort: Karlsfeld (nahe München)
geo hat geschrieben:
Moment:
Zitat:
Die ganzen Delphi-Units sind erstmal von Borland. Von denen gibt es ein paar, die plattformspezifischen Code enthalten. Du merkst das daran, dass du beim Bompilieren unten eine Warnung stehen hast, dass die Unit 'FileCtrl' z.B. nicht Cross-Platform ist.
und solange da keine warnung steht, müsste mein prog auch unter linux laufen??? Ich dachte immer das währe schwieriger. (habe leider kein linux... noch nicht!)
Also Delphi 5 hat mich nie davor gewarnt, warum auch? Die haben ja mit Freepascal und Lazarus nichts am Hut.
_________________ Danke an alle, die mir (und anderen) geholfen haben. So weit... ...so gut
Die Platform-Abhängigkeitswarnungen kommen erst seit Delphi 6.
Geo, das bezieht sich ausschließlich auf Units. Wenn du VCL-Komponenten verwendest, die es in CLX nicht gibt, dann hast du ein Problem. Solange du aber nur standard-Komponenten der VCL verwendest oder gleich von Anfang an CLX-Komponenten dürfte das kein Problem sein.
Sprich: Um mit Delphi X-Platform zu schreiben, schreibt man eine CLX-Anwendung und verzichtet auf Windows-spezifische Units wie FileCtrl. Solange in einem CLX-Projekt keine Warnung auftritt, dass es nur unter Windows läuft, kann man es auch unter Kylix compilieren und zum laufen bringen. Cross-Platform ist gar nicht so schwer. Man muss nur auf einige Dinge verzichten.
Theoretisch sollte es auch möglich sein, VCL-Anwendungen zur LCL (Lazarus-Component Library) zu konvertieren. Deren Umfang ist aber AFAIK noch kleiner als der der CLX.
_________________ "Für kein Tier wird so viel gearbeitet wie für die Katz'."
Mitglieder in diesem Forum: 0 Mitglieder und 6 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.