Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Allegro-MMO obiekty gry

Ostatnio zmodyfikowano 2010-11-26 22:25
Autor Wiadomość
Ł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)

C/C++
#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();
    // Ładowanie grafiki
    trawa = load_bmp( "trawa.bmp", default_palette );
    postac = load_bmp( "postac.bmp", default_palette );
    wyjscie = load_bmp( "exit.bmp", default_palette );
   
    // Tworzenie bufora
    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++ ) // |
        { //for begin
            blit( trawa, bufor, 0, 0, x * 32 + map_x, y * 32 + map_y, 200, 200 );
        } //for end
        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 );
       
    } //Koniec keylocka
    save_bitmap( "ekran.bmp", screen, default_palette );
    // Usuwanie wszystkiego z pamięci.
   
    remove_int( increment_speed );
    destroy_bitmap( trawa );
    destroy_bitmap( bufor );
    destroy_bitmap( postac );
    allegro_exit();
    return 0;
}
END_OF_MAIN();
//Koniec Funkcji Głównej


pomocniczy.h


using namespace std;
//klasa postaci


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;
   
}; //średnik konieczny!!!
Cpostac uzytkownik;

//timer (Volatile wyłącza stosowaną przez kompilator optymalizację.)     
volatile long speed = 0;

void increment_speed()
{ //Begin increment_speed.
    speed++;
} //End increment_speed.
END_OF_FUNCTION( increment_speed );
LOCK_VARIABLE( speed );
LOCK_FUNCTION( increment_speed );


//Dane potrzebne do scrollingu mapy i wyświetlenie kafli.
int ekr_x, ekr_y;
int map_x = ekr_x / 32;
int map_y = ekr_y / 32;
//Bitmaps,Samples,Datefiles
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
P-24524
DejaVu
» 2010-11-26 20:56:13
Sugerujesz, że obrazki (mapa i obiekty) nie reagują na wciskane klawisze czy co?
P-24525
Ł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 ):
P-24526
DejaVu
» 2010-11-26 21:13:43
Ja nie widzę w powyższym kodzie domku, ale jeżeli nawet by był to musisz zrobić:
C/C++
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.
P-24527
Ł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 (: .
P-24528
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:
C/C++
int ekr_x, ekr_y;
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
P-24529
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ł :)
P-24530
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]
P-24532
« 1 »
  Strona 1 z 1