Kezdőoldal » Számítástechnika » Programozás » Canvas-ban tényleg lehetséges...

Canvas-ban tényleg lehetséges 2D-s játékot írni?

Figyelt kérdés
pl egy supermario féle gamet hogyan kell elképzelni? miket kell hozzá tudni js-bõl csak keypress interaktivitás kell hogy mario ugorjon meg egy timer hogy menjen a kép a többi mind a canvas dolga de hogyan kell ilyet? nem túl nehéz a grafikát megírni így?
2014. dec. 24. 15:33
 1/9 anonim ***** válasza:
Igen, nem csak mende-monda, tényleg lehet benne játékot írni! Bátran keress rá "canvas game"-re. Aztán mehet a "canvas tutorial" is. A nehézség pedig még mindig relatív fogalom, kezdd el (az alapoktól, lépésenként), és meglátod NEKED mennyire nehéz.
2014. dec. 24. 15:48
Hasznos számodra ez a válasz?
 2/9 anonim ***** válasza:

tényleg lehet.

timert felejtsd el, requestanimationframe-et használj, ugyanúgy mintha settimeout lenne.

a nehézség relatív, nekem elsőre bonyolult és nehéz volt, a végére már kitapasztaltam.

a canvasen is javascripttel jelenítesz meg.

tárolni kell mindennek a pozícióját, és minden frameben kirajzolod (játékfüggő, más megoldás is lehet)

jó ha már objektumokkal dolgozol, de meg lehet oldani nélküle is (csak áttekinthetetlen spagetti lesz)

szívesen segítek ha kell

2014. dec. 24. 17:16
Hasznos számodra ez a válasz?
 3/9 anonim ***** válasza:
Canvas sem kell, egy mario szintű alapmotort gyorsan össze lehet hozni.
2014. dec. 24. 18:04
Hasznos számodra ez a válasz?
 4/9 anonim ***** válasza:

#2: Azért a requestAnimationFrame-et illik timerből hívni, t.k. a frame rate miatt.


#3: És mire is rajzolsz, ha nem canvasra?



Egyébként a bonyolultnak kikiáltható részek pont nem a canvas/grafika járulékai, hanem inkább a fizikáé, illetve a tile engine-é.


JS-ben az objektumokkal való munka kicsit szopóbb, mint más nyelvekben, de egyáltalán nem lehetetlen, procedurális alapon meg biztosan katasztrófa lesz a kód (ahogyan azt a második válaszoló is említette).


A keypress részhez: Tulajdonképpen nyilván kell tartanod az épp lenyomva tartott billentyűket (onkeydown, onkeyup segítségével viszonylag egyszerűen megoldható) és ezeket minden frissítés alkalmával továbbítani azon komponenseknek, amelyek ezekre reagálni hivatottak. Basically.

2014. dec. 24. 22:25
Hasznos számodra ez a válasz?
 5/9 A kérdező kommentje:
de ebben milyen fizika van? mario csak ugrani tud nem?
2014. dec. 24. 22:35
 6/9 anonim ***** válasza:

Persze de ha ugrik, esni is fog, melyet pontosan 9,81 m/s2-el teszt.


Hogy érted hogy mire rajzolok?

2014. dec. 24. 23:47
Hasznos számodra ez a válasz?
 7/9 anonim ***** válasza:

#6: Úgy értem, hogy valószínűleg, ha nem canvast használsz, azért nem divekből potyogtatod ki a pixeleket. No de akkor mégis...


Kérdező: Ahogyan azt a kolléga írta előttem, ha ugrik, esni is fog. Ezen felül tud menni, szaladni, megállni, ezekhez sebesség, illetve gyorsulás értékek is tartoznak, illetve tud más objektumokkal ütközni, amelyeket detektálni kell, és az ütközési helyzetet valamiféle módon megoldani (landol, elakad valamiben, ha ellenfélre ugrik, arról elpattan, ez mind-mind fizika). Tud lőni is, a "lövedék" pedig szintén saját fizikával bír: egy bizonyos sebességgel haladva pattog, találat, vagy oldalirányú ütközés esetén megszűnik létezni. Ésatöbbiésatöbbi. Az, hogy ezek kiszámolgatása mellett egy bitmapet ki kell rajzolni a canvasra, teljesen sokadrangú, és triviális probléma (spritesheet animation).

2014. dec. 25. 15:50
Hasznos számodra ez a válasz?
 8/9 A kérdező kommentje:
ja hogy mario nem csak ugrani tud... én egy olyan gamet képzeltem el amiben csak ugrani tud de akkor inkább a gravity guyhoz hasonlítanám az elképzelésemet.
2014. dec. 25. 16:48
 9/9 anonim ***** válasza:

A gravity guy zuhan (két lehetséges irányban), fut, gyorsabban fut, ezekkel összefüggésben gyorsul/lassul, ütközik, és akkor még csak a főhősről beszéltünk, ám mindebben még nincs benne semmilyen pálya, sem tárgyi akadályok, sem ellenfél. Ez mind-mind fizika.


Ha csak ugrás lenne, akkor az azt jelentené (nem számítva a grafikát, illetve az inputkezelést), hogy lóg a semmiben a főhősöd, aztán nyomsz egy ugrást, amire ő nyílegyenesen felfelé kirepül a képből. That's it. Minimum gravitáció, haladás és ütközés kell, hogy legyen.


Az ütközés kezelése gyakorlatilag további két részre bontható: Detektálás és reakció (collision detection és collision response; nem tudtam jobb magyar fordítást, sry).

Detektálni egy ilyen játék esetében még egyszerű, mert elég egy AABB, viszont a reagálással együtt úgy kialakítani/elhelyzeni, hogy a kód ne legyen vállalhatatlan, mint az sajnos a (kevésbé igényes) kollégák igen jelentős részénél lenni szokott, na az már esetint kemény dió lehet - jó fejtörő. Használhatsz persze valamilyen 2D fizikai motort, de egy ilyen játéknál az erőteljes overkill, ráadásul abból is sok a hulladék, amit a világért sem használnék, mert az API-ja nem igazán átgondolt, és ezáltal játék kódját is tönkrezúzza.


Hozzáteszem, JS-ben amúgy sem szeretek fejleszteni, mivel a prototípusos mivoltából kifolyólag elég sok borsot tud törni a fejlesztők orra alá.

2014. dec. 25. 18:18
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!