Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [JavaScript] Pisanie gier w javascript - od czego zaczac?
redok
post
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 5.01.2013

Ostrzeżenie: (0%)
-----


witam
Od czego zaczac pisanie gier w javascript?
Probowalem troche pisac bardzo porste gry typu kolko i krzyzyk, zbijanie kulek itp. Chcialbym zabrac sie za tworzenike bardziej interaktywnych gier 2d typu mario - to jest moj aktualny cel.

Pare moich pytan/watpliwosci, ktore aktualnie mnie trapia:
1. Czy niezbedne jest poznanie canvas, czy moze divy+css3 wystarczy?
2. Co sadzicie o takim podejsciu, zeby elementy ktorymi trzeba sie przemieszczac bylyby oparte na wlasciwosci position w css przy zastosowaniu zdarzen onkey... oraz v++ i v--? Czy sa jakies lepsze metody?
3. Jak wyglada sprawa z kolizjami ograniczajacymi przestrzen poruszajacego sie elementu - czy przy stosowaniu css position plus jakis sztuczek w js jest to mozliwe?
4. Wiem ze sa framewarki specjalnie dla gier - ale czy na poczatek sa one konieczne, czy moze lepiej ile sie da poczatkowo ogarnac samym js'em?
5. Jak wyglada sprawa z umiejetnosciami pisania kodu js obiektowo? Czy nalezy zglebic ta tematyke czy same funkcje, DOM wystarcza?

Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 13)
wNogachSpisz
post
Post #2





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

Ostrzeżenie: (40%)
XX---


http://www.youtube.com/user/GoogleTechTalk...uery=html5+game
Go to the top of the page
+Quote Post
Pawel_W
post
Post #3





Grupa: Zarejestrowani
Postów: 1 675
Pomógł: 286
Dołączył: 15.06.2009
Skąd: Wieliczka

Ostrzeżenie: (0%)
-----


nawet nie próbuj pisania gry za pomocą manipulacji dom bo zajedziesz komuś przeglądarkę - od tego służy canvas! smile.gif
Go to the top of the page
+Quote Post
wNogachSpisz
post
Post #4





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

Ostrzeżenie: (40%)
XX---


Cytat(Pawel_W @ 5.01.2013, 16:27:06 ) *
nawet nie próbuj pisania gry za pomocą manipulacji dom bo zajedziesz komuś przeglądarkę - od tego służy canvas! smile.gif

Skąd wiesz co jak i gdzie jest zoptymalizowane?
Go to the top of the page
+Quote Post
!*!
post
Post #5





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

Ostrzeżenie: (0%)
-----


Cytat(Pawel_W @ 5.01.2013, 16:27:06 ) *
nawet nie próbuj pisania gry za pomocą manipulacji dom bo zajedziesz komuś przeglądarkę - od tego służy canvas! smile.gif


Herezje. Jak na ironię operacje na DOM są szybsze niż bliźniacze wykonywane na canvas.
Oczywiście canvas to przyszłość, jednak do czasu aż nie uzyska on wydajności przewyższającej flash, jest jego marną alternatywą.


Cytat
1. Czy niezbedne jest poznanie canvas, czy moze divy+css3 wystarczy?

To zależy. Biorąc na przykład wspomniane mario... całość na luzie możesz zrobić w div/css, canvas na obecnej fazie rozwoju (a raczej wydajności) nadaje się jedynie do efektów specjalnych jak ogień, woda, wirujace monety.

Cytat
2. Co sadzicie o takim podejsciu, zeby elementy ktorymi trzeba sie przemieszczac bylyby oparte na wlasciwosci position w css przy zastosowaniu zdarzen onkey... oraz v++ i v--? Czy sa jakies lepsze metody?

co to jest v++ i v-- ? Podejście dobre, lecz musisz dobrze to przemyśleć... napisz pierw edytor map, w nim zapewne musi być odpowiedni "grid", poruszanie po załadowaniu mapy zrobiłbym też na gridzie przy odpowiednim sprawdzaniu czy można + animacja.

Cytat
3. Jak wyglada sprawa z kolizjami ograniczajacymi przestrzen poruszajacego sie elementu - czy przy stosowaniu css position plus jakis sztuczek w js jest to mozliwe?

Jeśli masz grid, tworzysz dodatkowe informacje o przestrzeni poruszania, to może być zwykła tablica w ktorej umieszczasz elementy zablokowane i przy poruszaniu, sprawdzaj czy aktualnie mozesz na niego wejść. To będzie dość prosty system kolizji, chyba że masz potrzebę jego wyliczania czy div A znajduje się w zasięgu div B.

Cytat
4. Wiem ze sa framewarki specjalnie dla gier - ale czy na poczatek sa one konieczne, czy moze lepiej ile sie da poczatkowo ogarnac samym js'em?

Nie ma FW uniwersalnych i prawdopowodnie nigdy nie będzie do budowy gier przeglądarkowych. Chyba że ktoś kiedyś napisze uniwersalne API do budowy coś jak we flash.

Cytat
5. Jak wyglada sprawa z umiejetnosciami pisania kodu js obiektowo? Czy nalezy zglebic ta tematyke czy same funkcje, DOM wystarcza?

To też zależy od podejścia i tego co chcesz z tym kodem robić w przyszłości. Przy pisaniu silnika gry, trzymałem się jQuery, a tam jest to wyjaśnione i praktycznie całość opiera się o wtyczki.

Poszukaj też forum, ponieważ było wiele tematów odnośnie tworzenia gier, szczególnie w dziale HP.

Ten post edytował !*! 5.01.2013, 16:57:12


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
Pawel_W
post
Post #6





Grupa: Zarejestrowani
Postów: 1 675
Pomógł: 286
Dołączył: 15.06.2009
Skąd: Wieliczka

Ostrzeżenie: (0%)
-----


Cytat(!*! @ 5.01.2013, 16:55:22 ) *
Herezje. Jak na ironię operacje na DOM są szybsze niż bliźniacze wykonywane na canvas.
Oczywiście canvas to przyszłość, jednak do czasu aż nie uzyska on wydajności przewyższającej flash, jest jego marną alternatywą.

herezje? http://forrst.com/posts/Canvas_VS_HTML_FPS_Benchmark-J9a
Go to the top of the page
+Quote Post
redok
post
Post #7





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 5.01.2013

Ostrzeżenie: (0%)
-----


Dzieki za odpowiedzi, jeszcze wszystkiego nie przegladnalem co podaliscie.
Cytat
co to jest v++ i v-- ? Podejście dobre, lecz musisz dobrze to przemyśleć... napisz pierw edytor map, w nim zapewne musi być odpowiedni "grid", poruszanie po załadowaniu mapy zrobiłbym też na gridzie przy odpowiednim sprawdzaniu czy można + animacja.


Chodzi mi czy takie podejscie jak ponizej w chodzi w gre jesli chodzi o przemieszczanie elementu czy to inaczej sie powinno robic?
  1. <style>
  2. #block {
  3. background:red;
  4. width:100px;
  5. height:100px;
  6. position:absolute;
  7. }
  8. </style>
  9.  
  10. <div id="block"></div>
  11.  
  12. <script type="text/javascript">
  13. var x=100;
  14. var y=100;
  15. window.onkeydown = function(e)
  16. {
  17. Key = e.keyCode;
  18. if(Key==39) //left
  19. {
  20. document.getElementById('block').setAttribute('style','top:' + y + 'px; left:' + x + ';');
  21. x+=1;
  22. }
  23. else if(Key==37)
  24. {
  25. document.getElementById('block').setAttribute('style','top:' + y + 'px; left:' + x + ';');
  26. x-=1;
  27. }
  28. else if(Key==38)
  29. {
  30. document.getElementById('block').setAttribute('style','top:' + y + 'px; left:' + x + ';');
  31. y-=2;
  32. }
  33. else if(Key==40)
  34. {
  35. document.getElementById('block').setAttribute('style','top:' + y + 'px; left:' + x + ';');
  36. y+=1;
  37. }
  38. }
  39. </script>


Ten post edytował redok 5.01.2013, 18:17:45
Go to the top of the page
+Quote Post
CuteOne
post
Post #8





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

Ostrzeżenie: (0%)
-----


Z takim kodem świetlanej przyszłości ci nie wróżę (nawet jak na zwykłą stronę www jest to marne). GDzieś mam zapisane linki do fajnych gierek opartych o canvas, jak tylko wrócę do domu to wrzucę je tutaj.

Cytat
jednak do czasu aż nie uzyska on wydajności przewyższającej flash, jest jego marną alternatywą.

chyba masz nieświeże informacje tongue.gif canvas z akceleracją GPU (IE i FF mają ją domyslnie włączoną) wydajnością przewyższył już flasha
Go to the top of the page
+Quote Post
kamil4u
post
Post #9





Grupa: Zarejestrowani
Postów: 2 350
Pomógł: 512
Dołączył: 4.01.2009
Skąd: Wrocław / Świdnica

Ostrzeżenie: (0%)
-----


@redok : wiem, że kod był pisany na szybko, ale używaj switch i addEventListener, jeśli już chcesz pisać to na poważnie smile.gif
Cytat
setAttribute('style','top:' + y + 'px; left:' + x + ';');

Tego nawet lepiej nie pokazuj smile.gif

Cytat
4. Wiem ze sa framewarki specjalnie dla gier - ale czy na poczatek sa one konieczne, czy moze lepiej ile sie da poczatkowo ogarnac samym js'em?

Szukaj pod frazą "silnik gier", oczywiście w języku ang. Jeśli chodzi o naukę to nie są konieczne. Do zaawansowanych gier jest niezbędny, można napisać swój, ale to trwa dość długo i jest trudne.

Cytat
5. Jak wyglada sprawa z umiejetnosciami pisania kodu js obiektowo? Czy nalezy zglebic ta tematyke czy same funkcje, DOM wystarcza?

Na dobrą sprawę wszystko w JS jest obiektowe. Warto poznać trochę ten temat, ale głównie po to, żeby nie mieć burdelu w kodzie. Gdy wejdziesz w tematykę sam zobaczysz, że przyda Ci się ta wiedza smile.gif


@!*!, Pawel_W, wNogachSpisz: Moim zdaniem do gier będzie lepsze canvas. Na dzień dzisiejszy obie metody są porównywalne( tak wynika z moich obserwacji( praktyki dużej nie mam, ale coś tam zdarzyło mi się napisać) ), jeśli chodzi o proste animacje. CSS3 jest odrobinę wydajniejszy, gdy chcemy robić animacje w stylu "przesuń 100px do góry", ale gdy w grę wejdzie matematyka + logika gry coraz większą przewagę będzie miał canvas. Przynajmniej tak wynika z moich ubogich obserwacji( nie tylko dotyczącego mojego kodu ).

Jeżeli bym był na miejscu autora to:
- wybrałbym CSS3 + DOM, jeśli ma to służyć nauce przez zabawę
- wybrałbym canvas, jeśli autor ma zamiar pójść w gry przeglądarkowe


--------------------
Go to the top of the page
+Quote Post
redok
post
Post #10





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 5.01.2013

Ostrzeżenie: (0%)
-----


Cytat
wiem, że kod był pisany na szybko, ale używaj switch i addEventListener, jeśli już chcesz pisać to na poważnie
Cytat
setAttribute('style','top:' + y + 'px; left:' + x + ';');

Tego nawet lepiej nie pokazuj
zgadza sie, pisalem to na szybko, o addEventListener juz sie zapoznalem. Tez mi sie wydawalo, ze takie podejscie jest kiepskie i toporne. Myslelem tylko, ze moze da sie to jakos uplynnic - "podrasowac". Natomiast nie jestem pewny co konkretnie masz na mysli z setAttribute - jakies zle praktyki to stosowac? Jakies alternatywy? Czy moze chodzi ogolnie o skrypt?

Ten post edytował redok 5.01.2013, 19:27:40
Go to the top of the page
+Quote Post
Pawel_W
post
Post #11





Grupa: Zarejestrowani
Postów: 1 675
Pomógł: 286
Dołączył: 15.06.2009
Skąd: Wieliczka

Ostrzeżenie: (0%)
-----


Cytat(kamil4u @ 5.01.2013, 18:41:38 ) *
używaj switch

if jest szybszy tongue.gif


Cytat
Natomiast nie jestem pewny co konkretnie masz na mysli z setAttribute - jakies zle praktyki to stosowac?

zamiast setAttribute możesz odwołać się do style.top i style.left
Go to the top of the page
+Quote Post
CuteOne
post
Post #12





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

Ostrzeżenie: (0%)
-----


Zanim weźmiesz się za silniki gier poczytaj o obiektowym JS, jak działają callback'i, w jaki sposób rozdzielić warstwy aplikacji oraz jak nimi zarządzać.
Go to the top of the page
+Quote Post
kamil4u
post
Post #13





Grupa: Zarejestrowani
Postów: 2 350
Pomógł: 512
Dołączył: 4.01.2009
Skąd: Wrocław / Świdnica

Ostrzeżenie: (0%)
-----


Cytat
if jest szybszy tongue.gif

To bez jaj wink.gif Jak chcesz mogę się z Tobą założyć, że napiszę kod, w którym switch będzie szybszy( w JS ).

Rozumiem, że to żart, a żeby nie mącić autorowi to podsumuję: używaj switch, bo kod jest wtedy czytelniejszy.

PS. Jest taki natłok emotikonów, że już nie można ufać czy to żarty czy poważana dyskusja. Wstawię sobie kolejny: biggrin.gif


--------------------
Go to the top of the page
+Quote Post
Pawel_W
post
Post #14





Grupa: Zarejestrowani
Postów: 1 675
Pomógł: 286
Dołączył: 15.06.2009
Skąd: Wieliczka

Ostrzeżenie: (0%)
-----


Cytat(kamil4u @ 5.01.2013, 19:48:32 ) *
To bez jaj wink.gif Jak chcesz mogę się z Tobą założyć, że napiszę kod, w którym switch będzie szybszy( w JS ).

tak, to był żart, chociaż w przypadku ilości warunków < 3 switch jest wolniejszy biggrin.gif
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 05:25