Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Di Jul 15, 2025 17:12

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Sa Okt 08, 2005 23:13 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 20, 2005 13:18
Beiträge: 1054
Wohnort: Dresden
Programmiersprache: C, C++, Pascal, OPL
Guten tag,

Wie viele von euch vielleicht wissen (egal,ob gewollt oder nicht :twisted: ), bin ich gerade dabei ein Spiel in OpenGL zu schreiben. Selbiges hat (natürlich) auch die Möglichkeit alle Grafikmodi zu zeigen und das Spiel in einem der brauchbaran anzuzeigen. Unter Windows etwas ansich extrem simples, ist es unter SDL schier ein Ding der Unmöglichkeit.
Einige von euch, werden mir nun vielleicht einen wiki-Artikel aufschwatzen wollen, doch glaube ich, dass dieser nicht recht durchdacht war. Um es genauer zu sagen, scheint er 1:1 von der C-Vorlage übernommen zu sein und überhäuft mich deshalb mit Fehlermeldungen. Ich habe nun schon probiert mit Zeigern zu "jounglieren", zu allokieren und den Inhalt mal in einer Datei auszugeben. Doch alles führte zu einem Programmabsturz oder schwachsinnigen Resultaten (21723*2921 scheint mir eine SEHR komisches Auflösung).
Ansich vollkommen sinnlos, da auch dieses %d in der writeln-procedure (was wiederum für meine Theorie der billigen Kopie spricht).
SDL_ListModes
mfg Cyberpuer


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Okt 08, 2005 23:48 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Kannst du mal deinen Code posten... ?

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So Okt 09, 2005 00:19 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
Cyberpuer hat geschrieben:
Einige von euch, werden mir nun vielleicht einen wiki-Artikel aufschwatzen wollen, doch glaube ich, dass dieser nicht recht durchdacht war. Um es genauer zu sagen, scheint er 1:1 von der C-Vorlage übernommen zu sein

Fast richtig, da ich mit der Umstetzung der SDL-Konstrukte nach Pascal nicht sicher bin (wie könnte ich mir ein PPrect vorstellen?), habe ich einfach das Beispiel aus der Jedi-Hilfe-Datei übernommen.
Das mit dem Writeln stimmt aber schon, du bekommst die Ehre dies ändern zu dürfen.
Werde jetzt aber auch mal testen :)

Edit:
Habe ich schon erwähnt, dass ich Pointer hasse.
Besser gesagt nicht hasse, sondern mich nur nicht gut genug im Speicher bewegen können.
Getestet:
Anfangslösung:
Code:
  1. var modes : PPSDL_Rect;
  2.     p : Pointer;
  3.     i : integer;
  4. begin
  5.   // Bekomme mögliche Vollbild/Hardwaremodi
  6.   modes := SDL_ListModes( nil, SDL_FULLSCREEN or SDL_HWSURFACE );
  7.   // Überprüfung ob es mögliche Modi gibt
  8.   if (modes = PPSDL_Rect( 0 ) ) then
  9.   begin
  10.     WriteLn( 'Kein Modus verfügbar!' );
  11.  
  12.   end;
  13.   // Überprüfung ob die Auflösung beschrenkt ist
  14.   if ( modes = PPSDL_Rect(-1) ) then
  15.   begin
  16.     WriteLn( 'Alle Auflösungen möglich.' );
  17.   end
  18.   else
  19.   begin
  20.     // Ausgabe der möglichen Modi
  21.     WriteLn( 'mögliche Modi' );
  22.     i:=0;
  23.     //Funktioniert leider nicht so wie es hier steht, soll die Adresse von modes + i sein.
  24.    //daher das i-te Element im Array der PSDL_Rect.
  25.     p:=Pointer(PSDL_Rect(modes) + PSDL_Rect(i));
  26.     repeat
  27.       //hier dann der Zugriff auf das Element. Könnte auch PSDL_Rect(p) sein
  28.       WriteLn( 'Auflösung: '+InttoStr((SDL_Rect(p^).w));
  29.       i:=i+1;
  30.       //Auslesen des nächsten Pointers. Das Element nach dem Array ist ein nil-Pointer
  31.       p:=Pointer(PSDL_Rect(modes) + PSDL_Rect(i));
  32.     //Überprüfung auf den nil-Pointer  
  33.     until p=nil;
  34.   end;
  35. end;

Jedenfalls gibt das:
Code:
  1. WriteLn( 'Auflösung: '+InttoStr((modes^).w));

bei mir die hochstmögliche Breite aus.
Also SDL funktioniert schonmal[/pascal]


Zuletzt geändert von i0n0s am So Okt 09, 2005 00:41, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Okt 09, 2005 00:26 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Also das %d sind Formatstrings und sowas gibts durchaus. Sowas mach ich auch hin und wieder... Eventuell gabs das bei Delphi 3 noch nicht... :?

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Okt 09, 2005 01:19 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 20, 2005 13:18
Beiträge: 1054
Wohnort: Dresden
Programmiersprache: C, C++, Pascal, OPL
@Flash: Hättich, wäre aber wahrscheinlich eh schwachsinnig gewesen
@i0n0s: Danke ich werde ihn mal testen!
@Flash: Ich kenn die aus C, aber in Delphi waren sie mir neu...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Okt 09, 2005 16:54 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
Hier nochmal die richtige Lösung:
Code:
  1. var modes : PPSDL_Rect;
  2. begin
  3.   // Bekomme mögliche Vollbild/Hardwaremodi
  4.   modes := SDL_ListModes( nil, SDL_FULLSCREEN or SDL_HWSURFACE );
  5.   // Überprüfung ob es mögliche Modi gibt
  6.   if (modes = PPSDL_Rect( 0 ) ) then
  7.   begin
  8.     WriteLn( 'Kein Modus verfügbar!' );
  9.   end;
  10.   // Überprüfung ob die Auflösung beschränkt ist
  11.   if ( modes = PPSDL_Rect(-1) ) then
  12.   begin
  13.     WriteLn( 'Alle Auflösungen möglich.' );
  14.   end
  15.   else
  16.   begin
  17.     // Ausgabe der möglichen Modi
  18.     WriteLn( 'mögliche Modi' );
  19.     repeat
  20.       WriteLn( 'Auflösung: w: '+InttoStr((modes^)^.w)+' h: '+InttoStr((modes^)^.h));
  21.       Inc(modes);
  22.       //Überprüfung auf den nil-Pointer
  23.     until (modes^)=nil;
  24.   end;
  25. end;

Muss man erstmal draufkommen, dass es so einfach ist :(


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Okt 09, 2005 18:51 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 20, 2005 13:18
Beiträge: 1054
Wohnort: Dresden
Programmiersprache: C, C++, Pascal, OPL
Ich könnt dich knutschen!
Der Inhalt meiner log.txt (Konnt es ja nicht "normal" ausgeben):
Zitat:
mögliche Modi
Auflösung: w: 800 h: 600
Auflösung: w: 1024 h: 768
Auflösung: w: 960 h: 600
Auflösung: w: 848 h: 480
Auflösung: w: 800 h: 600
Auflösung: w: 720 h: 576
Auflösung: w: 720 h: 480
Auflösung: w: 640 h: 480
Auflösung: w: 640 h: 400
Auflösung: w: 512 h: 384
Auflösung: w: 480 h: 360
Auflösung: w: 400 h: 300
Auflösung: w: 320 h: 240
Auflösung: w: 320 h: 200
Auflösung: w: 640 h: 480

Das ist GENAU das, was ich haben wollte! :D


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Okt 09, 2005 18:57 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
Cyberpuer hat geschrieben:
Der Inhalt meiner log.txt (Konnt es ja nicht "normal" ausgeben):

{$APPTYPE Console} in die dpr ;)
Danach funktioniert writeln.

Zitat:
mögliche Modi
Auflösung: w: 800 h: 600
.
.
.
Auflösung: w: 640 h: 480


Das erstaunt mich gerade etwas.
Könnte es sein, dass 800*600 deine aktuelle Auflösung ist?
Weil ansich sollte 1024*786 der erste Wert sein.
Und diese 640*480 am Ende sind auch verwirrend.
Bei mir sind die Werte wie in der Doku steht der Grösse nach geordnet.
Edit: "Du kannst deinen neuen Betrag nicht so schnell nach dem anderen Absenden"
Ich will aber einen Fehler editieren :evil:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Okt 10, 2005 09:11 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 20, 2005 13:18
Beiträge: 1054
Wohnort: Dresden
Programmiersprache: C, C++, Pascal, OPL
Ja, das mit Apptype Console ist mir geläufig, nur war ich mir unsicher, ob es mit SDL funktioniert!
Und in Log.txt ausschreiben is immer praktisch! ^^
Tja, vielleicht ist meine SDL.dll zu alt und die Idee mit dem sinnvollem Ordnen kam erst später?
(1.0 habich glaubich)
Im übrigem ist meine Auflösunge 1024*768, das Maximum meines LCD.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Okt 10, 2005 10:23 
Offline
Fels i.d. Brandung
Benutzeravatar

Registriert: Sa Mai 04, 2002 19:48
Beiträge: 3830
Wohnort: Tespe (nahe Hamburg)
Also ich würde die Konsolenausgabe der Textdatei fast immer vorziehen. Liegt vielleicht daran, dass ich in der Konsole entwickel. ;)
SDL 1.0 wäre in der Tat bereits ein wenig alt und sollte ggf. durch eine zeitgemäße Version ersetzt werden (dll im Verzeichnis der exe oder System32). Bitte nicht verwechseln mit den Headern der JEDIS, die aktuell bei 1.0 sind, jedoch durchaus neuere SDL-Versionen abdecken.

_________________
"Light travels faster than sound. This is why some people appear bright, before you can hear them speak..."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Okt 10, 2005 18:35 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 20, 2005 13:18
Beiträge: 1054
Wohnort: Dresden
Programmiersprache: C, C++, Pascal, OPL
Ich hoffe es doch mal!
Wäre ja ziemlich dumm, wenn ein Programm auf einmal nich mehr funzen würde, oder?
Achja, was dich wahrscheinlich sehr interessiert:
Habe mir jetzt Ubuntu bestellt und bin soweit (glaub ich) mittlerweile vollkommen WinAPI-frei geworden. Lässt sich nicht genau feststellen, da Delphi ja Fileaccess z.b. immernoch über winapi regelt! :roll:
Aber ich komme dem Ziel näher mein Programm unter/für Linux compilieren zu können!


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ] 
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 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.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 16 Queries | GZIP : On ]