[ _v!rus_ @ 06.01.2005. 20:30 ] @
Imate klasu TTetris(tetris.pas) i primer implementacije u TetrisTheGame.dpr
Pravio sam za maturski iz informatike jos davno...
Ideja je bila da se napravi tetris klasa nezavisna od implementacije (tekstualni, graficki, sa misem, tastaturom, dzojstikom, nebitno), vezba enkapsulacije...
Da mi nije trebao Read i Write ne bi koristio ni jedan unit...
Probajte i uzivajte...

Btw., ako vam se svidi i koristite ga preko 15 dana posaljite neki kes... ;)
[ Srki_82 @ 06.01.2005. 22:01 ] @
Lepa igra, nema sta :)
Sta mislis da li bi napravili dobru igru ako bi radili zajedno? I mozda jos neko? :)


[ _v!rus_ @ 06.01.2005. 22:04 ] @
Naravno!!!
Vec duzem vreme razmisljam o pravljenju jump'n'run igre u mariovskom stilu, ali ne polazi mi za rukom da napravim nesto korisno. Prosto me sramota sobzirom da zutaci vec 20-ak godina prosto "stancuju" slicne igre od 8-bitnih dana na ovamo, a ja nikako da maknem sa mrtve tacke...

Kakav bi bio osnovni mehanizam jedne takve igre, Npr.
Level->Timer
->PlayMap ->...
->Player
->NPC[] ->...
Kako implementirati "realnu" fiziku (inerciju, trenje, gravitaciju...) imam neke ideje ali..
Organizovati je kao tilove ili bas pixel-precise...

Svi koji su raspolozeni za cito teoretisnje na ove teme neka postuju ako imaju vremena, ili jos bolje, ako neki iole iskusniji delphijevci bi hteli da naprave nesto sl. drage volje bi se pridruzio...
[ Srki_82 @ 06.01.2005. 22:20 ] @
Za takvu igru je sasvim dovoljno koristiti tile nego neku precizniju tehniku za detektovanje sudara... mozda bi mogli da se koriste regioni, ne zauzimaju previse memorije, prilicno su brzi i PREEEEEEEEEEEEEETERANO ih je lako koristiti :)

Obozavam da pravim igre... trenutno pokusavam da napravim klon asteroid-a, ali nikako da nadjem vremena za to. Vise volim da citam forume i pomazem drugima :) Pogledaj na mom sajtu (geocities) da vidis kako za sad radi. Trenutno postoji neka da kazemo fizika za brodic i detekcija sudara za asteroide (igrac i dalje prolazi kroz njih i naravno jos uvek ne puca) :) Jedini problem je sto sam to radio u C++-u, a ne u Delphi-u.

Dakle... Mario style igra... tile based, simple phisyc, timer based, pure GDI (mozda GDI+), KeyUp+KeyDown input... mislim da je to sasvim dovoljno. Najteze od svega ce biti dizajniranje nivoa i crtanje :) To mi je uvek najteze :P I, da... uvek treba na pocetku znati sta ce sve moci da se radi u igri, a ne da se na pola puta neko seti "Hej... igrac bi mogao i da leti". Kad pocninjemo... sta pravimo? :P


[ _v!rus_ @ 06.01.2005. 22:26 ] @
Bas lepo sto hoces da se pridruzis!
Ajde posto mi devojka vec cupka ovde pola sata (oce da me vodi do hrama na spaljivanje badnjaka) napravicu nesto pa cu postovati...
Sto se tice tvog problema sa manjkom vremena, sve mi je jasno...
[ _v!rus_ @ 07.01.2005. 15:05 ] @
Evo preliminarne (0.0.0.0.0.1:-) verzije engine-a za jump'n'run sa trenjem, inercijom i gravitacijom...
Ako uspem ovo da pojednostavim & poboljsam, sve ostaloce biti lakse.
Feel free to modify & post...
[ Srki_82 @ 07.01.2005. 16:26 ] @
Lepa fizikica za karaktera. Sasvim dovoljna za ovakav tip igre. Pad i slicne stvarcice nece biti tako tesko odraditi. Kada igrac "sidje" sa platforme samo postavimo inair na true i jumping na false i on ce poceti da pada, zar ne? :)
Poceo sam da pravim neke klase za tile i world. Za sad su vrlo nekorisne, ali cu ih prosirivati polako. Zanima me da li cemo crtati na Canvasu (forme, panela... slike... bilo cega)? Da li ce igrac biti velicine jednog tile-a ili ce imati proizvolju velicinu? Da li ce moci da se skroluje samo u jednom pravcu (kao u super mario na segi)? Da li treba da se predvidi i vertikalno i horizontalno skrolovanje? I... imao sam jos nesto da pitam, ali sam zaboravio :)
E, da... da li da koristimo property-e ili obicne funkcije za nase klase?


[ _v!rus_ @ 07.01.2005. 17:57 ] @
Srki hvala na prilogu
Mislim da bi trebalo malo teoretisanja oko same mehanike...
Sto se tice koriscenja propertia, mislim da bi to samo komplikovalo stvari sobzirom
da pravimo igru i sve klase koje pravimo koristice se u toj igri, stoga mislim da bi bilo bolje kodirati obicne metode ali nikako direktno pristupati poljima (ali ipak foolproof-ovati metode,npr. provere granica pre upisivanja u matrice...)

Imao sam ideju (pogledaj prikaceni zip i u njemu klasu TWorld) sto se tice levelmape
da u stvari imamo 2 mape- jednu koja ce biti matrica Boolean-a i koja ce oznacavati kuda se igrac moze kretati (maska), a drugu koja ce sadrzati izgled nivoa (tako su su pravili one zidove kroz koje mozes proci, ima ih u svim platformskim igrama:-).

Nego ima jedan problem, prati pazljivo: Igrac se NE KRECE piksel po piksel uvek, nego samo u pocetku, kada ubrza dodje do 2-3 piksela po ticku. Sta se desava kad dodje do zida - odgovor: ne moze dalje da ide, naravno... Ali kako to implementirati?

Ako se koristi mehanizam sa PriorX i PriorY:
Igrac se krece brzinom od 2-3 piksela/tiku. Kad dodje do zida na X = 50 (igracX=48)
vrsi se provera nesto kao:

Code:

if not World.IsAvailable(IgracX + Vx, IgracY) then
  IgracX := PriorX
else
begin
  IgracX := IgracX + Vx;
  PriorX := IgracX;
end;


Sto znaci da ce u tom trenutku (IgracX = 48, Vx = 3) igrac se zakucati na X=48 iako je zid tek na 50! Kada ponovo krene, moci ce da pridje zidu do kraja zato sto se ubrzanje lagano povecava od 0 pa samim tim i IgracX se povecava za po piksel...
Kako ovo resiti?

Vidi attachment za ilustraciju problema...
[ _v!rus_ @ 07.01.2005. 18:49 ] @
Imam resenje i problem:
Resenje: Koristiti 2 tajmera - jedan (brzi) za Tick a drugi (sporiji , 10ms) za iscrtavanje. U stvari interval drugog tajmera bi bio (1000/RefreshRate monitora) za najcistiji screen update + Doublebuffer;
Korisenjem brzeg tajmera za tick mogao bih da zadam MaxVel na 1 i time bi resio problem...
Jedino sto Delphijevi interni tajmeri nisu dovoljno precizni pri frekvenciji <10ms
(nisu nista brzi na <10 nego na 10)...
Negde sam video neke TThreadTimer-e, probacu da ih nadjem na netu pa cu probati sa njima. Cak i za 386 procesor vreme od 10ms je DUUUGO
(16MHz = ~16 000 000 instr/sec = 16 000 instr/1 ms, mnogo brate, pa i da sam pogresio 10x...) tako da verujem da cu naci precizniji timer...
[ Srki_82 @ 07.01.2005. 21:59 ] @
Ako budemo radili sa tile-ovima, a ne sa pixel-ima onda nema problema. Kada vidis da je igrac usao u tile koji sadrzi nesto kroz cega ne moze da se prodje samo postavis X igraca na levu ivicu, odnosno desnu tog tile-a (u zavisnosti sa koje strane je igrac usao u tile) ili Y na gornju odnosno donju ivicu i to je to. Tako cu uraditi cim budem nasao malo vremena.


[ Nemanja Avramović @ 08.01.2005. 18:49 ] @
evo mozda vam pomogne i ovo :)

Code:

//proverava da li je tacka unutar poligona
function PointInPolygon (const x,y : integer; aPolygon: array of TPoint): boolean;
var
  PolyHandle: hRgn;
begin
  PolyHandle := CreatePolygonRgn(aPolygon[0], Length(aPolygon), Winding);
  result     := PtInRegion(PolyHandle,X,Y);
  DeleteObject(PolyHandle);
end;


imao sam i funkciju koja proverava da li se dve linije presecaju i daje tacku gde je taj presek. Ceo dan je trazim, nikako da nadjem - ako nadjem, saljem!
[ Nemanja Avramović @ 08.01.2005. 18:53 ] @
mozda pomogne (attach)

p.s. 'ocu credit :P
[ Nemanja Avramović @ 08.01.2005. 19:08 ] @
evo jos malo :)



:: ovaj kod odredjuje da li se linije presecaju ::
Code:

function Intersect(const x1,y1,x2,y2,x3,y3,x4,y4:Double):Boolean;
var UpperX,UpperY : Double;
    LowerX,LowerY : Double;
    Ax,Bx,Cx      : Double;
    Ay,By,Cy      : Double;
    D,F,E         : Double;
begin

Result := false;

Ax := x2 - x1;
Bx := x3 - x4;

if Ax < 0.0 then
begin
  LowerX := x2;
  UpperX := x1;
end
else
begin
  UpperX := x2;
  LowerX := x1;
end;

if Bx > 0.0 then
begin
   if (UpperX < x4) or (x3 < LowerX) then
    Exit;
end
else if (Upperx < x3) or (x4 < LowerX) then
   Exit;

Ay := y2 - y1;
By := y3 - y4;

if Ay < 0.0 then
begin
  LowerY := y2;
  UpperY := y1;
end
else
begin
  UpperY := y2;
  LowerY := y1;
end;

if By > 0.0 then
begin
   if (UpperY < y4) or (y3 < LowerY) then
     Exit;
end
else if (UpperY < y3) or (y4 < LowerY) then
   Exit;

Cx := x1 - x3;
Cy := y1 - y3;
d  := (By * Cx) - (Bx * Cy);
f  := (Ay * Bx) - (Ax * By);

if f > 0.0 then
begin
   if (d < 0.0) or (d > f) then
     Exit;
end
else if (d > 0.0) or  (d < f) then
   Exit;

e := (Ax * Cy) - (Ay * Cx);

if f > 0.0 then
begin
  if (e < 0.0) or (e > f) then
    Exit;
end
else if(e > 0.0) or (e < f) then
   Exit;

Result := true;

(*
//Simple method, yet not so accurate for certain situations:
Result := (Orientation(x1,y1,x2,y2,x3,y3) <> Orientation(x1,y1,x2,y2,x4,y4)) 
and
           (Orientation(x3,y3,x4,y4,x1,y1) <> 
Orientation(x3,y3,x4,y4,x2,y2));
*)

end;
(* End Of SegmentIntersect *)
 



:: ovaj kod odredjuje gde se presecaju (a samim tim i da li se presecaju) ::
Code:

Procedure IntersectPoint(x1,y1,x2,y2,x3,y3,x4,y4:Double; Var Nx,Ny:Double);
Var R           : Double;
    dx1,dx2,dx3 : Double;
    dy1,dy2,dy3 : Double;
Begin
 dx1 := x2 - x1;
 dx2 := x4 - x3;
 dx3 := x1 - x3;

 dy1 := y2 - y1;
 dy2 := y1 - y3;
 dy3 := y4 - y3;

 R:= dx1*dy3 - dy1*dx2;

 If R <> 0 Then
  Begin
   R  := (dy2*(x4-x3)-dx3*dy3)/R;
   Nx := x1 + R*dx1;
   Ny := y1 + R*dy1;
  End
  Else
   Begin
    If Collinear(x1,y1,x2,y2,x3,y3) Then
     Begin
      Nx := x3;
      Ny := y3;
     End
     Else
      Begin
       Nx := x4;
       Ny := y4;
      End;
   End;

End; 


Function Collinear(x1,y1,x2,y2,x3,y3:Double):Boolean;
Begin
 Result := (((x2-x1)*(y3-y1)-(x3-x1)*(y2-y1))=0);
End;
(* End Of Collinear *)


izvor: Google :P

i jos ovo (mrzi me da se regujem): http://codecentral.borland.com...ral/ccweb.exe/listing?id=18220

p.s. tip: http://www.delphipages.com/tips/index.cfm kao i http://www.delphiforfun.org/

p.p.s. Geometry Junkyard (trebalo bi pogledati, mada ja nisam :() - http://www.ics.uci.edu/~eppstein/junkyard/
[ Nemanja Avramović @ 08.01.2005. 19:18 ] @
Citat:
_v!rus_: Imam resenje i problem:
Resenje: Koristiti 2 tajmera - jedan (brzi) za Tick a drugi (sporiji , 10ms) za iscrtavanje. U stvari interval drugog tajmera bi bio (1000/RefreshRate monitora) za najcistiji screen update + Doublebuffer;
Korisenjem brzeg tajmera za tick mogao bih da zadam MaxVel na 1 i time bi resio problem...
Jedino sto Delphijevi interni tajmeri nisu dovoljno precizni pri frekvenciji <10ms
(nisu nista brzi na <10 nego na 10)...
Negde sam video neke TThreadTimer-e, probacu da ih nadjem na netu pa cu probati sa njima. Cak i za 386 procesor vreme od 10ms je DUUUGO
(16MHz = ~16 000 000 instr/sec = 16 000 instr/1 ms, mnogo brate, pa i da sam pogresio 10x...) tako da verujem da cu naci precizniji timer...


Evo resenja! :)

Code:

procedure TForm1.Button1Click(Sender: TObject);
var atimer: THandle;
    alargeint: Int64;
begin
  atimer := CreateWaitableTimer(nil, false, 'MyTimer');
  if atimer <> 0 then begin
    try  // vreme ide u 100 ns intervalima (10000000 = 1 sekunda)
      // minus znaci relativno vreme ('od sad')
      alargeint := -(StrToInt64(Edit1.Text)); 
      SetWaitableTimer(atimer, alargeint, 0, nil, nil, false);
      WaitForSingleObject(atimer, infinite);
    finally
      CloseHandle(atimer);
    end;
    ShowMessage('Zavrsio je');
  end;
end;


inace, gornju proceduru sam nasao na http://www.elitesecurity.org/tema/58535
[ _v!rus_ @ 08.01.2005. 19:57 ] @
Hvala JaHvramu za f-je (bices u Credits:-)...
Ionako sam uvek imao 2 iz matematike...

Update:
HvalaHvalaHvala i za Timer code, postovo si dok sam pisao ovo

E sad, sledi novi update src-a...
-Realnija fizika (JumpImpulse)
-(dzabe odradjeni) pixel-precise collision detect. & handling
-debug u glavnoj formi (kakav fancy naziv za obicnu glupost, ali ipak korisno, svi parametri TCharacter klase prikazani pomocu TLabels:-)

@Srki-Igrac moze da leti (genericki podrzano u kodu, 2 reda izmene)!
Pogledaj src(TCharacter) i komentare

TODO:
-!!!Mogucnost prekida skoka pustanjem jump tastera (za sada uvek skace svoj maximum). Kao i u skoro svim drugim platformama, iako jaaako nerealno, kao da ce neko u vazduhu "hej, dosta sam gore, hocu dole!", ali sta ces, tradicija je tradicija...
-Pisanje osnovnih tile-handling rutina, za sada samo za provere kolizije, bez grafike i sl., mozda neko kasnije baci neki IOLE KORISNI && FOOLPROOF && JEDNOSTAVNI DirectX wrapper, pa onda ni svemir nije granica...
-Sve ostalo :-(
[ Nemanja Avramović @ 08.01.2005. 20:30 ] @
za tetris: Dodao sam ovo u tetristimer, kako bi loop-ovao 'ziku, medjutim malo zakoci (tj. pojavi se sat kod misa, ne znam da li zakoci igra):

Code:

 if MP.Mode <> mpPlaying then
 begin
   MP.Rewind;
   MP.Play;
 end;


A sad za engine: Meni se vise svidjalo u starom "engine"-u kad malo stisnes taster da malo skoci, ovako samo pipnes on se vine u visine... hm... ostalo jos nisam video

adiJos, za sad
[ _v!rus_ @ 09.01.2005. 01:43 ] @
Videcemo vec nekako da sredimo taj jump...
Posle 2 sata cupanja slika iz emulatora, evo quick'n'dirty implementacije grafike glavnog lika! Po meni izgleda VEOMA interesantno && lepo se uklapa u fizicki model.
[ Goran Nikolovski @ 09.01.2005. 17:13 ] @
Svakako je skok u prvom "enginu" realniji, ako malo stisnes malo skocis, ako jako stisnes taster jako i skocis.

Nadam se da ce biti nesto od ove igre ... bar jedan nivo. Mislim da bi bilo bolje, da ako igru ne pravite da bi zaradili lovu, otvorite novu temu, posto ime ove teme ne odgovara igri, i preko foruma objavljute napredak u pravljenu igrice. Ako zaglavite, neko ce se vec naci da Vam pomogne.

____________________________________________
PLADEON - Konvertor valuta
http://www.suonline.net/~nikolovski
[ _v!rus_ @ 09.01.2005. 18:31 ] @
Hmmm, u pravu si.
Bilo bi lepo kad bi neko od administratora ES-a premestio sve (sem prvih par postova) u novu temu... Verovatno bi trebalo nakom da se obratim za ovo ali ne znam ni kome ni gde, od jako skoro sam na ES i forumima uopste. A sto se para tice pare nisu problem - para nema!

@Srki: Pominjao si ranije regione, zanima me ukratko sta su i kako se koriste?
[ Nemanja Avramović @ 09.01.2005. 22:14 ] @
Obrati se Gojku :P

Regioni, ummmmmm... pa dao sam ja onu f-ju da se vidi da li je tacka u regionu... tako se koriste. A oni su neke oblasti :P
[ Srki_82 @ 09.01.2005. 23:30 ] @
Regio je kao sto je JaHvram rekao oblast. U Win API-ju postoje gotove funkcije za proveru da li su dva regiona poklopljena, da li je tacka u regionu... Pogledaj Win 32 SDK Help u Delphi-u i potrazi Region functions.

P.S.
Ako radis sa tile-ima onda ti regioni i nisu potrebni, ali ako hoces nepravline oblike za platforme i pixel preciznost, regioni mogu monogo da ti pomognu.


[ Nemanja Avramović @ 10.01.2005. 15:58 ] @
Citat:
_v!rus_: Videcemo vec nekako da sredimo taj jump...
Posle 2 sata cupanja slika iz emulatora, evo quick'n'dirty implementacije grafike glavnog lika! Po meni izgleda VEOMA interesantno && lepo se uklapa u fizicki model.


Gde je ta grafika?

Sto se tice ovog drugog... mislim da je bolje da koristimo regione, sta vi mislite o tome? Ja nikada nisam radio sa njima, ali mislim da je lako...

Gde je sled. verzija engine-a? Hmmm... :(
[ _v!rus_ @ 10.01.2005. 19:25 ] @
Evo nove verzije!
Najzad sve radi, i skok, i doskok, i padanje...

Za sada mi je samo bitno da zaokruzim klasu TCharacter, ne obracetajte paznju na neuredni kod u glavnoj formi, ona je tu samo za testiranje.

@JaHvram
Kako nema grafike? Zar nema malog Maria kako trcakara okolo?! U dfm fajlu forme se nalaze sve potrebne slike.
[ Goran Nikolovski @ 10.01.2005. 20:27 ] @
Peta "verzija" izgleda OK. Mario je odlican. Skok je isto dobar. Jedino mi se nesvidja raspored tastera za kretanje i skok, pa sam stavio VK_LEFT, VK_RIGHT, VK_UP dok sam isprobavao :) Naravno ovo nije vazno dok se radi na enginu, i poboljsanju mehanike ali na kraju bi bilo dobro ostaviti mogucnost da korisnik sam napravi raspored tastera.

Grafika ce biti rucno crtana, trazena na netu ili kreirana nekim programom ?
____________________________________________________________
:: PLADEON - Konvertor valuta :: Easy File Shredder - Unistite fajlove zauvek ::
http://www.suonline.net/~nikolovski
[ Voodoo @ 10.01.2005. 22:32 ] @
Viruse, sad sam pogledao zadnju verziju i našao nešto vrlo interesantno: uopšte do sada nisam znao za postojanje DoubleBuffered propertija! Koliko sam ranije pyzdeo što su mi "sprajtovi" treperili u mojim klonovima arkanoida...
Hvala ti puno, da nije bilo ovoga verovatno nikada i ne bih saznao sa DoubleBuffered.

Programiranje 2D igara, here I come! :)))
[ _v!rus_ @ 10.01.2005. 23:15 ] @
Sto se tice rasporeda tastera, morao sam tako jer kod mene nece da reaguje na VK_UP itd. (uopste ne triggeruje event) ako nemam neku kontrolu na formi koja reaguje na te tastere (Npr TEdit). Ne znam kako kod tebe radi i ne znam kako cu to da resim kod sebe...

@Voodoo
Nisam ni ja znao dok mi nije zatrebalo za tetris, onda sam dao Search na Delphi help i kucao Double buffer nadajuci se da cu naci te reci u opisu, kad ono iskoci ceo property!
[ Goran Nikolovski @ 11.01.2005. 08:12 ] @
Ni meni nije prvo radilo ali onda sam shvation i zasto... Dugme "Stisni Me!" je obicno dugme i kada kliknes na njega ono zadrzava fokus, ali ako ga izbrises i umesto njega stavis SpeedButton koje nema fokus onda ce da ti rade VK_LEFT, VK_RIGHT i VK_UP, ... ma ustvari sve bi trebalo da radi.

Ovo radi kod mene, e sad ti probaj.
_________________________________________________________________
:: PLADEON - Konvertor valuta :: Easy File Shredder - Unistite fajlove zauvek ::
http://www.suonline.net/~nikolovski
[ Voodoo @ 11.01.2005. 08:33 ] @
Citat:
_v!rus_: Nisam ni ja znao dok mi nije zatrebalo za tetris, onda sam dao Search na Delphi help i kucao Double buffer nadajuci se da cu naci te reci u opisu, kad ono iskoci ceo property!

Ovo mnogo dobro radi, skoro kao da ide preko DirectDrawa...
He he, a zamalo da počnem da učim DirectX zbog glupog treperenja :)
[ _v!rus_ @ 11.01.2005. 14:28 ] @
Citat:
Dugme "Stisni Me!" je obicno dugme i kada kliknes na njega ono zadrzava fokus, ali ako ga izbrises i umesto njega stavis SpeedButton koje nema fokus onda ce da ti rade VK_LEFT, VK_RIGHT i VK_UP


Ne bi mi nikad palo na pamet, to znaci da TButton (i verovatno jos neke kontrole) "gutaju" poruke o pritisnutim tasterima ako imaju kod za obradu odredjenih tastera, i da KeyPreview nije bas Preview nego Review...
[ Nemanja Avramović @ 11.01.2005. 14:37 ] @
Sad cu pogledati petu verziju pa cu javiti. Fora za grafiku je bila da si napisao evo grafike a nema attach-a... ma nema veze, neko je nesto propustio :)

kasnije cu pisati...
[ _v!rus_ @ 11.01.2005. 14:41 ] @
Bio bih VEOMA zahvalan ako bi neko imao kod (ili cak eventualno napisao kod) za neke stvari:

-Objekat koji bi autonomno menjao svoje koordinate u zavisnosti od parametara funkcija kretanja (npr. kruzenje oko neke tacke, kretanje duz putanje sa vracanjem), veoma ce mi biti potrebno za razne stvari u igri. Sobzirom da sam JAAAAAKO los iz matematike i da mi pravljenje TCharactera i TWorlda oduzima mnogo vremena, ako bi neko imao parce koda ili bar korisnu ideju...

-funkcija koja menja RGB vrednosti pixela bitmape da bi se dobio efekat svetlucanja (color cycling) - znam da sam ranije pokusavao nesto slicno ali mi nikad nije uspevalo

-Idealno bi bilo ako bi neko imao funkcije za init DirectX-a u odredjenoj rezoluciji i DirectX rutinu koja radi BitBlt (Crta blok piksela na X, Y iz memorijskog bafera u memorijski bafer - virtuelnu stranicu koje se posle filpuje na ekran) - samo 2 funkcije!

Svaka ideja & kod veoma dobrodosli
[ Goran Nikolovski @ 11.01.2005. 14:48 ] @
Ne verujem da gutaju nego, kada je dugme fokusirano ono ocekuje da kada pritisnes strelicu (levo, desno, gore, dole) "izgubi" fokus, tj. da fokus predje na drugo dugme.
_____________________________________________________________
:: PLADEON - Konvertor valuta :: Easy File Shredder - Unistite fajlove zauvek ::
http://www.suonline.net/~nikolovski
[ _v!rus_ @ 11.01.2005. 14:55 ] @
Citat:
Ne verujem da gutaju nego, kada je dugme fokusirano ono ocekuje da kada pritisnes strelicu (levo, desno, gore, dole) "izgubi" fokus, tj. da fokus predje na drugo dugme

Da, ali cim ne proslede tu poruku do forme znaci da je sta - progutaju!
Verovatno zato sto su te osnovne kontrole podrzane direktno preko API-ja...
Na kraju krajeva skroz nebitno, bitno da smo resili problem!
[ Voodoo @ 11.01.2005. 16:06 ] @
Paz'te šta sam ja napravio, fasciniran novootkrivenim propertijem :)

http://www.geocities.com/ivantod84/VSF.rar.zip

Kontrole su leva i desna strelica i CTRL.
[ _v!rus_ @ 11.01.2005. 17:01 ] @
Evo (jos jedne) nove verzije...
Blizu sam kraja klase TCharacter

-Sada se koriste kursorski tasteri
-podrzano letenje i ronjenje:
Code:

constructor TCharacter.Create(AWorld: TWorld; AWidth, AHeight, StartX, StartY: Integer);
  ...
  Flags := [flgFacingRight, flgGround];


Samo izmeniti flgGround u flgAir ili flgWater i pichi!
[ Nemanja Avramović @ 11.01.2005. 18:10 ] @
Evo mog doprinosa. Mislim da je za igru neophodna hiscore tabela :)
[ Nemanja Avramović @ 11.01.2005. 18:15 ] @
evo i nesto sto sam se danas popodne zezao. treba jos optimizovati, stalno kociiiiiiii :)
[ _v!rus_ @ 11.01.2005. 18:53 ] @
Evo i prve modifikacije grafike glavnog lika!
Samo jos da neko smisli i prigodan naziv!

OBAVEZNO pogledati & dati mishljenje!

:)
[ Srki_82 @ 11.01.2005. 19:43 ] @
Lepo ti napreduje :)
Posto Super Mario zove Super Mario (kako je ovo bilo dubokoumno), a ovaj nov lik lici na Srbina... zvacemo ga Super Srbin :)
Ja sam konacno nasao malo vremena pa sam poceo da radim na tile world, a ne pixel world (doduse nemam tako lepe slicice za igraca, ali nema veze). Svaki tile ima svoj friction (po travi recimo ne proklizava i lako staje, dok na ledu polako krece, ali se i polaaaako zaustavlja), svaki nivo (napravio sam samo jedan mali, probni) ima svoju gravitaciju, prilikom kreiranja igraca moguce je postaviti njegove karakteristike. Poceo sam da pravim klasu za kameru koja ce pratiti igraca kroz nivo (crtanje igraca i sveta vec podrzava iscrtavanje na odredjenoj poziciji u Canvas-u + svet ne mora da se crta ceo... dovoljno je nacrtati samo deo oko igraca... da ne bude kocenja kod velikih nivoa). Sada me malo zeza detektovanje sudara. U vecini slucajeva radi kako treba, ali cete primetiti bagove. Cim nadjem vremena pokusacu to da ispravim... ili ako naravno neko ima zelju moze i sam(a) da popravi to.
[ _v!rus_ @ 11.01.2005. 20:20 ] @
Imas u mom kodu rutinu za detekciju sudara uz pomoc 4 tacke (vidi u TCharacter metod Tick, red if World.IsAvailable(X,Y) and (X+Width, Y) and (X, Y+Height) and (X+Width, Y+Height)
Jako brzo se izvrsava jer je provera 2 reda, jedino kod za popravku sadrzi repeat, ali se okrene najvise 3-4 puta, sto je sasvim OK...
[ _v!rus_ @ 11.01.2005. 20:38 ] @
...A ako te brine to sto je to pixel-precise metod a tebi treba tile, samo treba da uradis

TWorld.IsAvailable(X, Y): Boolean
Result := LevelMap[X div TileWidth, Y div TileHeight] = 'P'

gde je LevelMap npr. char matrica tile-ova, a 'P' je prazan prostor...samo ne zaboravi da proveru vrsis za sve 4 tacke sa medjusobnim and-om (IsAvail(X, Y) and IsAvail(X1, Y1) and... then prazno!)
[ Srki_82 @ 11.01.2005. 21:42 ] @
I u mom kodu radi lepo, ali ne radi samo u specijalnim slucajevima. Ako si probao verovatno si video u cemu je problem. Mada znam kako i to da resim. Tada ce uvek biti minimalno 2, maximalno 3 provere za jedan Tick, a popravljanje pozicije nece imati repeat. Samo podesavanje X i Y koordinate na pocetak tile-a koji je slobodan. Da li si probao da malo modifikujes level.cfg i da vidis kako se drugacije krece po tile-ima koji imaju drugaciji friction. Namerno sam za prazan prostor postavio mali friction da ne bi mnogo usporavao igraca kada skoci, a i da u vazduhu ne moze bas lako da se menja pravac.
[ _v!rus_ @ 12.01.2005. 05:09 ] @
05:58 AM...
...
Podocnjaci do kolena...
...
(ZEV!)
...
Aj da postujem josh neke sitnije graficke izmene na Miladinu. Par tilova sto sam pochupo, prilagodio na 64x64 i rucno stavio na formu zarad testiranja. Klasa TChar. najzad sredjena, jos samo da se vrate polja u private. Novina je Unit tiles.pas koji ce biti zaduzen za sav posao sa tileovima, nisam imao vremena da je probam.
[ Nemanja Avramović @ 12.01.2005. 12:53 ] @
ja sam poskidao ovo... kasnije cu da probam...
e, nedostaje mi 4. engine... dajte link

a jel probao neko HiScoreTable? Probajte, a probajte i rucno iz registry-ja da promenite neko ime :)

SuperSrbin? To je bila i moja ideja... moze, sto se mene tice!
[ dogriz @ 12.01.2005. 13:27 ] @
Dopada mi se ovaj "klasični tetris"
Bez zezanja, stvarno nije loše, podseća me na SuperMaria

Rado bih vam se priključio u pravljenju igrice da ne kasnim sa nekim projektima... (da li ovo nekom zvuči poznato )

Anyway, samo tako nastavite, poz.
[ Nemanja Avramović @ 12.01.2005. 14:40 ] @
E video sam i 6-4 (sve do sad, dakle i 2, i 3 i 4) i mogu da kazem da je ekstra. Sad cekamo kod za kameru (koja ce pratiti igraca) i... ah da... pucanje... i neprijatelji... imam ja neke AI komponente za Delphi... i to mozda moze pomoci.... ne znam :)

idem da trazim nesto zanimljivo sto mozda moze pomoci :)

edit: te AI komponente su free, ali nema source :(
[ Goran Nikolovski @ 12.01.2005. 15:24 ] @
6-3 verzija izgleda cool. Sto se tice imena SuperSrbin je dobro.

@Avram
Probao sam tabelu i dobra je, kao i zastita od rucnog menjanja u registry bazi, samo prvo treba zavrsiti igru pa tek onda dodati tabelu :)

Ovaj "klasicni tetris" presao u pravljenje jump&run igre a tema se i dalje zove "Jos jedna igra - klasicni tetris". Stvarno bi bilo dobro kada bi se postovi koji se odnose na "SuperSrbina" prebacili u novu temu, cisto da bi posetioci foruma bili u mogucnosti da vide ovu super igru, a mozda i pomognu nesto.

Ako neki moderator (ili ko vec ima ta ovlascenja) cita ovo neka premesti postove u novu temu!

___________________________________________________
:: PLADEON - Konvertor valuta :: Easy File Shredder - Unistite fajlove zauvek ::
http://www.suonline.net/~nikolovski
[ Nemanja Avramović @ 12.01.2005. 19:26 ] @
vec smo zvali moderatore... ali nista :(

evo jedne funkcije koju sam danas pisao... gleda da li se preklapaju dve slike, mada smo ovo vec resili :)
[ _v!rus_ @ 13.01.2005. 03:03 ] @
Nema nove verzije posto radim na novom kodu za TWorld, sledi progress report:
-Gotov kod za upravljanje tileovima - klasa TTiles koja odrzava listu tileova, ucitava ih iz i snima u TLR fajl (TiLeResource). E sad TTile je objekat koji u sebi sadrzi 2 mape: prva je bitmapa (izgled) tilea, a druga je mapa popunjenosti te bitmape, tako da ce u igri moci da se implementiraju razne zanimljive stvari...

-Gotov i TileLoader, program za punjenje i pregled TLR fajlova. Ideja je da ce vise nivoa koristiti iste TLR fajlove, kao svetovi npr. level 1-1, 1-2, 1-3.

One more thing, ocekujte mogucnost penjaja uz nagibe <=45 stepeni, dace nivoima malo malo interesantniji look&feel.

Jedino sto ce mi biti tesko da implementiram su platforme do kojih se moze doci ODOZDO, tj. one po kojim se hoda kad si gore, a kad si ispod nje i skocis nadjes se na njoj. Sistem je da se dozvoli prolazak kroz platformu ako igrac krene gore, ali kad krene da pada da se zadrzi na platformi kao da je na zemlji... Tesko bez budzenja TCharacter klase, a ja bi da klasa to podrzava genericki...

A sto se imena glavnog lika tice, ja bih da se zove Super Stojadin
Super Stojadina je zena isterala iz kuce posto je samo pio rakiju i nije nista radio, i ne sme da se vrati kuci dok ne sakupi 300 jabuka. I tako nas Super Stojadin krece u susret sudbini tragajuci za jabukama da udobrovolji milu mu zenu, a ako usput naleti na flasu rakije onda dobija sajkacu i mocice da brze trci i skace i da bude pravi Super Stojadin!

Hvala svima na pracenju i podrsci!
[ Goran Nikolovski @ 13.01.2005. 13:20 ] @
Dobro je i Super Stojadin (mislim da Virus treba da odluci o imenu igre jer koliko ja vidim on je glavni tvorac iste, a mi drugi samo malo ili vise pomazemo, ili iznosimo komentare).

Sto se tice zapleta igre ovo sto si rekao je super, bas originalno, i bas nase. Samo me interesuje ko ce biti protivnici Super Stojadina, i koliki ce biti nivoi.

p.s. Jedva cekam da prvi nivo bude gotov !

____________________________________________________________
:: PLADEON - Konvertor valuta :: Easy File Shredder - Unistite fajlove zauvek ::
http://www.suonline.net/~nikolovski
[ Nemanja Avramović @ 13.01.2005. 13:43 ] @
ahm... ma ime nije ni bitno :)

samo da podsetim za kameru koju... Srki? treba da odradi... ona je ipak bitna
[ _v!rus_ @ 13.01.2005. 16:54 ] @
Evo programicica TileLoader koji pravi TLR fajlove za Stojadina. Nije nesto mnogo funkcionalan, ali radi...
Tajlovi se unose tako sto se izbere bitmapa tajla (levo) i freemapa tajla (desno). Boja $FF00FF (255, 0, 255) je prazan prostor i u bitmapi (ti pikseli se nece iscrtavati) i u bmp za freemapu (ti bytovi oznacavaju prazan prostor). Freemapa je matrica istih dimenzija kao i bitmapa s tim sto su itemi byte vrednosti gde je 0 prazan prostor, 1 je voda (da, moci ce da pliva) a 2 je popunjen prostor). Sobzirom da se freemapa cita u TileLoaderu iz bmp fajla, vecinom slucaja se isti bmp fajl ucitava i u levu i u desnu kucicu, ali bice i nekih 'egzoticnih' tajlova, npr. zidovi kroz koje moze da se prodje. Jako bitna stvar je da prilikom ucitavanja tileova u loaderu PRVI tile bude bmp koji je ceo $FF00FF, tj pink jer tile[0] je prazan prostor.

Pri crtanju bmp-a za freemap pink pikseli su prazan prostor plavi ($0000FF) su voda, a svi ostali su pun prostor. Kad se taj bmp ucita u loader on prevodi piksele u bytove (0 za prazno, 1 za vodu i 2 za pun prostor). Ostaje mesta za jos 253 sredine...

I jos nesto, da ne bude zbuna, tile se unosi tako sto se izabere bitmap i freemap, pa ONDA stisne dugme [N] za unos (a ne prvo [N]). I ne zaboravi da snimis TLR kad ga ucitas!

Za sada LevelMap je tekst fajl gde se unose karakteri rasporedjeni ko tileovi u nivou, npr.
Code:

[Tlr fajl]
Tile 0 - Prazan prostor
Tile 1 - Zemlja
Tile 2 - Voda

[Lvm (levelmap) fajl]
1111111111111111
1000000000000001
1000000000000001
1000000000000001
1000010000000001
1000012222222221
1000012222222221
1000012222222221
1111111111111111

Byte = [Char - Ord('0')] posto TLevelMap je matrica byte vrednosti a iz tekstfajla se citaju karakteri '0' = 0, '1' = 1... ':' = 10, itd...

Sledece na redu je graficki LevelEditor (samo da rasporedjuje fajlove ucitane iz TLR fajla), ali trenutno nemam vremena jer doradjujem samu igru, ako neko hoce da se lati tog posla ne bih imao nista protiv...


[Ovu poruku je menjao _v!rus_ dana 19.01.2005. u 01:55 GMT+1]
[ _v!rus_ @ 13.01.2005. 17:05 ] @
E evo i novog src-a za samu igru. TWorld uoblicen. Nema jos iscrtavanja tilova za sada ali freemap provera je tu. Popnite stojadina uz nevidljivu uzbrdicu... Penje se, a? Aj sad sidjite dole... smesno?
Aj nek strci dole (ctrl)... Jos smesnije!

Na redu je crtanje tileova na nivou. Ovde moram dobro da razmislim koji nacin da upotrebim. Nevolja kod Delphi grafike je to sto je JAAKO spora i konfuzna (Lock, unlock, Freeimage, image->picture->bitmap->canvas...opsta zbrka). Zato sam jos ranije lepo zamolio ako neko ima neke DX rutine, samo 2 funkcije trebaju - neki InitScreenMode i BitBlt(Src, Dest, TranspColor). Ali sta da se radi, morace i TImage da posluzi...
[ Rapaic Rajko @ 14.01.2005. 10:01 ] @
_v!rus, za grafiku sve sto ti treba pitaj. Nije tacno da je ista u Delphi-ju spora...zavisi sta i kako crtas.

Rajko
[ _v!rus_ @ 14.01.2005. 10:24 ] @
Pa ovako...
1. Rutina koje ce postavljti odredjeni screenmode (if available) I REFRESH RATE.
2. Rutina koja ce raditi BitBlt (kopiranje Bitmape A u Bitmapu B na koordinati X, Y uz ignorisanje piksela odredjene boje, stvar koja je hardverski podrzana na graf. kartama jos od Tridenta na ovamo...) Idealno bi bilo da su bitmape u video memoriji a ne sistemskoj posto je to negde oko 10x brze, ali to je jako tesko bez wrappera za DX ili sl.
3. Rutina koja ce najbrze moguce bitmapu B prekopirati na Canvas (ne mora kopiranje moze i dodela pointera (MNOOGO brze) ali onda je potrebna i bitmapa C, onda se naizmenicno crta u B, dodeli @B na canvas, crta u C, dodeli @C na canvas, pa opet crta u B, itd...)
Resenje za 2 je skoro resenje za 3.

Posto ce se u igri ekran skrolovati levo-desno, morace ovaj sistem (otpada klasican nacin sa iscrtavanjem samo izmenjenih delova ekrana posto se svi pikseli stalno menjaju jer se ekran skroluje). Sve gorenavedene stvari dobro poznajem jer sam pravio igre za DOS u linearnom VGA i LFB SVGA modu, sam sam pisao sve rutine i znam kako se radi, samo ne znam kako to da postignem u windowsu-delphiu bez DX-a, jer DX jeste DirectAccess rezervisanim memorijskim segmentima kao sto je video-ram ili adresa pocetka ekrana...
E sad, samo jos da obezbedim tu funkcionalnost preko "obicnih" Delphi komponenti kao sto je TImage...

Ideas, anyone?

TCanvas.Pixels je bolno sporo. Sa TCanvas.Scanlines je vec brze ali je malo musicave prirode, moracu jos da kopam...
Btw, nasao sam DX wrappere za delphi ali i nisu bas pouzdanii & to otezava distribuciju src-a, ipak bih da napravim native distribuciju...
[ milika @ 14.01.2005. 20:49 ] @
E moj viruse evo lepog resenje uz lako koriscenje GDI+,
on je maltene isto brz kao i DX za 2D stvari....

http://g32.org

Pogledaj moj milioner na www.milika.net
tamo koristim te funkcije, ne preterano
zahtevno ali lepo primercic...

Ajde sad lepo reci 'fala'....

pozdrav
[ sasas @ 14.01.2005. 22:56 ] @
@virus: da li si razmisljao da koristis neku biblioteku kao sto je SDL? Biblioteka sadrzi masu stvari za programiranje igara: brzu grafiku (koristi DX gde moze, druge tehnike gde ne moze), precizne tajmere, threadove, input-divajsove :), ima dodatna biblioteka za zvuk (mixer and stuff).
Tako se mozes fokusirati na game engine, i ne gubiti mnogo vremena na izmisljanje tople vode. Plus, kao side-effect ces dobiti i portabilan kood.
I umalo da zaboravim: www.libsdl.org

ss.
[ _v!rus_ @ 15.01.2005. 01:57 ] @
@milika
Hvala za link, izgleda da ce posluziti graphics32 biblioteka, u opisu joj stoji sve sto mi treba

@sasas
Razmisljao sam o libSDL-u, kad je dobar svima na *x-u bio bi sigurno dobar i meni, jedino sto je C/C++ biblioteka, morao bi da pisem ili iskopam negde wrappere. Sto se portabilnosti tice svakako ce sav graficki posao biti u jednom unit-u, pa izmena unita ne bi uticala na igru ili njenu portabilnost.

Jos jednom hvala svima na pomoci

U medjuvremenu iskopao sam na netu UnDelphiX, DirectX biblioteku za Delphi, koja RADI, izgleda veoma prihvacena od strane Delphi GameDev zajednice i easy-to-use, ali...
..Ali SVA dokumentacija (help file) iako kompletna, prevedena je na neki rogobatni engleski sa japanskog, posto autor (Hori) kako sam kaze 'uses simple english'. Cela dokumentacija ide u stilu "going Mile Lajkovac's railroad-tracks"...uzas...a i nazivi rutina su u tom stilu...da places od muke!
[ sasas @ 15.01.2005. 13:20 ] @
Citat:
_v!rus_: Razmisljao sam o libSDL ... jedino sto je C/C++ biblioteka, morao bi da pisem ili iskopam negde wrappere...


Ja sam bas nedavno razgledao sajt i pronasao nekoliko oss projekata zasnovanih na Delphiju i libSDLu (ima cak neki RPG likovan sa libsdl.org radjen u delphiju). Dakle wrapperi postoje i dostupni su. Zato sam ti to u stvari i predlozio...

ss.
[ Nemanja Avramović @ 15.01.2005. 14:51 ] @
samo sto se tice igre... mislim da bi Miladin (ili kako vec) trebalo da bude samo maaaaaaalo brzi kad ide uzbrdo.... sve ostalo je ok, osim sto ne umem da koristim TileLoader, al' ajde :)
[ _v!rus_ @ 16.01.2005. 02:44 ] @
Imam problem...
Klasa TWorld instancira klasu TCharacter (Player: TCharacter)
Klasa TCharacter koristi klasu TWorld (TWorld.IsAvailable)

Problem je, pogadjate, circular unit reference...
E sad...

Resenje bi bilo koriscenje forward declarationa za klase i naravno obe klase da su u istom unitu.

Medjutim, u tom unitu onda ce biti dosta klasa, tipova podataka, itd. sto cini unit skroz zapetljanim, iako pojedinacne klase su prilicno jednostavne. Razmisljam se da koristim preprocesorsku direktivu {Include filename}. Naime, {Include} funkcionise tako sto pre kompajliranja fajla svi include fajlovi kopiraju svoj sadrzaj u glavni fajl (onaj koji sadrzi direktivu include) i to na mestu gde je postavljena direktiva, pa se tek onda glavni fajl kompajlira, ali onda moram da razdvojim interface i implementation za klase u razlicite fajlove (C sistem), a to mi se bas i ne radi iz razloga sto kod treba da bude svima citljiv, razumljiv i u duhu Delphi OOP. Ima li neko neku bolju ideju?

Sobzirom da mozda i nisam bas verziran u klasnom sistemu Delphia pitam se ima li bolji nacin od include-a. Prvenstveno mislim na cinjenicu da je klasa TWorld parent za klasu TCharacter i bice parent i za sve ostale klase koje ce svakako morati da koriste klasu TWorld...

Pada mi na pamet (mozda malo debilno) resenje u obliku praklase za TWorld koja ce sadrzati samo metod IsAvailable i koja ce biti u svom unitu, zatim TCharacter ce koristiti tu praklasu a ne sam TWorld...

Code:

type
  TWorldAncestor = class
  public 
    procedure IsAvailable
    ...


Code:

uses 
  WorldAncestor;

type
  TWorld = class(TWorldAncestor)
  ...


Code:

uses
   WorldAncestor;
 
constructor TCharacter.Create(AWorld: TWorldAncestor)
begin
   FWorld := AWorld;
   //onda valjda moze [if FWorld.IsAvailable], ako se za AWorld prosledi TWorld



Include, ancestor ili nesto trece?
[ _v!rus_ @ 16.01.2005. 10:52 ] @
Evo nove verzije engine-a (ako se tako moze nazvati)
-doradjeni TCharacter, TWorld, TTiles
-ucitavanje nivoa iz [lvm](levelmapa) i [lvd](leveldata) fajla, tile-ova iz [tlr] fajla.
-potpuna DX podloga (DXDraw, DXTimer, jedino ostaje jos DXInput)

Igra se (za sada) podize u 1024x768x32, ako neciji monitor eventualno ne podrzava, nek ne pokusava dos ne uradim modeswitch, ovo je samo "na brzinu". Posto je u pitanju DX igra ZA SVAKI SLUCAJ snimi ako si nesto poceo da radis da me ne psujes posle

Izlazi se sa alt+F4.
E da, i jos nesto: DX podloga je odradjena sa UnDelphiX komponentama http://turbo.gamedev.net/default.asp
premda ne mora da znaci da ce tako i ostati.
Na sajtu je verzija biblioteke za Delphi 7 premda super radi i kod mene na sestici...

Ako neko zna resenje za moj prethodni post, neka pomogne malo...

[Ovu poruku je menjao _v!rus_ dana 18.01.2005. u 04:53 GMT+1]
[ Nemanja Avramović @ 16.01.2005. 18:18 ] @
booooooring... sad moram da skidam i UnDelphiX :(

evo neke AI komponente + software za treniranje istih
http://avram.whois-online.org/NeuroVCL.zip
[ _v!rus_ @ 16.01.2005. 19:48 ] @
Ne treba ti UnDelphiX, u arhivi je sama igra (exe fajl), src ce ici posebno kada ga malo uredim...
[ Nemanja Avramović @ 16.01.2005. 20:37 ] @
u svakom slucaju cu nekada morati da skinem UnDelphiX

anyway... javlja mi error in packed file :(

p.s. jel ste videli neurovcl?
[ Goran Nikolovski @ 17.01.2005. 12:31 ] @
Kao sto rece Avram postoji neka greska u arhivi ...
[ Srki_82 @ 18.01.2005. 00:25 ] @
Dosta ste napravili od kad sam poslednji put bio ovde :) Svaka vam cast.
U vezi sa DirectX-om i da li je uopste potreban... hmmm... secam se igara koje su radile u Win 3.1 kada jos nije postojao DX, OGL i ostali API-ji i raznorazne 3D kartice, a ipak su radile sasvim dobro sa GDI-om. Posto je cika virus presao vec na DX onda neka tako i ostane. Zasto ne koristiti nesto sto ti olaksava posao, zar ne? :)
Sto se tice kamerice koju sam hteo da sredim, a kao sto vidis bas i nemam mnogo vremena, to uopste nije komplikovano. Nisam stigao da skinem ovaj najnoviju source pa ne znam kako se iscrtava igrac i svet, ali u onom mom bagovitom primeru se za svako iscrtavanje zadavala X i Y koordinata na kojoj (u Canvasu, Backbufferu, Surface-u, nazovite to kako hocete) pocinje srtanje i za svet koji deo da se nacrta sto je sasvim dovoljno da se optimizuje sve da radi sa obicnim GDI-om. Znaci kamerica bi uzimala apsolutni polozaj igraca i na osnovu njega izracunavala sta sve i na kojoj poziciji bi trebalo da se iscrtava. U sustini igrac bi trebao da stoji na sredini ekrana tako da nema nekih velikih problema sa pomeranjem kamere. Ako je problem da se napravi da kada se igrac nalazi na pocetku ili kreju nivoa moze da se zalepi za levu odnosno desnu strano, onda se samo napravi dovoljno sveta sa desne strane od kraja i sa leve strane od pocetka i igrac se stalno drzi na sredini ekrana. Tako sam ja radio jos na Commodore 64 i nikad nisam imao problema sa tim.
Pogledao sam neurovcl... to je malo previse za ovakvu vrstu igre. sasvim je dovoljno napraviti jednu apstraktnu klasu koja ce imati funkcije tipa GetX, GetY, TimeTick, Draw i dovoljno. Zatim posebne klase koje je nasledjuju (TCicrlePath, TLeftPath, TRightPath, TRandomPath...) koje na svoj nacin sredjuju koordinate objekta. Potrudicu se da nadjem malo vremena da napisem neki kodic za te klasice.
Uhhhh... nikako da stignem da nastavim tutorial za pravljenje VCL komponenti... nisam kriv za to... kriva je Anita :)
Dosao sam do zakljucka da vise uzivam sa devojkama nego dok pravim programe... neverovatno :)
[ _v!rus_ @ 18.01.2005. 05:53 ] @
U pravu ste, download-ovo sam svoj upload i arhiva ne valja...
Sumnjivo mi nesto to sto je 7.001 ima velicinu 150,001 bajtova kad sam ga skinuo sa ES-a, A NE 150,000 koliko bi trebalo...Hmmm, da nemam neki virus?!
Anyway, povukao sam delove arhive sa servera i izmenio poruku.
Evo src-a, on je bar bezbedan, trebaju samo UnDelphiX komponente, ima link u nekom mom prethodnom postu.

@JaHvram
Hvala za podrsku i test
Sto se tice HS tabele, morace da saceka malo posto igra za sada ni ne broji poene!
@Srki:
Long time no see!
Sto se tice razloga za koriscenje DX-a stvar je u sledecem - sobzirom da mozda i nisam neki programer a jos manje optimizator koda, trebala mi je biblioteka gde se necu brinuti da li ce svi proracuni i iscrtavanja da se izvrse za 10ms. Npr. TCanvas.Pixels je toliko sporo da ja i dalje ne mogu da poverujem koliko , a ako vec koristim neku biblioteku onda bolje DX, ako vec moze, nego nesto drugo, i time ne "olaksavam posao" sebi nego samo koristim Windows-ov jedini interfejs za pristup zasticenim delovima memorije kao sto je vid. memorija. U DOS-u (tj. DOS4GW) sam sam pisao sve graficke rutine, jer on nije toliko "pametan" ko windows pa da ne dozvoljava pristup...
Btw. ti meni reci JEDNU igru koja je koristila GDI na racunarima sa Win 3.1 OS-om, a da je imala iscrtavanje KOMPLETNOG EKRANA u koliko-toliko realnom vremenu. (pritom ne mislim na optimizacije tipa CrtajUpdatedRectOnly jer to ne vazi za skrolovanje ekrana). Zato su i napravili (sjajnu) biblioteku WinG koja nazalost je po misljenju MS-a zastarela posto je tu DX, pa je nema u novim verzijama Windowsa, a ni novi kerneli nemaju rutine koje njoj trebaju da bi radila. Comix Zone npr. koristi WinG na Win-u 3.1, a i Earthworm Jim za Win 3.1 i Win 95.

DX je dobar izbor posto planiram da koristim jos neke egzoticne stvari u igri za koje ostavljam mesta i vec imam u glavi kostur realizacije (animirani tile-ovi sveta, zvuk preko callback (procedure of object) procedura, alpha-blending, itd...), samo to ce morati da saceka da prvo osnovne stvari "legnu na rudu". Skrolovanje Worlda nece biti problem, bar mislim, nema problema za pocetak i kraj nivoa. Cak planiram da napravim "plivajucu" kameru koja nece striktno u piksel pratiti igraca, vec ce dozvoljavati malo "tamo-amo", ali o tom potom...

Download UnDelphiX komponenti (~2 Mb) nece nikom skoditi posto je u pitanju najbolja DX bilblioteka koju sam video, a i veoma je laka za koriscenje.
[ Rapaic Rajko @ 18.01.2005. 13:07 ] @
Code:
procedure TForm1.Button1Click(Sender: TObject);

var
  Bitmap : TBitMap;
begin
  Bitmap := TBitmap.Create;
  try
    with Bitmap do begin
      LoadFromFile('C:\Program Files\Common Files\Borland Shared\Images\Splash\256color\factory.bmp');
      Transparent := True;
      TransParentColor := BitMap.canvas.pixels[50,50];
      Form1.Canvas.Draw(0,0,BitMap);
      TransparentMode := tmAuto;
      Form1.Canvas.Draw(50,50,BitMap);
    end;
  finally
    Bitmap.Free;

  end;
end;


v!rus, da li je to ono sto ti treba?

Rajko
[ Nemanja Avramović @ 18.01.2005. 14:26 ] @
Citat:
_v!rus_:
Evo src-a, on je bar bezbedan...


gde je src?

edit: skinuo sam UnDelphiX: ono nije bas jednostavno, mada... kad se malo nauci i pogleda help... ne bi trebalo da je tesko....
[ _v!rus_ @ 19.01.2005. 01:02 ] @
@JaHram
Sorry, zaboravio sam (opet...) . Evo ga uz malo zakasnjenje...
Btw., UDX i nije toliko komplikovan, imas DXDraw.Surface koji ima bukvalno sve properties i methods koji su potrebni i veoma su straightforward. A i na onom sajtu gde si skinuo UDX ima GOMILA tutoriala.

@Rajko
Da to svakako vrsi posao, samo da probam kako radi kad crta ceo ekran. Jedino sto za bilo koju napredniju graf. funkciju treba mi TCanvas.Pixels (npr za neki AlphaDraw, SubDraw, AddDraw...) koji je prosto suvise SPOOOOOOOR. Hmmm... Znam da je spor kada pristupam pikselima canvasa KOJI SE PRIKAZUJE, ne znam kako bi radilo sa canvasima u memoriji, moram da probam. Svakako hvala!
[ Rapaic Rajko @ 19.01.2005. 09:23 ] @
Canvas.Pixels je uvek sporo i ima smisla koristiti ga samo za ocitavanje. Zasto ne koristis Canvas metode za crtanje? Hocu da kazem, ne mogu da zamislim zasta ti treba bas Pixels? Daj neki primer crtanja koji te muci...

Rajko
[ Jovan Prokopović @ 19.01.2005. 12:41 ] @
Umesto TCanvas.Pixels mozes da koristis TBitmap.ScanLine[Y], otprilike ovako

Code:

TBoja = record R, G, B: Integer; end;

...

function GetPixel(Slika: TBitmap; X, Y: Integer): TBoja;
Var   P: PByteArray;
begin
  P:=Slika.ScanLine[Y];
  GetPixel.R:=P[X*3];
  GetPixel.G:=P[X*3+1];
  GetPixel.B:=P[X*3+2];
end;

procedure PutPixel(Slika: TBitmap; Boja: TBoja; X, Y: Integer);
Var   P: PByteArray;
begin
  P:=Slika.ScanLine[Y];
  P[X*3]:=Boja.R;
  P[X*3+1]:=Boja.G;
  P[X*3+2]:=Boja.B;
end;


samo nemoj da zaboravis da stavis Bitmap.PixelFormat:=pf24bit;
[ Nemanja Avramović @ 19.01.2005. 14:04 ] @
evo sad sam probao Super Stojadina i mogu ti reci da mnogo lepo izgleda.
Jel ovo open source (freeware) engine :))) Mislim, UDX jeste, ali oni ostali unit-i? :)

A da ti malo dokumentujes one tvoje unite? :))) Nigde bre ne vidim kako se detektuju sudari (npr) ali predosecam da ima veze sa
Code:

0000000000000001
0000000000000001
8000000000000001
3000000000000001
3000000000000001
3000000000075551
3::::::::::12221
3999999999912221
3999994555512221
3999991222212221
3999991222212221
3455561222212221


a neki level editor? ili tako nesto... let's make tools for new engine :P
[ _v!rus_ @ 19.01.2005. 17:28 ] @
@Janko
Hvala za rutinu, jasna mi je ideja, verujem da cu lako da je izmenim za 32bit piksele
(X*4), jedino polja recorda TBoja su bajtovi a ne integeri, ali nebitno, veliko hvala za ideju!

@JaHvram
Ccccccc....
Nisi li pratio do sada razvoj igre
Matrica koju si ti naveo u postu je izgled nivoa (raspored Freemapa i Bitmapa).
Code:

0000000000000001
0000000000000001
8000000000000001
3000000000000001
3000000000000001
3000000000075551
3::::::::::12221
3999999999912221
3999994555512221
3999991222212221
3999991222212221
3455561222212221

Izmenom tog fajla menjas izgled nivoa. To je matrica bajtova 16x12, a posto je sirina jednog tile-a 64 piksela, to je 16x12 = (16 x 64) x (12 x 64) = 1024x768 piksela. '0' je tile[0], '1' je tile[1], ':' je Tile[10]. Sa TileLoader-om mozes da vidis kako izgleda Tile[0], Tile[1], Tile[2]...
Svaki Tile ima svoju bitmapu i svoju freemapu. Freemapa je mapa slobodnih i zauzetih piksela, pa se detekcija sudara vrsi u metodu TWorld.IsAvailable(X, Y) tako sto se proverava freemapa odgovarajuceg tile-a.
Evo ti najnoviji TileLoader. Otvori sa njim fajl 'level.tlr' i vidi tile-ove.
[ Nemanja Avramović @ 19.01.2005. 21:30 ] @
Ma sve je to ok...
Skapirao sam ja da je to nivo jos u prethodnom src-u (ono kad SS ide uzbrdo).
Ok, to freemapa otprilike kapiram... To sluzi za detekciju sudara, ali ja nigde u kodu ne videh da koristis: TWorld.IsAvailable(X, Y); <- jel' to mozda samo radi? Bilo bi isuvise lepo da je tako...

Inace, UDX... ahm... ma komplikovano :) nista bez komentovanog koda.... a oni tuts su bez //komentara :(

aj' cujemo se

p.s. jesi sredio ono da SS ide malo brze ukoso na gore?
[ Nemanja Avramović @ 20.01.2005. 16:46 ] @
Jel ovo bug? Pogledaj nivo iz attachmenta (obrisi .txt ekstenziju) i kad krene nivo ti skoci levo (na one informacije o brzini) i jos idi izvan ekrana. Primetices da posle ne moze da se vrati. Zasto?
[ _v!rus_ @ 20.01.2005. 17:05 ] @
To se desava sto zarad brzine rutina za proveru sudara ne proverava granice terena, tj ako nema tile koji ga blokira da ide levo od moze da ode levo cak i iza ekrana. Samo je stvar slucaja kad ce zablokirati, a zablokirace sigurno. Nisam dzabe nacrato demo nivo onako da ne moze da se izadje van ekrana, ali nije nikakav problem ubaciti jos jednu proveru. Ne brini nije bug, desava se samo da proverava matricu FLevelMap(X, Y) sa negativnim koordinatama, time cita memorijske lokacije koje su "pre" pocetka same matrice FLevelMap pa izaziva EAccesViolation koji se ne vidi zbog DX drawa , onda udaris "na slepo" alt+tab pa ctrl+F2 da resetujes proces. U svakom slucaju ici ce provera za granice terena u sledecoj verziji.
[ Nemanja Avramović @ 20.01.2005. 18:14 ] @
ok... ispravi ti to samo :)
jedva cekam sled. verziju
[ _v!rus_ @ 22.01.2005. 09:30 ] @
01/22/2004
Latest & Greatest:
From now on includes a LevelEditor & TileLoader,
Added support for ladders & hanging platforms,
Fixed few potential bugs,
Adjusted SS' speed & jump heights (lowered),
Added a few tiles (see level.tlr)

Still not fixed:
Running off the screen (2 lines of code needed, but I forgot, again)
____________________________________________
Bez zezanja, stvarno ima podrsku za merdevine i platforme!
Odradio sam (jednostavni) LevelEditor, levi klik crta, desni boji (crta dok drzis).
Ovo sad vec lici na nesto, bar po mom misljenju...

Enjoy!




[ Nemanja Avramović @ 22.01.2005. 18:30 ] @
e, imam predlog za tebe, look@pm
[ Nemanja Avramović @ 24.01.2005. 17:34 ] @
...osim ako ovaj SuperStojadin nije kreiran tako da moze rukama da pichi ispod ovih s*anja

pogledati attach

p.s. v!rus nisi mi odgovorio na pm
[ _v!rus_ @ 24.01.2005. 17:49 ] @
Hmmmm...
Problem je u tome sto se collision test sa pozadinom vrsi uz pomoc 4 tacke pravougaonika. Ne bi trebalo to da se desava, aj videcu...
Btw., ako si ti docrtao taj nivo, vodi racuna da koristis one tile-ove za platformu koje imaju SIVI pravougaonik u freemapi, a NE CRNI, jer crni je absolute block, a sivi halfblock (propusta na gore a blokira na dole). Samo vidi u leveleditoru ->View->AsFreemap da li je platforma crna ili siva, ako je crna prepravi i radice (valjda ;)...

E da, bicu malo zauzet ovih dana pu cu da stanem sa SS-om na dan-dva...
[ Nemanja Avramović @ 24.01.2005. 18:03 ] @
i ja cu biti zauzet (skola) :(
poslao sam ti 2 pp-a i mail :)
proveri sve to pa pishi
i ja sam mislio da ono sa sivim 'oce da radi, ali cisto sam se zezao
SS NE SME DA IMA BAGOVE :)
[ Nemanja Avramović @ 24.01.2005. 19:59 ] @
http://www.superstojadin.co.sr/
eto trenutno radim sajt za ovo cudo, a ostalo je
- forum (trenutno uploadujem, treba da ga instaliram posle)
- podesavanje sifri za admina (samo da mi se _v!rus_ javi)
- podesavanje email adrese za contact stranu (takodje cekam virusa)

@_v!rus_: za cenu cemo se dogovoriti. Salim se, ali igra mi se svidja, pogotovo sto je engine opensource tako da je sajt free

ako neko 'oce sajt, nek' se javi :)

edit: forum je zavrsen
[ Srki_82 @ 26.01.2005. 21:41 ] @
Wow... nema me nekoliko dana pored racunara, a igra skoro zavrsena :) Svaka cast... ide ti odlicno. Hmmm... vidim da jos uvek nemas NPC-ove. Mogu na brzaka da ti napravim neke klasice za kruzno kretanje, "levo-desno" i ko zna kakve sve pokrete. Ne znam sta treba sve treba ta klasica da uzima kao ulazne podatke, a sta da ti vraca? Planiram da napravim da ima jedan event OnTick tako da je dovoljno da postoji jedna custom klasa koja moze da radi razlicite stvari u zavisnosti od event handlera i nekoliko specijalnih klasa za kruzno, levo-desno, i jos neko standardno kretanje (gore-dole). Sve u svemu klasa ce da uzima pocetnu X i Y koordinatu, podesi se OnTick event, podesi se brzina i zatim se samo poziva procedura Tick koja ce na osnovu OnTick eventa da menja X i Y koordinatu. Specijalne klase kao sto je ona za kruzno kretanje ce uzimati centar oko kojeg se objekat krece, precnik kruga, brzinu, pocetni ugao... Ako ti ovo odgovara reci pa da pocnem da kuckam... za 2 dana opet krecem od kuce pa me nece biti oko 7-8 dana.

E, da... sajt za SS je bas dobar. Svaka cast JaHvram-e :)
[ Nemanja Avramović @ 27.01.2005. 08:59 ] @
e, ajde sad lepo svi, tj. Srki, v!rus, ja i ko je jos ucestvovao u izradi, na forum sajta o igri, pa tamo da nastavimo razgovor. Cemu forum ako nema nikoga regovanog :(

Srki... pocni ti to da kucas :)
[ Srki_82 @ 27.01.2005. 15:19 ] @
Otprilike bi te klase izgledale ovako. Napravio sam samo dve specijalne za kruzno i horizontalno kretanje i jednu opstu. Sve klase se izvode iz jedne osnovne pa ih mozes prosledjivati funkcijama i procedurama cak i ako ne znas kojeg su tacno tipa. Bitno je samo da pozoves Tick kad je potrebno :) Napravio sam i mali demo za te tri klasice. Postoje 3 objekta. Jedan ide levo desno (klasa za horizontalno pomeranje), drugi u krug (klasa za kruzno pomeranje), a treci objekat prati drugi gde god se on nalazi (klasa za opstu svrhu).

Ne brini se JaHvrame... cim uspem da ugrabim malo vise vremena pogledacu bolje SS sajt i prijavicu se na forum... to ce i ostali uciniti :)
[ Nemanja Avramović @ 27.01.2005. 17:29 ] @
evo sad idem offline da pogledam sta si zvrljao :)

ajde ajde, ne mogu da cekam - brze! Svi na www.superstojadin.co.sr :)
[ _v!rus_ @ 30.01.2005. 16:42 ] @
Novi update.
[url]
http://www.superstojadin.co.sr
[/url]
10.zip, download sekcija.
[ Nemanja Avramović @ 30.01.2005. 21:43 ] @
malo sam sredio download sekciju... moze? :)

edit: f**k! morao sam da resetujem forum... tako da molim v!rus-a i srkija da se opet reguju... nece se ponoviti... objasnio sam v!rus-u zasto sam to uradio