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]);
//}
}