Allegro zur Visuellen Darstellung mit C

Neue Frage »

Auf diesen Beitrag antworten »
Matze84 Allegro zur Visuellen Darstellung mit C

Hallo zusammen.....
Ich bin gerade dabei zu versuchen, mich ein bisschen mit Allegro zu beschäftigen. Allegro Wiki

Ich will "einfach" einen Roten Hintergrund und einen Grauen Querstrich. von oben links nach unten rechts machen.... Der ist natürlich abhängig von der Auflösung.

Meine Idee war, mir eine Farbe zu definieren mit:
code:
1:
2:
ALLEGRO_COLOR     Red=al_map_rgb(200,0,0);
ALLEGRO_COLOR   Grey=al_map_rgb(100,100,100);

damit ich nicht jedesmal, wenn etwas rot sein soll ich den gesamten Befehl eingeben muss
Außerdem habe ich mit die Bildschirmauflösung besorgt und mit
code:
1:
2:
3:
4:
ALLEGRO_DISPLAY MODE    display_data;
al_get_display_mode((al_get_num_display_modes()-1,&display_data);
im struct display_data gespeichert.

Dann komm ich an die Stelle wo Hintergrund und Kästchen "gemalt" werden sollen.
code:
1:
2:
3:
al_clear_to_color(Red); //Cleart den Screen und macht dann den Hintergrund in der Farbe die oben gesetzt wurde.
al_draw_filled_rectangle(0,0,display_data.width,display_data.height,Grey)

Der macht aber den Hintergrund schwarz und kein Rechteck.....
Wenn ich jeweils "Red" und "Grey" durch
code:
1:
al_map_rgb(x,x,x);
ersetze, dann macht er das.....

Wenn fragen sein sollte oder was nicht bekannt dann einfach fragen, dann poste ich das noch Augenzwinkern
 
Auf diesen Beitrag antworten »
eulerscheZahl

Ich bin leider bei dem Versuch gescheitert, allegro in Visual Studio einzubinden.
Die Codeschnipsel zur Farbdefinition sehen aber richtig als (vgl hier)
Steht das alles in der selben Funktion?

Edit: habe es zum Laufen gebracht.
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
#include <stdio.h>
#include <allegro5/allegro.h>
#include <allegro5/allegro_primitives.h>

int main(int argc, char **argv)
{
    ALLEGRO_DISPLAY *display = NULL;
	al_init();
	al_init_primitives_addon();
    display = al_create_display(640, 480);
	ALLEGRO_COLOR     Red=al_map_rgb(200,0,0);
	ALLEGRO_COLOR   Grey=al_map_rgb(100,100,100);
	al_clear_to_color(Red);
	al_draw_filled_rectangle(100, 100, 200,200, Grey);
	al_flip_display();
	getchar();
}

funktioniert bei mir.
Auf diesen Beitrag antworten »
Matze84

komisch bei mir geht das nicht...

könntest du sonst mal meinen Code testen?

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
#include <stdio.h>
#include "conio.h"
#include <allegro5/allegro.h>
#include <allegro5/allegro_image.h>
#include <allegro5/allegro_primitives.h>
 
int main(int argc, char **argv){
 
   ALLEGRO_DISPLAY*			display = NULL;
   ALLEGRO_DISPLAY_MODE		display_data;
   ALLEGRO_DISPLAY_MODE		my_display;
   ALLEGRO_EVENT_QUEUE*		event_queue=NULL;
   ALLEGRO_EVENT			ev;
   ALLEGRO_TIMEOUT			timeout; 
   ALLEGRO_COLOR			color_Red=al_map_rgb(200,0,0);
   ALLEGRO_COLOR			color_Grey=al_map_rgb(100,100,100);

   if(!al_init()) {
		fprintf(stdout, "failed to initialize allegro!\n");
		return -1;
   }
   if(!al_init_image_addon()){
	   fprintf(stdout, "failed to initialize image_addon!\n");
	   return -1;
   }
   if(!al_init_primitives_addon()){
	   fprintf(stdout, "failed to initialize image_primitives!\n");
	   return -1;
   }
   al_get_display_mode((al_get_num_display_modes()-1),&display_data);
   al_get_display_mode((al_get_num_display_modes()-10),&my_display);
    fprintf(stdout,"Ihre momentane Bildschirmauflösung ist: %i x %i",display_data.width,display_data.height);
	fprintf(stdout,"Meine Lieblings-Bildschirmauflösung ist: %i x %i\n Daher werden wir auch ein Fenster mit dieser Auflösung erstellen.",my_display.width,my_display.height);
	puts("Bitte wählen Sie einen Modus aus, in dem das nächste Fenster erstellt werden soll.");
	puts("[1] Vollbildmodus\n[2] Fenstermodus");
	char auswahl=_getch();
	switch(auswahl){
		case '1':
			al_set_new_display_flags(ALLEGRO_FULLSCREEN);
			break;
		case '2':
			break;
		default:
			puts("Sie haben eine ungültige Auswahl getroffen!\nDaher nehme ich den \"Vollbildmodus\" an.");
			al_set_new_display_flags(ALLEGRO_FULLSCREEN);
			_getch();
	}
	display = al_create_display(my_display.width,my_display.height);
	if(!display) {
		fprintf(stdout, "failed to create display!\n");
		return -1;
	}
	al_set_window_title(display,"Testfenster");
	event_queue= al_create_event_queue();
	if(!event_queue){
		fprintf(stdout,"failed to create event queue!\n");
		al_destroy_display(display);
		return -1;
	}
	al_register_event_source(event_queue,al_get_display_event_source(display));
	al_clear_to_color(al_map_rgb(100,100,100));
	
   
	al_flip_display();
 
   while(1)
   {
		al_init_timeout(&timeout,0.06);
		bool get_event = al_wait_for_event_until(event_queue,&ev,&timeout);
		if(get_event&&ev.type==ALLEGRO_EVENT_DISPLAY_CLOSE){
			break;
		}
															/* UM DIESE BEIDEN ZEILEN HIER GEHT ES!!!!!*/
															al_clear_to_color(color_Red);
															al_draw_line(0,0,my_display.width,my_display.height,color_Red,10);
															//
		al_flip_display();
		if(auswahl!='2'){
			al_rest(25.0);
			break;
		}
   }

   al_destroy_event_queue(event_queue);
   al_rest(1.0);
   al_destroy_display(display);
 
   return 0;
}


Danke aber schon mal!
Auf diesen Beitrag antworten »
eulerscheZahl

1. Du verwendest zweimal color_Red - rot auf rot sieht man schlecht.
2.
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
int main(int argc, char **argv){
 
   ALLEGRO_DISPLAY*			display = NULL;
   ALLEGRO_DISPLAY_MODE		display_data;
   ALLEGRO_DISPLAY_MODE		my_display;
   ALLEGRO_EVENT_QUEUE*		event_queue=NULL;
   ALLEGRO_EVENT			ev;
   ALLEGRO_TIMEOUT			timeout; 
//   ALLEGRO_COLOR			color_Red=al_map_rgb(200,0,0);
//   ALLEGRO_COLOR			color_Grey=al_map_rgb(100,100,100);

   if(!al_init()) {
		fprintf(stdout, "failed to initialize allegro!\n");
		return -1;
   }
   ALLEGRO_COLOR			color_Red=al_map_rgb(200,0,0);
   ALLEGRO_COLOR			color_Grey=al_map_rgb(100,100,100);

erst al_init(), dann die Farbdefinition (habe es beim zeilenweisen dubuggen gemerkt, da war geweils noch eine 0 bei den Farbwerten)

3."Ihre momentane Bildschirmaufl÷sung ist: 1440 x 900Meine Lieblings-Bildschirmaufl
÷sung ist: 1680 x 1050"
Das ist falsch, ich habe eine Auflösung von 2650*1440
 
Auf diesen Beitrag antworten »
Matze84

Erstmal DICKES DANKE!

Zitat:
Original von eulerscheZahl
1. Du verwendest zweimal color_Red - rot auf rot sieht man schlecht.

Stimmt, habs vergessen zurück zu ändern... sollte eigentlich rot auf grau sein! egal.
Zitat:

erst al_init(), dann die Farbdefinition (habe es beim zeilenweisen dubuggen gemerkt, da war geweils noch eine 0 bei den Farbwerten)

ok das erklärt dann, warum das "bild" schwarz war.
Zitat:

3."Ihre momentane Bildschirmaufl÷sung ist: 1440 x 900Meine Lieblings-Bildschirmaufl
÷sung ist: 1680 x 1050"
Das ist falsch, ich habe eine Auflösung von 2650*1440

Sehr merkwürdig... aber gut das das mal jmd getestet hat/gesehen hat Augenzwinkern


DANKE DANKE DANKE

PS: obwohl es mich doch stark wundert, das "meine Lieblingsauflösung" größer ist als deine angebliche.....
Das soll so eigentlich nicht sein... aber gut... mal schauen!

EDIT: Hast du einen 2ten Bildschirm(den du als Hauptschirm benutzt), der eine andere Auflösung unterstützt???

WEIL: ich hab eigentlich nur 1440x900 und nen 2ten Schirm (Hauptschirm) mit 1920x1080 dran!
In dem Fenster startet auch das Programm... und er sagt mir, das ich angeblich 1920x1080 hätte..... Was gemäß Systemeinstellungen aber nicht simmt Augenzwinkern
Auf diesen Beitrag antworten »
eulerscheZahl

Zitat:
Original von Matze84
Hast du einen 2ten Bildschirm(den du als Hauptschirm benutzt), der eine andere Auflösung unterstützt???

Nein, ich habe nur einen Monitor angeschlossen (Samsung SyncMaster SA850).
Auf diesen Beitrag antworten »
Matze84

komisch....
nagut... ich werde dem demnächst mal auf den Grund gehen!
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »