|
Pravljenje igara Programski jezici, tehnike, alatke u službi pravljenja igara... |
|
Alatke vezane za temu | Vrste prikaza |
7.11.2010, 17:25 | #1 |
Član
Član od: 14.4.2010.
Lokacija: Podgorica
Poruke: 332
Zahvalnice: 61
Zahvaljeno 11 puta na 11 poruka
|
Allegro bug, draw_sprite i show_mouse
Napravio sam igricu u C jeziku, koristeci Allegro biblioteke. Igrica savrseno radi medjutim postoji jedan bug.
Prvo: Koristim double buffer tehniku (mislim da je to to: kada napravim bitmap buffer pa na njega stavljam sprites i onda ga takvog iscrtavam na screen, umjesto so bih sprites direktno iscrtavao na screen). Na ekranu se pojavi tabla sa 15x15 polja. Ucestvuju 4 igraca. Igrac treba da klikne na polje, da bi se na tom polju ucrtalo njegovo slovo. Pobjednik je onaj koji prvi sklopi cetiri ista slova. Igrica je slicna Iks-Oks igrici. (to je igrica) Drugo(bug): Kada ja kliknem na polje, i ostavim kursor misa tu gde jeste, slovo se ne isrcta cijelo, nego samo onaj dio koji nije prekriven misom :/. A ako kliknem na polje i brzo pomerim misa slovo se citavo iscrta SS: http://img838.imageshack.us/f/bugze.png/ (samo nema misa, nmg njega da uhvatim xD) Petlju koju koristim za iscrtavanje Kod:
while (!close_button_pressed) // Ako je pritisnuto close dugme u titlebar-u zavrsi while petlju { show_mouse(buffer); blit(buffer, screen, 0,0,0,0,WINDOW_X, WINDOW_Y); CheckWinner(); // Provjerava pobjednika, ako ima pobjednika winner = 1 if (mouse_b & 1 ) { mx = mouse_x; my = mouse_y; if ( (mx >= 268 && mx <= 611) && (my >=16 && my <= 360) ) // Dio table na koji moze da se klikce, sve ostalo se ne prihvata { Koordinate(mx, my); // dodjeljivanje koordinata slovu koje treba da se isrcta kao i odredjivanje broja polja koje je kliknuto i u koje treba da se ucrta slovo sleep(200); // Kada kliknem na polje, program ucita da sam vise puta pritisnuo klik, zato koristim sleep(200)l, da program ucita samo 1 klik. if(polje[p] == 0) // Ako je polje prazno, upisi slovo, ako nije, ne radi nista { if(i == 1) polje[p] = 'P'; // popunjava polje za kasniju provjeru pobjednika if(i == 2) polje[p] = 'M'; if(i == 3) polje[p] = 'N'; if(i == 4) polje[p] = 'L'; draw_sprite(buffer, data[i++].dat, koordinata_x, koordinata_y); printf("Slovo: %c\n", polje[p]); } show_mouse(buffer); } } if(i == 5) i = 1; // igraci su definisani promenjljivom i, ako je i = 5,(peti igrac ne postoji) vrati i na 1 (igrac 1 je ponovo na potezu) if (winner == 1 ) // Ako ima pobjednika, obrisi tablu za novu rundu { NewRound(); // Ako ima pobjednika izvrzava se ovo. Ovo cisti citavu tablu, i namjesta sve opcije za novu partiju } http://www.sendspace.com/file/k1ctjw (Mislim da su to svi potrebni fajlovi, da se igrica startuje na bilo kom racunaru, ako nesto fali, napomenite) Primjeticete da postoji konzola. Na pocetku startovanja programa, pali se konzola i u njoj kucate nikove za igrace P, M, N i L. Zatim se pali igrica. Konzola i dalje ostaje i u njoj ce se ispisivati koordinate i broj polja. Poslednja ispravka: clzola (7.11.2010 u 17:43) |
7.11.2010, 21:14 | #2 |
Član
Član od: 14.4.2010.
Lokacija: Podgorica
Poruke: 332
Zahvalnice: 61
Zahvaljeno 11 puta na 11 poruka
|
Re: Allegro bug, draw_sprite i show_mouse
Uspio sam da rijesim problem:
"Description void show_mouse(BITMAP *bmp); Tells Allegro to display a mouse pointer on the screen. This will only work if the timer module has been installed. The mouse pointer will be drawn onto the specified bitmap, which should normally be `screen' (see later for information about bitmaps). To hide the mouse pointer, call show_mouse(NULL). Warning: if you draw anything onto the screen while the pointer is visible, a mouse movement interrupt could occur in the middle of your drawing operation. If this happens the mouse buffering and graphics drawing code will get confused and will leave 'mouse droppings' all over the screen. To prevent this, you must make sure you turn off the mouse pointer whenever you draw onto the screen. This is not needed if you are using a hardware cursor. Note: you must not be showing a mouse pointer on a bitmap at the time that the bitmap is destroyed with destroy_bitmap(), e.g. call show_mouse(NULL); before destroying the bitmap. This does not apply to `screen' since you never destroy `screen' with destroy_bitmap()." Tako da sam u gornjem kodu prije linije: draw_sprite(buffer, data[i++].dat, koordinata_x, koordinata_y); stavio show_mouse(NULL); tako da program makne kursor prije crtanja a zatim ga ponovo vrati. Poslednja ispravka: clzola (7.11.2010 u 22:08) |
Bookmarks sajtovi |
Alatke vezane za temu | |
Vrste prikaza | |
|
|
Slične teme | ||||
tema | temu započeo | forum | Odgovora | Poslednja poruka |
Allegro | clzola | Programiranje | 0 | 1.11.2010 18:09 |