Posty

Wy艣wietlam posty z etykiet膮 canvas

Three.js. Czym to si臋 je?

Projekt, o kt贸rym pisa艂em ostatnio, musi troch臋 poczeka膰, bo w mi臋dzyczasie wpad艂em na pomys艂 zrobienia gry w Three.js . Wzi臋艂o si臋 to z tego, 偶e ostatnio prowadz臋 rozmowy w sprawie wsp贸艂pracy z firm膮, kt贸ra robi projekt w WebGL i chcia艂em sobie przypomnie膰 temat robienia grafiki 3D w JavaScript. I z rozp臋du zacz膮艂em gr臋 robi膰. O grze napisz臋 p贸藕niej, jednak teraz troch臋 o samej bibliotece. Ale nie b臋dzie to tutorial, tylko rzut okiem z lotu ptaka. Jaki problem rozwi膮zuje ta biblioteka? Czy je艣li jest natywne api do robienia 3D w przegl膮darce (WebGL), to czy warto w og贸le osobnej biblioteki u偶ywa膰? Czy to taki kaprys, podobny do u偶ywania jQuery w 2019 roku? Przecie偶 mo偶na pisa膰 w WebGL. Wyrzu膰my biblioteki w kosmos! C贸偶, z u偶ywaniem suchego WebGLa jest taki problem, 偶e tam proste rzeczy robi si臋 w z艂o偶ony niskopoziomowy spos贸b. Zr贸bcie sobie jaki艣 tutorial, to zobaczycie, 偶e nawet, 偶eby wyrenderowa膰 obracaj膮c膮 si臋 kostk臋, trzeba si臋 nam臋czy膰. Wi臋c o ile warto pozna膰 suchego We...

Three.js

Ogarniam ostatnio Three.js . Piekielnie fajn膮 bibliotek臋 do natywnej grafiki 3D w przegl膮darce (wewn臋trznie biblioteka korzysta z WebGL). W do艣膰 prosty spos贸b mo偶na stworzy膰 obiekt sceny 3D, doda膰 do niego obiekty, 艣wiat艂a, kamer臋, potem jakie艣 animacje. Tu jest link do tego, co mo偶na w tym zrobi膰: Three.js - przyk艂ady (wymagaj膮 przegl膮darki obs艂uguj膮cej WebGL ). Wietrz臋 w tym du偶膮 przysz艂o艣膰. Uda艂o mi si臋 ju偶 zaimportowa膰 prosty model z Blendera - jest to tego specjalna wtyczka: wtyczka do eksportu/importu Blender-Three.js niestety jeszcze nie uda艂o mi si臋 zaimportowa膰 do ko艅ca materia艂贸w (ale mo偶e dlatego, 偶e samego Blendera nie ogarniam zbyt dobrze, i nie wiem czy przypisa艂em dobrze materia艂y i tekstury w Blenderze). No ale 偶e Three.js to jedynie silnik graficzny, renderer - to mo偶na robi膮c swoj膮 aplikacj臋 podpi膮膰 pod to r贸偶ne inne biblioteki - ja podpi膮艂em zewn臋trzny silnik fizyki Chipmunk, o kt贸rym pisa艂em poprzednio (z tym, 偶e on nie jest do 3D akurat, tylko do 2D). Wi...

po co Phaser skoro jest Pixi?

Postanowi艂em zamiast u偶ywa膰 Phasera, skorzysta膰 z Pixi, biblioteki graficznej na kt贸rej Phaser si臋 w duuu偶ej mierze opiera. Czym jest Pixi ? To po prostu szybki silnik renderuj膮cy grafik臋 2D w przegl膮darce, korzystaj膮cy z WebGL (je艣li jest dost臋pny), w ostateczno艣ci ze zwyk艂ego Canvasa. Wok贸艂 tej biblioteki Phaser dodaje swoje dodatkowe funkcje. Tylko tak - "silnik renderuj膮cy" - wydaje si臋, 偶e to co艣 strasznie niskopoziomowego? No w艂a艣nie nie. API jest mo偶e jeszcze prostsze od Phasera. W zasadzie super proste, je艣li mia艂e艣 do czynienia kiedy艣 z programowaniem pod Flasha - bo w Pixi wi臋kszo艣膰 funkcji i obiekt贸w opiera si臋 na klasach z ActionScriptu - mamy obiekt Stage, Sprite etc. Mamy hierarchi臋 obiekt贸w na scenie, filtry, zdarzenia myszy/dotyku etc. Pomy艣la艂em wi臋c, 偶e je艣li i tak mi Phaser nie do ko艅ca odpowiada (i czuj臋, 偶e pisz膮c w Phaserze po prostu musia艂bym jednak dodatkowy metaframework zrobi膰 do niego), to mo偶e wyjm臋 z niego sam膮 bibliotek臋, na kt贸rej si臋 on ...

Nie b臋d臋 wywo艂ywa艂 pieprzonego API, czyli 艂adowanie plansz w JSON

Powracam do Phasera, pr贸buj臋 zrobi膰 w nim teraz gr臋. Ale tak - API niby proste, ale i tak trzeba napisa膰 troch臋 kodu inicjalizuj膮cego, zanim cokolwiek si臋 poka偶e na ekranie, co jest upierdliwe. Niby jest to prosty kod i ogranicza si臋 do wywo艂ywania metod w stylu game.load.image(...), game.add.sprite(....) etc. ale i tak, je艣li musz臋 艂adowa膰 ile艣 sprajt贸w, to ten kod staje si臋 brzydki i w stylu copy-pastego. Troch臋 bez sensu, prawda (a tak jest w tutorialach, wi臋c tak si臋 chyba tam robi)? Dlatego wi臋c zrobi艂em sobie w艂asny loader do sprajt贸w: i zamiast kodowa膰 r臋cznie game.add.sprite, to pisz臋 sobie JSONa, kt贸ry zawiera wszystkie sprajty i definicje: Prawda, 偶e wygl膮da do艣膰 prosto? ;) No wi臋c tym sposobem mam w zasadzie ca艂膮 plansz臋 w postaci struktury danych w pliku JSON. Struktur臋 t臋 p贸藕niej 艂aduj臋 do skryptu i w p臋tli przechodz臋 przez wszystkie obiekty i obrazki i robi臋 automatyczne ich 艂adowanie. Co mi to daje? mniej bezsensownego pisania. Jak chc臋, 偶eby jednost...

Phaser (framework do gier) - materia艂y do nauki

Kolejny JavaScriptowy framework, tym razem Phaser. Zaczynam si臋 go uczy膰. Z tego co widzia艂em, to API urzeka prostot膮, chocia偶 jeszcze wci膮偶 si臋 zmienia niestety (rozwojowy framework :( Przyk艂ady: http://examples.phaser.io/ Dokumentacja: http://docs.phaser.io/ Kod 藕r贸d艂owy: https://github.com/photonstorm/phaser Og贸lne linki: http://gametest.mobi/phaser/docs/Phaser.html

Jak stworzy膰 prost膮 gr臋 w JavaScript? (kontynuacja - krok 2)

Obraz
Za艂adowali艣my grafik臋, teraz mo偶emy j膮 wy艣wietla膰 wtedy, kiedy tylko chcemy. Jednak grafika to tylko wygl膮d, a potrzebna jest pewna logika gry. Nie chcemy mie膰 statycznych obrazk贸w, a raczej obiekty, kt贸re co艣 robi膮, ruszaj膮 si臋 w jaki艣 spos贸b, odpowiadaj膮 na zdarzenia. Dlatego w tym kroku stworzymy tzw. p臋tl臋 gry (game loop), czyli odpalan膮 60 razy na sekund臋 funkcj臋 JavaScript, kt贸ra zajmie si臋 poruszaniem i wy艣wietlaniem Jednostek . Jednostk膮 (ang. Entity) za艣 nazywamy tutaj ka偶dy animowany i bior膮cy w rozgrywce obiekt gry - w tym wypadku b臋dzie to gracz (rakieta) oraz statki ufo. Ka偶da taka jednostka b臋dzie osobnym obiektem i b臋dzie mia艂a metod臋 draw() , metod臋 move() oraz par臋 w艂a艣ciwo艣ci, takie jak pozycja na ekranie (x,y) oraz pr臋dko艣膰 pozioma i pionowa (vx, vy). Poniewa偶 w JavaScript nie ma klas, b臋dziemy dzia艂a膰 na tzw. prototypach. Utworzymy teraz prototyp, z kt贸rego b臋dziemy tworzy膰 jednostki. Nazwiemy go EntityPrototype i zaopatrzymy go w metody draw() i move()...

Jak stworzy膰 prost膮 gr臋 w JavaScript? (kontynuacja - krok 1)

Obraz
W poprzedniej cz臋艣ci stworzyli艣my podstawow膮 struktur臋 plik贸w potrzebnych do naszej gry. W tej cz臋艣ci zaczniemy ju偶 programowa膰 naprawd臋, tworz膮c kod potrzebny do za艂adowania obrazk贸w. Nast臋pnie (w dalszych cz臋艣ciach tutorialu) skorzystamy z obiektu <canvas> , kt贸ry b臋dzie naszym takim "p艂贸tnem" do rysowania grafiki. Wtedy to w艂a艣nie b臋dziemy mogli za艂adowane uprzednio obrazki wy艣wietli膰 na ekranie komputera (za pomoc膮 funkcji drawImage ). Teraz jednak wr贸膰my do 艂adowania obrazk贸w. Uwaga: Je艣li jeste艣 troch臋 bardziej zaawansowanym u偶ytkownikiem i nieobcy ci jest koncept image preloadera, proponuj臋, 偶eby艣 przeskoczy艂 od razu do kodu , zamiast czyta膰 艂opatologiczne, i by膰 mo偶e nudne, wprowadzenie teoretyczne ;) W idealnym 艣wiecie je艣li mieliby艣my do za艂adowania 10 plik贸w graficznych z Internetu, za艂adowaliby艣my najpierw pierwszy plik z listy, p贸藕niej drugi, p贸藕niej trzeci, a偶 w ko艅cu przyst膮pili艣my do za艂adowania dziesi膮tego pliku. Niestety nie 偶yjemy w idealn...

Jak zrobi膰 prost膮 gr臋 w JavaScript?

W tym tutorialu utworzymy prost膮 gr臋 w JavaScript, z u偶yciem elementu Canvas. Gra b臋dzie polega膰 na kosmicznym locie i strzelaniu w statki przeciwnika . Ma艂o oryginalne, ale od czego艣 trzeba zacza膰, prawda? Klasyczne pomys艂y s膮 najlepsze do nauki. A wi臋c zaczynamy. B臋dziemy potrzebowa膰: edytora tekstu z kolorowaniem sk艂adni (np. Notepad++, Sublime Text oraz wiele innych) grafiki (we藕miemy darmow膮 grafik臋 z Internetu) podstawowej znajomo艣ci j臋zyka JavaScript, oraz j臋zyk贸w HTML i CSS. Krok 0: Przygotowania Za艂贸偶 nowy folder i nazwij go spaceshooter . Wejd藕 do folderu, utw贸rz w nim 3 pliki i nazwij je: index.html - tu b臋dzie podstawowa struktura strony w HTML index.js - tu b臋dzie nasz kod JavaScript index.css - tu b臋d膮 definicje styl贸w CSS Do pliku index.html wklej ten kod: Pozosta艂e pliki (index.js, index.css) pozostaw na razie puste. grafika b臋dziemy potrzebowa膰 grafiki statku gracza: player.png oraz grafiki statk贸w wroga: ufo.png S膮 to przeskalowane grafiki ze...