Jest to blog poświęcony nowoczelnym technologiom ułatwiającym tworzenie aplikacji internetowych. Znajdziesz tutaj porady na temat CSS3, JavaScript, designu, web-usability, standardów W3C.
Cześć! Nazywam się Michał Środek. Z zawodu programista php, z zamiłowania gitarzysta oraz fanatyk GNU/Linuksa(openSUSE® w laptopie). W branży aplikacji internetowych od 9 lat. Prywatnie bez dzieci i kota.
Pracuję wciąż nad własnym elastycznym i wydajnym frameworkiem MVC, kilkoma portalami internetowymi oraz mniejszymi bibliotekami php. Czekam na wasze opinie, zgłoszenia błędów oraz pomysły na dalszy rozwój.
Ta część strony jest w trakcie budowy a moje prace tymczasowo niedostępne.
W przypadku pytań, ofert pracy oraz ciekawych pomysłów proszę się ze mną kontaktować. Możesz mnie znaleźć i wysłać PW na php.pl(SHiP), jamendo.com(michalsrodek), goldenLine.pl, facebook.com lub nk.pl
Mimo, że czołg w mojej grze jeździ, porusza się przez ściany. Dzisiaj zwalczę ten problem dodając kilka linijek kodu odpowiedzialnych za wykrywanie kolizji obiektów, tak aby czołg nie mógł znajdować się w tej samej pozycji co mur lub woda.
Przede wszystkim przebudujmy kilka linijek odpowiedzialnych za wykrywanie zdarzeń klawiatury. O ile kod ten wciąż nie jest doskonały i wymaga dalszego doszlifowania, o tyle aktualnie musi nam wystarczać.
if(keyHandler.isHolded(37)) // LEFT { GameTank.changeDirection(0); if(GameTank.x>0) GameTank.changePosition(-1,0); } else if(keyHandler.isHolded(38)) // UP { GameTank.changeDirection(1); if(GameTank.y>1) GameTank.changePosition(0,-1); } else if(keyHandler.isHolded(39)) // RIGHT { GameTank.changeDirection(2); if(GameTank.x<480) GameTank.changePosition(1,0); } else if(keyHandler.isHolded(40)) // DOWN { GameTank.changeDirection(3); if(GameTank.y<480) GameTank.changePosition(0,1); }
Co się zmieniło? Wszelkie polecenia zmiany położenia czołgu są teraz przekazywane do metody GameTank.changePosition(). To ona zabezpiecza grę przed przecinaniem się obiektów.
changePosition: function(x,y) { var newPosition = [this.x+x, this.y+y]; var newField = [Math.ceil((newPosition[0])/32)-1, Math.ceil((newPosition[1]/32))-1]; if(x) { var offset = newPosition[1]%32; if(x>0) var fields = [[1,0],[1,1]]; else var fields = [[0,0],[0,1]]; } else { var offset = newPosition[0]%32; if(y>0) var fields = [[0,1],[1,1]]; else var fields = [[0,0],[1,0]]; } var checkField = GameBoard.board[newField[1]+fields[0][1]][newField[0]+fields[0][0]]; if(checkField==0 || checkField==1 || offset==0 || offset>29) { if(offset>0 && offset<6) { this.x+=x; this.y+=y; } else { var checkField = GameBoard.board[newField[1]+fields[1][1]][newField[0]+fields[1][0]]; if(checkField==0 || checkField==1) { this.x+=x; this.y+=y; } } } },
Najpierw określam współrzędne nowego położenia czołgu(jego górnego lewego narożnika) oraz współrzędne pola na krórym się znajduje. Następnie wyznaczam odstęp(offset) jaki dzieli czołg od krawędzi kratki(Pamiętajmy, że czołg nie jest szeroki na 32px tak jak pole na mapie). Dzięki określeniu pewnej granicy błędu nie będziemy musieli ustawiać się idealnie aby przejechać między dwoma obszarami blokującymi. Znacznie ułatwi to sterowanie.
Kolejnym krokiem jest określenie 2 pól(fields), na podstawie których badane będą kolizje. To jakie pola wybierze skrypt zależy od kierunku w jakim się poruszamy. A są to:

Następnie jest sprawdzany rodzaj tych pól oraz odległość czołgu o nich. Jeżeli wszystko się zgadza, pozycja czołgu zostaje zmieniona.
Całość działa całkiem sprawnie. Efekt końcowy możesz zobaczyć tutaj
Super,super,super
czekam tylko na przewijanie mapy i bedzie genialnie !
Pozdrawiam
Komentarz by maxx — 10 lipca 2010, 12:32
Co do przeszkód, to moim zdaniem lepiej by było jakby czołg przesuwał się o jedną kratkę za jednym naciśnięciem, ew. można też zmniejszyć kratki. Trudno „dobrze wejść w zakręt“
Komentarz by Oskar Wójcicki — 10 lipca 2010, 13:08
Może spróbowałbyś zaokrąglić te ruchy? Tzn. ułatwić wchodzenie w zakręty?
Komentarz by cypherq — 10 lipca 2010, 15:38
Na prawdę aż tak ciężko się skręca? Ja chyba za dużo w to „gram“ podczas pisania i doszedłem do wprawy. W jaki sposób sobie wyobrażacie ułatwianie wchodzenia w zakręty?
Następny artykuł będzie prawdopodobnie o automatycznym poruszaniu się czołgu tak aby przygotować się do sterowania myszką oraz obsługi AI więc myślę, że problem zostanie w pewien sposób rozwiązany
@maxx: niebawem będzie również i przewijanie mapy
.
.
@Oskar Wójcicki: sterowanie co jedno pole to dobry pomysł w przypadku gier typu Pokemon Gold. Tymczasowo jednak zajmuję się czołgami. Później zobaczę co będę miał ochotę popisać
Komentarz by Michał Środek — 10 lipca 2010, 16:02
to chociaż co pół ;p albo zmniejsz „kratki“ … Wtedy powinno być okej… A tak z ciekawości — grywasz w gry typu Pokemon Gold
?
Komentarz by Oskar Wójcicki — 10 lipca 2010, 16:27
Zobaczę, co będzie się dało z tym zrobić
.
Grywałem
Teraz czasu nie mam.
Komentarz by Michał Środek — 10 lipca 2010, 16:29