Vista und Allegro(-Spiele)

Guten Abend zusammen,
ich habe folgendes Problem:
Ich nutze gerade Allegro um ein kleines Minispiel zu programmieren.
Um ein Gefühl für das Gestalten von Optionenmenüs zu bekommen,
habe ich mich ran gesetzt und (ebenfalls mit Allegro) ein Programm
erstellt, welches Einstellungen zeilenweise aus einer Datei liest (<- falls hier jemand Alternativen kennt, wäre ich für einen Vorschlag dankbar).
Unter Windows XP funktioniert das auch gut, habe das von allen die Windows XP nutzen bestätigt bekommen. Nur bei einem Freund lief es unter Vista nicht - die alleg42.dll liegt aber im selben Ordner. Ich konnte mir selbst (mangels Vista) kein Bild davon machen, worran es liegt, aber er sagte, dass ein Konsolenfenster erscheint, dann ein schwarzer Bildschirm ( liegt daran dass es eine Fullscreen Anwendung ist), wieder auf den Desktop, wieder der schwarze Bildschirm und das dann so 10 mal.
Kann jemand das Problem nachvollziehen bei Allegro-Spielen oder gibt es da Tipps, wie man programmieren sollte, um Vista zufrieden zu stellen?

edit: Habe gerade einen Beitrag im Allegro-Forum dazu gefunden, allerdings scheint das bei mir nicht zu helfen :(
 
Da freue ich mich wieder, weil immer mehr Leute auch hier im Board Allegro benutzen.
Zu deinem Problem würde ich sagen, dass es vermutlich ein Problem mit set_gfx_mode() bzw. set_color_depth() gibt. Du solltest verschiedene Farbtiefen und Auflösungen ausprobieren. Oft geht man diese Einstellungen in einer Loop durch bis set_gfx_mode() erfolgreich ist.
 
Okay, ich werd das mal testen lassen. Danke für den Hinweis :)

edit:

Ich habe irgendwie keine gescheite Schleife dafür hinbekommen, die nicht mit einem sofortigen Ende (return 0; sollte zurückgegeben werden, falls kein Grafikmodus erfolgreich sein sollte)

Ich hab das so versucht:
Code:
int xres = 1280;
int yres = 1024;
.
.
.
if (!set_gfx_mode(GFX_AUTODETECT, xres, yres, 0, 0))
{
  xres = 1024;
  yres = 768;
  if (!set_gfx_mode(GFX_AUTODETECT, xres, yres, 0, 0))
 {
    xres = 800;
    yres = 600;
    if(!set_gfx_mode(GFX_AUTODETECT, xres, yres, 0, 0))
    {
        return 0;
    }
  }
}

Ist das komplett falsch? Bei einer Schleife fehlte es mit irgendwie an einer eleganten Lösung, ehrlich gesagt hatte ich keine funktionierende. Ich hoffe das liegt nur an meinem Befinden :-D

Bei den obigen Fallunterscheidungen wird jedoch wie gesagt immer nur return 0; ausgeführt, alles andere wird ignoriert wie es aussieht.
 
Am einfachsten wäre es imho, wenn du zwei Arrays definierst, von denen eines die X-Auflösung für jeden Modus und das andere die Y-Auflösung für jeden Modus enthält. Diese Arrays durchläufst du dann einfach und wenn keine Auflösung, die funktioniert, gefunden wurde, beendest du das Programm. Das sollte dann ungefähr so aussehen:

Code:
#define MODES 3
int xres[] = { 640, 800, 1024 };
int yres[] = { 480, 600, 768 };
int found = 0;

for(int i = 0; i < MODES; i++)
{   if(set_gfx_mode(GFX_AUTODETECT, xres[i], yres[i], 0, 0))
    {   sprintf(stderr, "Benutze modus %dx%d\n", xres[i], yres[i]);
        found = 1;
        break;
    }
}

if(!found)
{   sprintf(stderr, "Kein passender Modus gefunden!\n");
    exit(-1);
}
 
@farheaven:
ganz meine Rede, allerdings sollte man auch Farbtiefen berücksichtigen.
Und bei sprintf() meinst du wohl printf().
 
Nicht ganz, ich meine tatsächlich sprintf, welches ermöglicht, in Ausgaben in Streams umzuleiten. Damit werden die Ausgaben nicht auf STDOUT sondern auf STDERR ausgegeben, um STDOUT für wirklich wichtige Sachen freizuhalten.
 
Zurück
Oben