[ vladaboy93 @ 11.03.2007. 09:01 ] @
| Već neko vreme pravim video igre u delphi-u 7 i treba mi pomoć oko jednog problema?
Kada pokrenem igru koju sam napravio svaki objekat koji se kreće
na bilo koji način (pomoću tajmera,pritiskom na dugme,..) secka (refreshuje se) to jest koči.
Ova pojava nema veze sa brzinom računara jer sam igricu pokretao
na raznim računarima i svuda je isto!!!!!
UNAPRED HVALA!!!!!
[Ovu poruku je menjao vladaboy93 dana 11.03.2007. u 15:38 GMT+1] |
[ Vladica Savić @ 11.03.2007. 12:37 ] @
Daj malo vise detalja...
[ savkic @ 11.03.2007. 12:38 ] @
> Kada pokrenem igru koju sam napravio svaki objekat koji se kreće
> na bilo koji način (pomoću tajmera,pritiskom na dugme,..) secka to jest koči.
Zapravo nisi ništa rekao, koji objekat, kako se iscrtava, kad se iscrtava... Mislim da se na netu mogu naći uputstva za pravljenje igrica u Delphiu, pretpostavljam da je tamo lepo opisano.
[ Vladica Savić @ 11.03.2007. 13:16 ] @
Nije rekao ni sta koristi, DirektX, OpenGL, ili sta i kako vec...
[ vladaboy93 @ 11.03.2007. 13:54 ] @
Svi objekti se kreću pomoću tajmera na minimalnom interrvalu (1) radi se o kvadratima i pravougaonicima koji se kreću od jednog do drugog kraja i nazad.Kreću se za određeni broj piksela 1 ili 5 ili 8 zavisi od objekta.
Svaki put kada se objekat pomeri za par piksela on prvo nestane pa se ponovo pojavi i tako stalno bez obzira za koliko se piksela pomera i tako ostavlja utisak da igrica secka to jest koči.
Postoje crveni i zeleni objekti koji se kreću (preko tajmera) i jedan mali plavi objekat koji se kreće pomoću tastature.Cilj igre je da se pomoću plavog kvadrata pokupi što više zelenih objekata (jer oni vremenom nestaju)i stigne do cilja u vremenu od 100 sekundi.
Ne koristim ništa drugo osim delphi-a 7 (šta bi mi vi preporučili)
unapred hvala!
[Ovu poruku je menjao vladaboy93 dana 11.03.2007. u 15:06 GMT+1]
[Ovu poruku je menjao vladaboy93 dana 11.03.2007. u 15:07 GMT+1]
[Ovu poruku je menjao vladaboy93 dana 11.03.2007. u 15:37 GMT+1]
[ bojan21 @ 11.03.2007. 13:56 ] @
Ako se ne varam, misli na sledece:
- ako recimo imamo slicicu loptice i hocemo da se ona dobija o ivice forme (tj, da se krece u prozoru) postavicemo tajmer koji ce je pomerati za nekoliko pixela na swakih 10-100ms.
- kad se radi o veoma maloj slicici swe ide glatko, medjutim ako je slicica malo veca (100*100px) kad god se pomeri na istek tajmera, program ce je refresh-ovati sto ce se primetiti kao treperenje.
Ja sam imao takaw problem (znaci, najprostija moguca igra bez koriscenja OpenGL-a ili DirectX-a), pa ako neko zna kako da se prevazidje to "widljivo" refresh-ovanje. Hvala
[ vladaboy93 @ 11.03.2007. 14:13 ] @
U pravu si slike jesu velike i stalno trepere to jest refreshuju se.Sa malim slikama je to slabo vidljivo ali sa velikim je to problem čak isa najbržim računarima.
Nije mi jasno kako bi DirektX pomogao ovom problemu.
Da li bi neko mogao da mi objasni.
[Ovu poruku je menjao vladaboy93 dana 11.03.2007. u 15:38 GMT+1]
[ savkic @ 11.03.2007. 15:07 ] @
> svi objekti se kreću pomoću tajmera na minimalnom interrvalu (1) radi se o kvadratima i pravougaonicima koji se kreću od jednog do drugog kraja i
> nazad.Kreću se za određeni broj piksela 1 ili 5 ili 8 zavisi od objekta.
TTimer (tj. windows timer) iako dozvoljava intervale od 1ms, zapravo ih ne podržava, najmanje što se može dobiti je 10ms ili više što zavisi od zauzetosti računara i programa. Naimer, timer poruke su poruke niskog nivoa i biće obrađene tek pošto se obrade sve ostale. Nisam se mnogo bavio igricama ali mi deluje da je bolje iscrtavanje prebaciti u Paint metodu. Kada stigne trenutak da se iscrta figura, to se uradi na osnovu njenih trenutnih pozicija, te trenutne pozicije se updejtuju protekom vremena, pritiskom na taster ili već prema zahtevima. Od izuzetne važnosti na skladno pomeranja figura je i način iscrtavanja, ali je to neka druga tema.
[ vladaboy93 @ 11.03.2007. 15:58 ] @
Za pravljenje video igara koji su mi sve programi potrebni (osim delphi-a)
HVALA!
[ Vladica Savić @ 11.03.2007. 16:30 ] @
Mozes da koristis OpenGL za pravljenje igara koji je Srki_82 lepo obradio od nule, isto vazi i za DirektX, a u sustini, ne moras da koristis nista drugo sem Delphi-a za pravljenje video igara. Samo skini OpenGl za Delphi komponente, instaliraj, prouci Srkijeve tutoriale i uzivaj... 
[ Nemanja_666 @ 11.03.2007. 17:19 ] @
Moze se taj problem veoma lako rijesiti.
Prvo napravis virtuelni komptabilni canvas na koji iscrtavas sve pa zatim sa tog kopiras na pravi.
Pogledaj demo folderu igru EarthPong iz tog dema ja sam naucio. Inace za igra u delphiju je najlakse da se radi sa GLScene na ovom forumu imas tutorijal koje napisao Srki za pocetak
[ Nemanja_666 @ 11.03.2007. 17:45 ] @
Ako ne uspijes sam resiti javi pa cu ti poslati jedan .dll koji sam radio koji ceto resiti. ali velike izmjene u tvojoj igri ce biti obavezne.
[ Whois @ 11.03.2007. 17:48 ] @
Postavi property DoubleBuffered od forme na True.
[ vlaiv @ 12.03.2007. 10:50 ] @
Takodje izbegavati Timer za takve stvari ...
Imas komponentu TApplicationEvents ...
Postoji event OnIdle, u njemu imas parametar Done koji postavis na false i dobio si gotovu "petlju" odnosno
aplikacija ce zvati taj event nonstop (kada god ne radi nista drugo - tipa update akcija i sl ... - sto je dosta cesto)
E jedino sto treba da se pobrines je time sinhronizacija ...
Tu mozes da odradis nesto poput
Code:
begin
if (Now-LastFrame)>PetnaestMS then
begin
LastFrame:=Now;
{ ovde odradis animaciju i sve to ... :) }
end;
Done:=false;
end;
LastFrame je TDateTime ...
PetnaestMS je TDateTime i ima vrednost od 15 milisekundi (to ti je za recimo nekih 60tak "frejmova u sekundi" - ovo je pod navodnicim
zato sto nema realne veze sa fps-om nego ima veze sa frekvencijom osvezavanja tvoje simulacije odnosno igre) ...
[ _v!rus_ @ 12.03.2007. 16:56 ] @
Nemas potrebe za Application.OnIdle, slobodno koristi tajmer jer ta tvoja aplikacija ne koristi nikakve ne-znam-kakve procesorske resurse za proracun, sve sto taj kod radi (pa jos x100) moze da stane u nekih 10ms procesorskog vremena.
Stavi doublebuffered property forme na True i postavi obavezno tajmer na 1000ms/RefreshRate monitora (refresh rate citaj iz ini fajla ili ga pokupi nekako od windowsa).
Tajmer koji pokrece logiku u igri i na kraju crta novo stanje mora biti celobrojno deljiv sa refresh rate-om monitora da bi dobio tecnu animaciju. Znaci, ako ti je refresh 60Hz, to je 60x za 1000ms, znaci tajmer mora biti 1000/60 = 16.67ms. Posto je ~16 najniža rezolucija normalnog tajmera na windows platformi, onda koristi duplo vecu, znači 33, a onda sve brzine objekata (tih tvojih 4, 8 pixela...) pomnozi sa 2.
[ Nemanja_666 @ 13.03.2007. 13:20 ] @
Ovako ce se uvek dobiti treperenje objekata(slika), jer koliko sam ja svatio ti ih direkno iscrtavas na formin Canvas i zbog toka dolazi
[ vlaiv @ 14.03.2007. 14:19 ] @
Mislim da tajmer nije dovoljno precizan (razlika postoji u intervalima, pogotovu kada windows nesto cacka po resursima), mada je pitanje da li ce se to primetiti ...
DoubleBuffered:=True; //ovo obavezno za TForm ...
I nemoj koristiti TImage ili slicno za objekte ... overrajduj paint metodu za TForm, pa direktno iscrtavaj na canvas slike sa draw metodama (da li stretch draw
ili obican ako je u pitanju bmp ili ga crtaj "rucno" ako je jednostavan oblik).
Treperenje moze u ovom slucaju lako da bude zbog toga sto si koristio TImage u koji si ucitao Jpeg ... a ako se ne varam on se dekodira svaki put na taj
nacin i uzima vreme procesora ...
[ bojan21 @ 15.03.2007. 14:15 ] @
Ili josh bolje, skini neki free engine i uzivaj (recimo Game Maker)  !
[ vladaboy93 @ 15.03.2007. 21:05 ] @
Da li postoji neki dobar engine za pravljenje video igrica koji podržava Delphi to jest paskal?
[ Nemanja Avramović @ 15.03.2007. 23:13 ] @
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|