mesajah Temat założony przez niniejszego użytkownika |
» 2010-11-13 13:59:37 rozwiązałem problem w 50%, bo jeśli jest SDL_MOUSEBUTTONDOWN to znaczy przytrzymanie ( SDL_MOUSEBUTTONDOWN - SDL_PrzyciskMyszyWcisnięty), a ja chcę , żeby działo się coś po kliknięciu , a nie przytrzymaniu. HELP |
|
DejaVu |
» 2010-11-13 14:05:15 Problem był wielokrotnie rozwiązany na forum dla biblioteki allegro. |
|
mesajah Temat założony przez niniejszego użytkownika |
» 2010-11-13 14:09:57 1. nie znam allegro 2. moge prosić o link ? |
|
DejaVu |
» 2010-11-13 14:57:38 |
|
mesajah Temat założony przez niniejszego użytkownika |
» 2010-11-13 15:30:53 już sam rozwiązałem , ale po naciśnięciu "start" ładnie pojawia się mapka i postać ( gwiazdka z painta ) . I tutaj stoi problem nie działa ruch , a oto kod : #include <SDL.h> SDL_Surface * ekran = NULL; SDL_Surface * ludek = NULL; SDL_Surface * start = NULL; SDL_Surface * przycisk = NULL; SDL_Surface * mapa = NULL; SDL_Rect start2; SDL_Surface * wyjscie2 = NULL; SDL_Rect wyjscie3; SDL_Event zdarzenie; SDL_Rect LudekDestination; SDL_Rect przyciskDane; SDL_Rect przyciskCel; SDL_Rect startDane; SDL_Rect startCel; int charx; int chary; int myszkaX, myszkaY; bool wyjscie = false;
int ruch() { SDL_Flip( ekran ); mapa = SDL_LoadBMP( "mapa.bmp" ); SDL_BlitSurface( mapa, NULL, ekran, NULL ); ludek = SDL_LoadBMP( "obraz.bmp" ); if( zdarzenie.type == SDL_KEYDOWN ) { switch( zdarzenie.key.keysym.sym ) { case SDLK_RIGHT: charx++; break; case SDLK_LEFT: charx--; break; case SDLK_UP: chary--; break; case SDLK_DOWN: chary++; break; case SDLK_ESCAPE: wyjscie = true; break; } } LudekDestination.x = charx; LudekDestination.y = chary; SDL_BlitSurface( ludek, NULL, ekran, & LudekDestination ); SDL_Flip( ekran ); return 0; }
int menu() { start = SDL_LoadBMP( "start.bmp" ); wyjscie2 = SDL_LoadBMP( "exit.bmp" ); start2.x = 200; start2.y = 100; start2.w = ekran->w; start2.h = ekran->h; wyjscie3.x = 210; wyjscie3.y = 150; wyjscie3.w = ekran->w; wyjscie3.h = ekran->h; przyciskDane.w = 220; przyciskDane.h = 46; przyciskCel.x = 210; przyciskCel.y = 150; startDane.w = 220; startDane.h = 46; startCel.x = 200; startCel.y = 100; SDL_BlitSurface( start, NULL, ekran, & start2 ); SDL_BlitSurface( wyjscie2, NULL, ekran, & wyjscie3 ); SDL_BlitSurface( przycisk, & przyciskDane, ekran, & przyciskCel ); if( zdarzenie.type == SDL_MOUSEMOTION ) { myszkaX = zdarzenie.motion.x; myszkaY = zdarzenie.motion.y; } if( zdarzenie.type == SDL_MOUSEBUTTONDOWN ) { if( zdarzenie.button.button == SDL_BUTTON_LEFT && ( myszkaX >= przyciskCel.x && myszkaX <= przyciskCel.x + przyciskDane.w ) &&( myszkaY >= przyciskCel.y && myszkaY <= przyciskCel.y + przyciskDane.h ) ) { SDL_FreeSurface( ludek ); wyjscie = true; } if( zdarzenie.button.button == SDL_BUTTON_LEFT && ( myszkaX >= startCel.x && myszkaX <= startCel.x + startDane.w ) &&( myszkaY >= startCel.y && myszkaY <= startCel.y + startDane.h ) ) { SDL_FreeSurface( start ); SDL_FreeSurface( wyjscie2 ); SDL_Flip( ekran ); ruch(); } } SDL_Flip( ekran ); return 0; }
int main( int argc, char * args[] ) { ekran = SDL_SetVideoMode( 640, 480, 32, SDL_SWSURFACE ); while( !wyjscie ) { while( SDL_PollEvent( & zdarzenie ) ) { if( zdarzenie.key.keysym.sym == SDLK_ESCAPE ) { wyjscie = true; } if( zdarzenie.type == SDL_QUIT ) { wyjscie = true; } menu(); SDL_FreeSurface( start ); SDL_FreeSurface( wyjscie2 ); } SDL_Flip( ekran ); } SDL_Quit(); return 0; }
Błagam ... pomóżcie ... |
|
DejaVu |
» 2010-11-13 18:01:58 Jak ma działać ruch skoro wywołujesz funkcję ruch w totalnie bezsensownym miejscu... |
|
mesajah Temat założony przez niniejszego użytkownika |
» 2010-11-13 18:11:41 to gdzie użyć ? |
|
DejaVu |
» 2010-11-13 18:20:06 W zasadzie widząc ten kod to mogę jedynie doradzić abyś zaczął pisać grę od nowa. Ładujesz bitmapy co chwilę do pamięci zamiast zrobić to raz. Gra powinna być zbudowana w sposób następujący:
1) Wczytanie zasobów
2) Pętla główna gry
Pętla główna gry powinna być zbudowana:
1) Sterowanie
2) Wyświetlanie obiektów na buforze
3) Wyswietlanie bufora na ekran
Sterowanie:
1) Żadnych pętli
2) Tylko ify lub switche
3) W sterowaniu zmienia się stany obiektów, takie jak np. pozycja obiektu, obecnie zaznaczony obiekt itp
Wyświetlanie obiektów na buforze:
1) Rysujesz wszystkie obiekty
2) Obiekty rysowane są w zależności od stanu zmiennych danego obiektu
3) Nie pobierasz żadnych iformacji w tej sekcji o wciskanych klawiszach, współrzędnych myszki itp.
|
|
1 « 2 » |