Feindlich Linien: Allegro! Bilder vom Bildschirm auslesen
-
Hallo,
ich bin auf dem Gebiet C/C++ noch relativ unerfahren, und habe es jetzt geschafft, Allegro zu installieren (Dev C++, Mingw32). Vorher habe ich mich lange mit QuickBasic rumgeschlagen, und es dort relatiuv weit gebracht. Momentan arbeite ich mit BlitzBasic, dem besten Basic-Dialekt überhaupt, aber auch mit C muss man sich ja mal anfreunden.
Mein Problem:
Ich möchte eine GTA-Steuerung basteln. Unter BB ist sowas ja kein Problem. Es funktioniert fast alles, aber trotzdem gibt es einen Haken. Um mehr Speed rauszuholen, drehe ich alle Bilder am Anfang. Danach möchte ich sie abspeichern und in ein Arry packen:BITMAP* image[359] for(frame=0;frame<360;frame++) { image[frame]=(BITMAP*)gfx_datafile[CAR_RED].dat; rotate_sprite(buffer,image[frame],0,0,itofix(frame)); /* Hier muss der Befehl hin, das Bild vom Bildschirm zu lesen */ }
Ich weiß, dass 360 Bilder zu viele sind. Das kann man ja später variieren. Was ich brauche ist ein Befehl a la GET in Qbasic.
Danke im Vorraus,
LordChaos/edit: Vor.r.aus wir verboten, toll.
-
LordChaos schrieb:
Vor.r.aus wir verboten, toll.
Weil es falsch ist. Es heißt "voraus".
An Deinem Array ist was falsch.
Wenn es 360 Elemente haben soll, dann muss es [360] heißen, und nicht [359].
Dahinter fehlt außerdem das Semikolon.Ansonsten verstehe ich nicht, was das Problem sein soll. Versuch mal, nicht in BASIC zu denken. Du musst nichts auf den Bildschirm malen, um es dann mit einer Art von "GET" wieder abzufragen.
-
Ok, das mit dem Array war jetzt schnell hingeschmiert. Das mit Voraus ist mir jetzt etwas peinlich.
Nein, also das Problem ist, dass ich mein Programm möglichst gut optimieren möchte. Echtzeitrotation ist momentan noch möglich, da ich kein transparentes Sprite benutze, aber die bessere Methode ist wahrscheinlich, alle Bilder vorzuberechnen und in ein Array zu speichern.
Sowas wie:image[i]=rotate_sprite(buffer,image[0],0,0,itofix(i));
funktioniert nicht.
Grüße,
LordChaos
-
Das kann ja auch gar nicht gehen, weil rotate_sprite doch kein BITMAP* liefert.
Du musst schon 360 BITMAPs erzeugen und dann rotate_sprite aufrufen, mit dem jeweiligen BITMAP als Zieloberfläche.
-
He, Danke! Habs jetzt hinbekommen. Leider gibt es da noch ein Problem:
Wie kann ich die Image-Größe korrekt zuschneiden? Da beim Rotieren sich die Bildgröße ja dauernd verändert, muss sich diese ja auch verändern. Gibt es in Allegro einen passenden Befehl dazu, oder muss man die Werte errechnen (ist sicher nicht schwer)?Grüße,
LordChaos
-
Versuch mal, nicht in BASIC zu denken. Du musst nichts auf den Bildschirm malen
Selbst in Basic wäre das unsinnig.
Bye, TGGC \-/