24-bit ondersteuning voor Bitmaps in Allegro

Status
Niet open voor verdere reacties.

Crypt545

Gebruiker
Lid geworden
16 jun 2009
Berichten
352
Ik gebruik de ondertaande code als begin voor mijn game. Deze laadt alleen nog maar een achtergrond plaatje maar hij werkt alleen voor 256color en niet voor 24-bits bitmaps :(

Lees op internet dat 24-bits wel degelijk wordt ondersteund maar krijg het niet aangepast.

Ook wil ik graag weten hoe je een prioriteit geeft aan de plaatjes/layers, welke op de voorgrond staat en welke dan en welke dan. Geen idee welke keywords ik moet gebruiken om hiervoor te googelen!
--------------------------------------------------------------------------------------------------------------------------

#include <allegro.h>

BITMAP *back;

int main(){

allegro_init();
install_keyboard();
set_color_depth(16);
set_gfx_mode( GFX_AUTODETECT, 1152, 864, 0, 0);

back = load_bitmap( "back.bmp", NULL);

acquire_screen();


draw_sprite( screen, back, 0, 0);

release_screen();

readkey();

return 0;

}
END_OF_MAIN();


--------------------------------------------------------------------------------------------------------------------------
 
set_color_depth(16); moet 24 zijn in de code, vergissing. Snap echt niet waarom het niet wilde werken. Als ik een screenshot maak van de foto en de screenshot in paint laad en deze 24 bits opsla dan krijg ik de foto wel in beeld maar de originele niet beetje vaag en snap er geen donder van maar het werkt in elk geval....

Kun je die prioriteit op de voorgrond van die plaatje blijven bepalen door de volgorde waarin je ze laad of kom je dan in de problemen?
 
Als ik de vraag goed begrijp snap je je eigen code denk ik niet heel goed :)
De functie draw_sprite() zet de plaatjes op het scherm. Als je dan bvb 3 layers hebt, layer 3 achteraan, 2 in het midden en 1 vooraan, moet je dat in die volgorde op het scherm tekenen met draw_sprite();

Code:
draw_sprite( screen, layer3, 0, 0 );
draw_sprite( screen, layer2, 0, 0 );
draw_sprite( screen, layer1, 0, 0 );
 
Ja dit heb ik zo begrepen.

Maar als ik nu een 3 plaatjes heb, de achtergrond = layer 3 en een poppetje = layer 2 en een steen = layer 1. Het poppetje zit dus op de background achter een steen. Als ik dat poppetje nu naar voren wil laten lopen en van layer positie wil laten veranderen hoe doe je dit? Layer 2 moet dus Layer 1 worden.
 
Nee geen 3D. Zoals 2 tabladen in je browser. Zoals het hebben van 3 layers in photoshop. De middelste layer, het poppetje, moet op een gegeven moment van achter de voorste vandaan kunnen komen dus dus wisselen van layer positie. Dit is 2D maar geeft een 3D effect ja.
 
dan moet je de volgorde van layers tekenen veranderen: Als er op de toets gedrukt wordt, wordt de volgorde 3, 1, 2 i.p.v 3, 2, 1.
 
Het moet uiteindelijk niet aan een toets gelinkt worden maar zo ver ben ik nog niet ;)

Dit is wat ik ervan gebakken heb, dank je!

Code:
#include <allegro.h> 

int main(int argc, char *argv[]) 
{ 
    allegro_init();
    install_keyboard(); 
    set_color_depth(16);
    set_gfx_mode(GFX_AUTODETECT, 640,480,0,0);
	
	BITMAP *my_pic = NULL;
    BITMAP *back = NULL; 
	
	back = load_bitmap("back.bmp", NULL); 
	my_pic = load_bitmap("picture.bmp", NULL); 
	

	BITMAP *buffer = NULL;

	buffer = create_bitmap(640,480);
	

		
	int my_pic_x = 0;
	int my_pic_y = 0;
	
	while(!key[KEY_ESC])
	{
		
		
		if(key[KEY_RIGHT])
		{ 
			my_pic_x ++;
		} 
		else if(key[KEY_LEFT])
		{ 
			my_pic_x --;
		}
		else if(key[KEY_UP]) 
		{
			my_pic_y --;
		} 
		else if(key[KEY_DOWN]) 
		{ 
			my_pic_y ++;
		}
		

		if (key[KEY_R]){
		draw_sprite(buffer, back, 0, 0);
		draw_sprite(buffer, my_pic, my_pic_x, my_pic_y); 
    }
    else if (!key[KEY_R]){
         draw_sprite(buffer, my_pic, my_pic_x, my_pic_y); 
         draw_sprite(buffer, back, 0, 0);
         }
		blit(buffer, screen, 0,0,0,0,640,480); 
		clear_bitmap(buffer); 
        }

	destroy_bitmap(my_pic); 
    destroy_bitmap(back);
	destroy_bitmap(buffer); 
	return 0; 
} 
END_OF_MAIN()
 
Als de laag met de steen voor de rest transparant (eigenlijk paars #FF00FF) is en je laat het poppetje verplaatsen dan word het vanzelf zichtbaar.
 
Yep, ik zoek eigenlijk een stukje code dat de paarse pixels van het plaatje leest en dit uitvoert in x,y coordinaten zodat ik dit kan gebruiken voor het schieten.

Ben nu bezig met mijn mouse pointer plaatje en de collision box voor de vijand maar dalijk moet die wel langs de steen kunnen schieten. andere oplossing is de steen in kleine plaatjes snijden maar vind het leuker om zo'n code te implementeren!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan