DirectX alapok

DirectX alapok
2005-06-17T16:09:59+02:00
2005-06-24T15:14:49+02:00
2022-10-25T15:50:43+02:00
Sx Xavier
Hello!!

A fejembe vettem, hogy szeretnék egy egyszerűbb grafikájú játékot írni, Delphi alatt. Tudom, hogy em ez a legalkalmasabb Ezköz erre, de azért megpróbálnám.

Letöltötem, és installáltam a DELPHI X komponenst, de nemigen tudom, hogy mit, és hogyan kell csinálni. Tehát, arra kérlek benneteket, hogy segítsetek.

Előre is köszi!!
Mutasd a teljes hozzászólást!
DelphiX---
MELEGEN AJANLOM A PELDAPROGIKAT,
KISERLETEZESSEL RAJOSSZ MI MIRE VALO

A kezdet elég egyszerű.

Rax a formra egy DXdraw komponens-t
mondjuk beállitod az align-jét alClien-t re, hogy az egész formon legyen a rajzterület.
(a neve legyen pl. DXdraw1)

Namost..
elsőnek jó beállitani az options-ját.
néhány fontosabb rész:
doFullScreen - ezt inkább hagyd FALSE-ra, majd progiból csinálod a fullscreen-t ha kell.
doWaitBlank- ez arra jó, hogy a kirajzolást szinkronizáli a monitor refreshjével. Jó dolog, mert nemlesz látni majdnem semmilyen grafikaszabdalást, de a kirajzolás sebessége a monitor refreshjétől lesz függő.(pl 80Hz- 80FramePerSecond)
doSystemMemory- ha True, akkor a grafikát a RAM ban tárolja és innen küldi majd a kártyára minden újrarajzolásnál.
Ha False, akkor a videoRamot fogja grafikatárolásra használni, igy a progid gyorsabb lesz.
a többi használatát valahonnan tanuld el....:) sajna nincs idő leirni itt vagy 2 oldalt...

Teszel a formra egy DXtimer-t,
(ebbena timerben lesza rajzolokod)
Enabled lehet true(máris programinditáskor fusson) vagy false (elinditod progiból - pl. ha előbb beolvastatod a grafikát, majd úgy inditod a timeres rajzolóprocedurákat)
interval lehet 0 (a leggyorsabb)

Ennyi lenne a fő téma.

Namost
DXdraw1-onInitialize
Ide irkálod majd a grafika loaderjét,
az előkészületeket, majd inditod a timer-t.

A grafikát (minden spritét) beolvasol
Tdirectdrawsurface-ba.(ezt képzeld bitmappáknak....)
pl.

var
szorosmajom : Tdirectdrawsurface ;

majd a kod:
szorosmajom:=Tdirectdrawsurface.create(DXdraw1.DDraw);
szorosmajom.LoadFromFile('majomgrafika.bmp');




a fullscreent igy valtod ki

begin
DXDraw1.Finalize;
begin
StoreWindow;

DXDraw1.Cursor := crNone;
BorderStyle := bsNone;
DXdraw1.Display.Width:=800;
DXdraw1.Display.Height:=600;
DXdraw1.Display.BitCount:=16;
DXDraw1.Options := DXDraw1.Options + [doFullScreen];
end;

DXDraw1.Initialize;
end;


2/3-Rajzolas-
egy Tdirectdrawsurface-t mar konnyu a kepre hozni.

biztos emlexel a regi jarekra amikor egy papirra rajzoltal egy kepet, az alatta levo papirra egy hasonlo kepet kis elteressel.
amikor gyorsan valtogattad a papirkakat magad elott, egy egyszeru mozgast lattal....
noss.
a DelphiX ben is hasonlo a tema.
Van ket papir (surface) , az egyik mindig lathato (primary)
a masik meg nem, es a lathatatlanra rajzolsz.(secondary / surface).
mint egy OFFSCREEN bitmap.
amikor a rajz elkeszul a secondary surfacen, akkor kuldol egy csere parancsot, es a ket surface felcserelodik.
igy az edig lathatatlan surface lathato lesz, a masik meg lathatatlan, es mar erre fox automat. rajzolni (valojaban a primary mindig lathato, tehat mindig a secondary-ra rajzolsy... (surface))

Tehat pl a szorosmajmot akarom kirajzolni a kepre akkor

DXDraw1.Surface.Draw(X,Y,SourceRect,SourceSurface, Transparent);

X,Y a kirajzolas koordinatai,
a Sourcerect a Tdirectdrawsurface egy kivagott resze (vagy akar az egesz bitkep)
a sourcesurface- a forras surface (nalink ez most "szorosmajom" lesz)


es most jon a surfacecsere

DXDraw1.Flip;


stb.stb.stb.

A grafika taroladara hasznalhatod a DXimageList-et, amibe sorjaba betoltogeted a grafikakat.

apropo.. animacio.
Valamivel megcsinalod az animaciot, aminek minden egyes frame-jet kimented egy bmp-be.(sprajtok)
ezeket majd betoltogeted pl egz Tdirectdrawsurface array ba, oszt a sprajtokat sorba fogod majjd rajzolgatni.


Gondolom eleg ERTHETETLEN Voltam, ezer bocs... de sietnem kell,
es a legtobb dolgot a peldaprogik mondanak , meg egy par help...

BDN

hali....
Mutasd a teljes hozzászólást!

  • Szerintem igy neház segiteni , ha nincs konkrét kérdés.
    1- töltsd le a helpet hozzá, és nézegesd a példaprogikat.
    2- A delphix tényleg elég EGYSZERÚ 2D grafikára.

    egy pár jó linket idepittyentek, hogy frajerkodjak, de asszem ezeket már a legtöbb emberke ismeri

    DirectX 9 API - ha 3dt szeretnél (bár kezdetnek elég nehéz lesz)
    OpenGL
    -ha tartasz a 3D-nél, és könnyebb utat választod....
    (de, mondjuk kinek mi a könnyebb út?? )


    Valamit nemértesz (pl. hogy kezdődjön a progi)
    akkor cshak irdle. Pár pillanat, és sokan választ adnak rá...
    addigis CSÁÁÁ
    Mutasd a teljes hozzászólást!
  • Ezaz, hogy semmit sem tudok...

    De megpróbálom konkretizálni a kérdést:

    1.: Hogy kezdődjön (Milyen formok kellenek, milyen beállítások, stb.)

    2.: rajzolás
    3.: animációk
    4.: bitképek megjelenítése, azzal való munka.

    Egyszó, mint száz, egy olyasmi grafikára lenne szükségem, amit anno a WORMS-ben láttunk.

    Előre is köszi!
    Mutasd a teljes hozzászólást!
  • DelphiX---
    MELEGEN AJANLOM A PELDAPROGIKAT,
    KISERLETEZESSEL RAJOSSZ MI MIRE VALO

    A kezdet elég egyszerű.

    Rax a formra egy DXdraw komponens-t
    mondjuk beállitod az align-jét alClien-t re, hogy az egész formon legyen a rajzterület.
    (a neve legyen pl. DXdraw1)

    Namost..
    elsőnek jó beállitani az options-ját.
    néhány fontosabb rész:
    doFullScreen - ezt inkább hagyd FALSE-ra, majd progiból csinálod a fullscreen-t ha kell.
    doWaitBlank- ez arra jó, hogy a kirajzolást szinkronizáli a monitor refreshjével. Jó dolog, mert nemlesz látni majdnem semmilyen grafikaszabdalást, de a kirajzolás sebessége a monitor refreshjétől lesz függő.(pl 80Hz- 80FramePerSecond)
    doSystemMemory- ha True, akkor a grafikát a RAM ban tárolja és innen küldi majd a kártyára minden újrarajzolásnál.
    Ha False, akkor a videoRamot fogja grafikatárolásra használni, igy a progid gyorsabb lesz.
    a többi használatát valahonnan tanuld el....:) sajna nincs idő leirni itt vagy 2 oldalt...

    Teszel a formra egy DXtimer-t,
    (ebbena timerben lesza rajzolokod)
    Enabled lehet true(máris programinditáskor fusson) vagy false (elinditod progiból - pl. ha előbb beolvastatod a grafikát, majd úgy inditod a timeres rajzolóprocedurákat)
    interval lehet 0 (a leggyorsabb)

    Ennyi lenne a fő téma.

    Namost
    DXdraw1-onInitialize
    Ide irkálod majd a grafika loaderjét,
    az előkészületeket, majd inditod a timer-t.

    A grafikát (minden spritét) beolvasol
    Tdirectdrawsurface-ba.(ezt képzeld bitmappáknak....)
    pl.

    var
    szorosmajom : Tdirectdrawsurface ;

    majd a kod:
    szorosmajom:=Tdirectdrawsurface.create(DXdraw1.DDraw);
    szorosmajom.LoadFromFile('majomgrafika.bmp');




    a fullscreent igy valtod ki

    begin
    DXDraw1.Finalize;
    begin
    StoreWindow;

    DXDraw1.Cursor := crNone;
    BorderStyle := bsNone;
    DXdraw1.Display.Width:=800;
    DXdraw1.Display.Height:=600;
    DXdraw1.Display.BitCount:=16;
    DXDraw1.Options := DXDraw1.Options + [doFullScreen];
    end;

    DXDraw1.Initialize;
    end;


    2/3-Rajzolas-
    egy Tdirectdrawsurface-t mar konnyu a kepre hozni.

    biztos emlexel a regi jarekra amikor egy papirra rajzoltal egy kepet, az alatta levo papirra egy hasonlo kepet kis elteressel.
    amikor gyorsan valtogattad a papirkakat magad elott, egy egyszeru mozgast lattal....
    noss.
    a DelphiX ben is hasonlo a tema.
    Van ket papir (surface) , az egyik mindig lathato (primary)
    a masik meg nem, es a lathatatlanra rajzolsz.(secondary / surface).
    mint egy OFFSCREEN bitmap.
    amikor a rajz elkeszul a secondary surfacen, akkor kuldol egy csere parancsot, es a ket surface felcserelodik.
    igy az edig lathatatlan surface lathato lesz, a masik meg lathatatlan, es mar erre fox automat. rajzolni (valojaban a primary mindig lathato, tehat mindig a secondary-ra rajzolsy... (surface))

    Tehat pl a szorosmajmot akarom kirajzolni a kepre akkor

    DXDraw1.Surface.Draw(X,Y,SourceRect,SourceSurface, Transparent);

    X,Y a kirajzolas koordinatai,
    a Sourcerect a Tdirectdrawsurface egy kivagott resze (vagy akar az egesz bitkep)
    a sourcesurface- a forras surface (nalink ez most "szorosmajom" lesz)


    es most jon a surfacecsere

    DXDraw1.Flip;


    stb.stb.stb.

    A grafika taroladara hasznalhatod a DXimageList-et, amibe sorjaba betoltogeted a grafikakat.

    apropo.. animacio.
    Valamivel megcsinalod az animaciot, aminek minden egyes frame-jet kimented egy bmp-be.(sprajtok)
    ezeket majd betoltogeted pl egz Tdirectdrawsurface array ba, oszt a sprajtokat sorba fogod majjd rajzolgatni.


    Gondolom eleg ERTHETETLEN Voltam, ezer bocs... de sietnem kell,
    es a legtobb dolgot a peldaprogik mondanak , meg egy par help...

    BDN

    hali....
    Mutasd a teljes hozzászólást!
  • Hello!!

    Új baj... Szóvel felbuzduva a kezdeti sikereken felkiáltottam, hogy ide a dx3d-vel. Azonban van egy új bajom:? Amikor odér a progi, hogy inicializálja az ezközillesztőt (asszem ez a neve) dob egy kivételt, miszerint az nem megfelelő... Vajh, miért?
    Mutasd a teljes hozzászólást!
  • Hoppahoppá

    Szóval nem lesz elég a 2D?? :)
    DelphiX-ben a 3D-t nem használtam... és nem is fogom.

    Nem vagyok benne nagyon biztos, de ha 3d-t akarsz , akkor a directX API val bajlódj (www.clootie.ru) nincsen neki semmi VCL-je, szerintem kezdetnek nehézkes, és én ehhez még nem értek....
    De asszem gyorsabb lesz a progid, mint a DelphiXes motyó

    Épp én is a 3D-vel kezdtem ügyködni, de én most a GLScene-vel (egész egyszerű OpenGL motyó) (www.GLscene.org)

    Noss, ez csak ilyen apró segitség, sajnos , mivel 3D-be én is csak most haraptam, nemérek még hozzá- ami a programozást illeti....
    Mutasd a teljes hozzászólást!
  • Miért is delphi? Nekem a dologról az a véleményem, hogy nem rögtön azzal kell kezdeni, hogy a 0-ról írsz egy kódót. Próbáld ki a blender -t. Van benne egy játék készítő modul meg van írva hozzá minden. Neked már "csak" a játékot kell megírni. Próbálkozz ezzel szerintem jó kis gyakorló pálya. És ha ezek után is akarsz játékot készíteni hajrá.
    Mutasd a teljes hozzászólást!
  • A blender egy nagyon jó program... annak aki tudja használni.
    Szerintem ha valaki egy egyszerűbb játékot akar csinálni, és nem ismeri a blendert akkor célszerűbb a directx alapjait megtanulni. A blenderrel tényleg sokkal szebb és jobb dolgokat lehet csinálni, de ahhoz több éves gyakorlat kell. Én már egy éve használom (nem a játékkészítés, hanem az animáció készítés miatt), és még csak most kezdek belejönni.
    Persze ettől függetlenül lehet hogy valaki két nap alatt megtanulja

    Amúgy a delphix 3d részéről azt hallottam hogy nem túl jó, úgyhogy nem biztos hogy jó ötlet azt használni. Az openGL egyszerűbb, gyorsabb és szebb
    Mutasd a teljes hozzászólást!
  • Ejha...

    Hát, kszönöm a segítségeket... Ami a játékírást illeti elég gyatra vagyok benne, egyszerűen nincshozá türlemem, hogy tisztességes mesterséges intelligenciát írjak az ellenfeleknek. Így persze nem törhetek a csúcsra, de majd csak megtanulom azt is...

    De nem ez a lényeg... Tehát, ha jól értettem, tisztességes grafikához DELPHI-ben Jobb ha rávetem magam az OPENgl-re.

    De mi is ez pontosan?
    Mutasd a teljes hozzászólást!
  • Az OpenGL egy 3d renderelésre használatos API. Bővebb info a google segítségével.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd