Łukasz123 Temat założony przez niniejszego użytkownika |
Allegro-MMO obiekty gry » 2010-11-26 20:50:58 Witam!
Pisze właśnie MMO w paru bibliotekach(główna to Allegro) no i natrafiłem na problem a konkretnie wyświetlanie takich obrazków jak budynki,NPC,itemy itp...No i właśnie jak kombinuje to wychodzi mi zawsze tak że obrazki przy scrollowaniu mapy kafelkowej ciągle stoją na ekranie i jak daleko nie uciekne mapą to je widze ):
na dole umieszczam kod (nie komentować gre dopiero zaczełem :P)
#include <allegro.h> #include <winalleg.h> #include <windows.h> #include <vector> #include "pomocniczy.h" using namespace std;
int main() { allegro_init(); wartosci_klasy(); set_color_depth( 16 ); set_gfx_mode( GFX_AUTODETECT_WINDOWED, 820, 500, 0, 0 ); install_timer(); install_int_ex( increment_speed, BPS_TO_TIMER( 80 ) ); install_keyboard(); trawa = load_bmp( "trawa.bmp", default_palette ); postac = load_bmp( "postac.bmp", default_palette ); wyjscie = load_bmp( "exit.bmp", default_palette ); bufor = create_bitmap( 2000, 2000 ); while( !key[ KEY_ESC ] ) { while( speed > 0 ) { if( key[ KEY_LEFT ] && uzytkownik.postac_x > 0 ) { uzytkownik.postac_x--; if( map_x < 0 ) { map_x = map_x + 3; } } if( key[ KEY_RIGHT ] && uzytkownik.postac_x < 340 ) { uzytkownik.postac_x++; map_x = map_x - 3; } if( key[ KEY_UP ] ) { uzytkownik.postac_y--; map_y = map_y + 3; } if( key[ KEY_DOWN ] ) { uzytkownik.postac_y++; map_y = map_y - 3; } speed--; } clear_to_color( bufor, makecol( 0, 0, 0 ) ); for( int y = 0; y < 40; y++ ) for( int x = 0; x < 40; x++ ) { blit( trawa, bufor, 0, 0, x * 32 + map_x, y * 32 + map_y, 200, 200 ); } masked_blit( postac, bufor, 0, 0, uzytkownik.postac_x, uzytkownik.postac_y, postac->w, postac->h ); masked_blit( wyjscie, bufor, 0, 0, 10, 10, 3640, 3480 ); blit( bufor, screen, 0, 0, 0, 0, 3640, 3480 ); } save_bitmap( "ekran.bmp", screen, default_palette ); remove_int( increment_speed ); destroy_bitmap( trawa ); destroy_bitmap( bufor ); destroy_bitmap( postac ); allegro_exit(); return 0; } END_OF_MAIN();
pomocniczy.h
using namespace std;
class Cpostac { public: unsigned short hp; int Doswiadczenie; long level; int postac_x; int postac_y; int frames; bool kolizja; vector < int > ekwipunek_nr; vector < BITMAP > ekwipunek_bit; }; Cpostac uzytkownik;
volatile long speed = 0;
void increment_speed() { speed++; } END_OF_FUNCTION( increment_speed ); LOCK_VARIABLE( speed ); LOCK_FUNCTION( increment_speed );
int ekr_x, ekr_y; int map_x = ekr_x / 32; int map_y = ekr_y / 32;
BITMAP * trawa = NULL; BITMAP * bufor = NULL; BITMAP * postac = NULL; BITMAP * wyjscie = NULL; BITMAP * grafika = NULL; void wartosci_klasy() { uzytkownik.postac_x = 50; uzytkownik.postac_y = 50; }
Sora że niema grafik ale chyba się na tym forum nie da :P |
|
DejaVu |
» 2010-11-26 20:56:13 Sugerujesz, że obrazki (mapa i obiekty) nie reagują na wciskane klawisze czy co? |
|
Łukasz123 Temat założony przez niniejszego użytkownika |
» 2010-11-26 21:10:12 Nie,chodzi o to że jak scrolluje mape to ciągle widze na ekranie elementy które powinnem już ich dawno nie widzieć np.
mam mały domek na współrzędny 20,20 scrolluje mape (mapa_x,mapa_y)i moje współrzędne mają wartość 200,200 ale ciągle widze ten domek bo on nie zostaje w tyle tylko się za mną ciągnie ): |
|
DejaVu |
» 2010-11-26 21:13:43 Ja nie widzę w powyższym kodzie domku, ale jeżeli nawet by był to musisz zrobić:
blit( gdzies, cos, pozX - scrollX, pozY - scrollY,...);
Ty ustawiasz na sztywno pozycję zapewne na jakiej ma się wyświetlać, więc cały czas jest on widoczny na ekranie w tym samym miejscu. |
|
Łukasz123 Temat założony przez niniejszego użytkownika |
» 2010-11-26 21:16:18 Wielkie dzięki! A co do domku to to był przykład (: . |
|
ison |
» 2010-11-26 21:16:54 robisz grę MMO, mam nadzieję że zdajesz sobie sprawę ile to Cię będzie kosztowało pracy i umiejętności? Taki kod może mieć z 5000 linii jeśli chcesz używać zmiennych globalnych: to już skazujesz się na porażkę... a jeśli w funkcji main() inicjalizujesz allegro, ładujesz bitmapy i masz główną pętlę gry to tym bardziej masz większe szanse że się w tym wszystkim pogubisz |
|
DejaVu |
» 2010-11-26 21:20:16 Nie strasz go ;p niech się uczy :) fajnie, że konstruktywnie próbuje spędzać czas - im więcej błędów zrobi tym więcej wniosków będzie miał :) |
|
waxx |
» 2010-11-26 22:25:33 ison - lepiej sie uczyc piszac niz siedzac na dupie
ja pisze moja strategie multi juz chyba 5-ty raz :P i coraz lepiej mi to idzie [ostatnio byla playable dosc mocno] |
|
« 1 » |