Lagi programu przy dużym obrazku w allegro5

0

Programy które robiłem póki nie używałem dużego obrazka były ok. Ostatnio naszła mnie chęć zrobienia snakea. Stworzyłem więc plansze 800x600 i załadowałem do gry. Efekt? Strasznie mało fpsów. Nie wiem co z tym zrobić, a grać się tak nie da. Obrazek ten ma 250kb, jeśli załaduje jakiś co ma np. 50kb to problemu nie ma, ale wtedy nie ma i jakości..
Przy okazji, jeśli mam tą plansze 800x600 a będę chciał zrobić zmiane rozdzielczości, to muszę skombinować planszę w wiekszej rozdzielczości, czy da się to jakoś przeskalować?
Oto kod:

#include <allegro5/allegro.h>
#include <allegro5/allegro_native_dialog.h>
#include <allegro5/allegro_font.h> 
#include <allegro5/allegro_ttf.h> 
#include <allegro5/allegro_primitives.h>
#include <allegro5/allegro_image.h>
#include <allegro5/allegro_native_dialog.h>
//#include <iostream> 




void main()

{


	al_init();
	al_install_keyboard();
	al_install_mouse();

	al_init_primitives_addon();
	al_init_font_addon();
	al_init_image_addon();
	al_init_native_dialog_addon();
	int x = 220, y = 220;
	ALLEGRO_FONT * font8 = al_create_builtin_font();

	ALLEGRO_KEYBOARD_STATE klawiatura;
	ALLEGRO_MOUSE_STATE mysz;

	const int maxframe = 1;
	int curframe = 0;
	int framecount = 0;
	int framedelay = 1;
	ALLEGRO_BITMAP *image[maxframe];
	ALLEGRO_BITMAP *plansza=al_load_bitmap("plansza.gif");
	//image[0] = al_load_bitmap("p1.png");
	//image[1] = al_load_bitmap("p2.png");
	//image[2] = al_load_bitmap("p3.png");
	//image[3] = al_load_bitmap("p4.png");
	//image[4] = al_load_bitmap("p5.png");
	//image[5] = al_load_bitmap("p6.png");


	ALLEGRO_TIMER *timer = al_create_timer(1.0 / 60.0);
	ALLEGRO_EVENT_QUEUE *event_queue = al_create_event_queue();
	al_register_event_source(event_queue, al_get_keyboard_event_source());
	al_register_event_source(event_queue, al_get_timer_event_source(timer));
	al_start_timer(timer);

	al_set_new_display_flags(ALLEGRO_WINDOWED);
	ALLEGRO_DISPLAY *okno = al_create_display(800, 600);
	al_set_window_title(okno, "Pierwsza gra xD");
	al_show_mouse_cursor(okno);




	



	//al_convert_mask_to_alpha(obrazek, al_map_rgb(255, 255, 255));

	//al_draw_bitmap(obrazek, 220, 220, 4);
	//al_draw_rectangle(2.5, 3.5, 5.5, 5.5, al_map_rgb(255, 255, 0), 1);
	//al_flip_display();



	double czas = al_get_time();


	//for (int i = 0; i < maxframe; i++)
	//{
	//	al_convert_mask_to_alpha(image[i], al_map_rgb(255, 255, 255));
	//}
	



	while (!al_key_down(&klawiatura, ALLEGRO_KEY_ESCAPE))

	{

		ALLEGRO_EVENT events;
		al_wait_for_event(event_queue, &events);
		ALLEGRO_MOUSE_STATE state;
		al_get_mouse_state(&state);
		al_get_keyboard_state(&klawiatura);
		al_get_mouse_state(&mysz);
		
		if (events.type == ALLEGRO_EVENT_TIMER)
		{


			if (++framecount >= framedelay)
			{
				if (++curframe >= maxframe)
				{
					curframe = 0;
					framecount = 0;
				}
			}



			if (al_get_mouse_state_axis(&state, 0))
			{
				x = state.x;
			}



			if (al_get_mouse_state_axis(&state, 1))  { y = state.y; }



			
			al_draw_bitmap(plansza, 0, 0, 0);
			al_draw_filled_circle(state.x, state.y, 4,al_map_rgb (128, 128, 128));
			al_draw_filled_circle(state.x - 8, state.y, 4, al_map_rgb(128, 128, 128));
		//	al_draw_bitmap(image[curframe], x, y, 0);
			al_flip_display();
			al_clear_to_color(al_map_rgb(0, 0, 128));
			//al_rest(0.07);




		}


	}

//	for (int i = 0; i < maxframe; i++)
	//{
	//	al_destroy_bitmap(image[i]);
	//}

}





0

Nikt nic nie wie? :(
Tutaj załączam skompilowany program jak i jego źródło: http://www40.zippyshare.com/v/81709405/file.html

Bardzo proszę o jakąkolwiek pomoc,bo dalej bez tego nic nie idzie zrobić...

0

czy fps'y spadaja z czasem czy od razu sa "lagi". Sproboj skonvertowac tez plansze na bmp

0

Problem rozwiązany, obrazek był ładowany przed utworzeniem okna i dlatego tak się działo.
Tutaj było rozwiązanie: https://www.allegro.cc/forums/thread/614271

1 użytkowników online, w tym zalogowanych: 0, gości: 1