Discuss Scratch

AANNTTOONNII
Scratcher
1000+ posts

Jak zrobić dobry silnik gry platformowej?

Jako, że jest to mój 100-ny post na forum postanowiłem wykorzystać go do celów edukacyjnych tzn. na napisanie poradnika.
—————————————————————————————————————————————————————
Gotowy skrypt został zastosowany w mojej grze platformowej — Day and Night The platformer
https://scratch.mit.edu/projects/212170093/#player
nowy link - https://scratch.mit.edu/projects/376857831/
—————————————————————————————————————————————————————

JAK STWORZYC DOBRY SILNIK DO GRY PLATFORMOWEJ?

1.Potrzebujemy 4 zmienne:
startX i startY - do określenia początkowego położenia gracza
vX - prędkość gracza w poziomie
vY - prędkość gracza w pionie

2.Teraz pierwsze skrypty:
kiedy kliknięto zieloną flagę
idź do x: (startX) y: (startY) // ustawiamy duszka na początkową pozycję
zawsze
jeżeli <<klawisz [<right arrow> v] naciśnięty?> lub <klawisz [<d> v] naciśnięty?>> to // prawa strzałka lub D zwiększa prędkość w poziomie o 1
zmień [vX v] o (1)
end
jeżeli <<klawisz [<leftt arrow> v] naciśnięty?> lub <klawisz [<a> v] naciśnięty?>> to // lewa strzałka lub A zmniejsza prędkość w poziomie o 1
zmień [vX v] o (-1)
end
end

Jeżeli chcemy żeby duszek poruszał się szybciej lub wolniej to możemy osiągnąć to zmieniając te wartości.

Potrzebne są nam ponadto 2 nowe bloki:
ustaw [vX v] na ((vX) * (0.9))
zmień x o (vX)

Dzięki temu pierwszemu będziemy mieli wrażenie jakoby nasz duszek ślizgał się po planszy jak po lodzie ( można to regulować odpowiednio zwiększając lub zmniejszając wartość vX ). Ten drugi po prostu w każdym obrocie pętli przemieszcza duszka o jego prędkość.

3. Kolejne skrypty:

jeżeli <dotyka [ground v] ?> to
zmień y o (1)
jeżeli <dotyka [ground v] ?> to
zmień y o (1)
jeżeli <dotyka [ground v] ?> to
zmień y o (1)
jeżeli <dotyka [ground v] ?> to
zmień y o (1)
jeżeli <dotyka [ground v] ?> to
zmień y o (1)
jeżeli <dotyka [ground v] ?> to
zmień y o (-5)
zmień x o ((vX) * (-1))

jeżeli <<klawisz [up arrow v] naciśnięty?> lub <klawisz [w v] naciśnięty?>> to // parkour (odbijamy się od ściany)


jeżeli <[vX] > [0]> to


ustaw [vX v] na [-5]

w przeciwnym razie

ustaw [vX v] na [5]

end

zmień [vY v] o (5)

w przeciwnym razie

ustaw [vX v] na [0]

end

end
end
end
end
end
end

Ten przydługi skrypt zapobiega wchodzeniu w ściany. Założenie jest takie, że jeżeli jesteśmy więcej niż 5 pikseli pod ziemią to jest to ściana. Zawarłem w nim też skrypt umożliwiający parkour (pozwalający odbić się od ściany).

4. Teraz jeszcze tylko skrypty na skakanie i spadanie, a wyglądają one następująco:

zmień [vY v] o (-1) // spadanie
zmień y o (vY)
jeżeli <dotyka [ground v] ?> to // dotykamy ziemii, nie musimy już dalej spadać
zmień y o ((vY) * (-1))
ustaw [vY v] na [0]
zmień y o (-1)
jeżeli <dotyka [ground v] ?> to // jeśli dotykamy ziemii to możemy skoczyć
jeżeli <<klawisz [up arrow v] naciśnięty?> lub <klawisz [w v] naciśnięty?>> to
ustaw [vY v] na [15]
end
end
zmień y o (1)
end

Skok może być też wyższy. Jeżeli chcesz żeby gracz mógł skakać wyżej to ustawiaj wartość vY na ponad 15.

Dlaczego przed sprawdzeniem, czy klawisz W jest wciśnięty zmieniam y o -1?
Wytłumaczenie jest proste. W przypadku kiedy gracz dotyka ziemi od razu idzie do góry, jeśli więc zaistniała kiedyś sytuacja, że gracz dotyka ziemii to już za chwilę gracz szedł do góry. Sprawdzam więc, czy duszek nie będzie dotykał ziemi 1 piksel niżej.

5. Na koniec pozostaje już tylko śmierć i przewijanie leveli. Załatwia to prosty skrypt, którego jednak nie będę tu opisywał ponieważ każdy potrzebuje trochę inny. Nie mógłbym zadowolić wszystkich.



Last edited by AANNTTOONNII (May 7, 2020 11:36:16)

MentolMen
Scratcher
1000+ posts

Jak zrobić dobry silnik gry platformowej?

Mogłeś jeszcze dać skrypty na if które zmieniają x/y (przyspieszenie, skok) (wiem, że łatwe, ale jak coś dla nowicjuszy to wypadało by pokazać, że można y i x zmieniać bardzo łatwo)
w skrypcie 3. coś ci nie wyszło w skrypcie, bo zmienna na jako tekst wpisana.
To jest chyba ten skrypt taki najbardziej popularny, na pęczki go jest. Lepiej by było zrobić projekt czysto z tym skryptem, bo pewnie w twojej grze masz urozmaicenia, których nie opisałeś. Nawet jeśli nie, to łatwiej wziąć sam skrypt niż go szukać w grze.

“Potrzebne bendą nam 4 zmienne startX, startY i vX, vY”
*będą
Myślę, że nie ma sensu robienia poradników do rzeczy które są bardzo proste(platformówki są bardzo bardzo często robione w scratchu. Skryptów jest pełno takich) i w scratchu roi się od poradników do tego.
Jak już po polsku to “ground” tez po polsku
Tutaj przydałby się ogromny poradnik dla nowicjuszy, bo ludzie nie ogarniają podstaw. Jak ktoś ogarnia te skrypty, co dałeś, to też an pewno w
Napisane o 16:42(nie wysłało się przedtem)
AANNTTOONNII
Scratcher
1000+ posts

Jak zrobić dobry silnik gry platformowej?

Nie miałem pomysłu, a nie chciałem ani 3d ani multiplayer bo tego jeszcze pełniej niż skryptów do platformówek. Dodam zmianę przyspieszenia i wyskokości skoku do poradnika.
MentolMen
Scratcher
1000+ posts

Jak zrobić dobry silnik gry platformowej?

multiplayer teraz nie de rady zrobić(da, ale będzie to w bardzo uproszczonej formie. Chociaż miałem ostatnio pomysł by podzielić na 10 zmiennych i może by szybko działało) 3d można na wiele sposobów zrobić i opisanie jak zrobić jeden i tak było by bardzo wyczerpujące, a nikt takiego nie zrobił. Można dodać jakieś skrypty na powierzchnie, która podbija w górę i taką która przyspiesza.
Shroomi3
Scratcher
1 post

Jak zrobić dobry silnik gry platformowej?

Nie znam się za bardzo na Scratchu więc dzięki

Last edited by Shroomi3 (March 19, 2019 16:41:37)

FnafEditor10987
Scratcher
5 posts

Jak zrobić dobry silnik gry platformowej?

kiedy duszek kliknięty
nadaj [Link do mojego projektu: v]
powiedz [https://scratch.mit.edu/projects/396434342/]
artur32123
Scratcher
100+ posts

Jak zrobić dobry silnik gry platformowej?

FnafEditor10987 wrote:

kiedy duszek kliknięty
nadaj [Link do mojego projektu: v]
powiedz [https://scratch.mit.edu/projects/396434342/]
Nie pisz tego w tematach poradnikowych masz gdzieś temat do reklam gier/programów



kiedy [ nuda] > (99)
zawsze
programuj w scratchu aż<[nuda] = [0]>
end
paczekwmasle
Scratcher
500+ posts

Jak zrobić dobry silnik gry platformowej?

artur32123 wrote:

FnafEditor10987 wrote:

kiedy duszek kliknięty
nadaj [Link do mojego projektu: v]
powiedz [https://scratch.mit.edu/projects/396434342/]
Nie pisz tego w tematach poradnikowych masz gdzieś temat do reklam gier/programów
Dokładnie to ten: https://scratch.mit.edu/discuss/topic/57260/

podpisano @paczekwmasle
AANNTTOONNII
Scratcher
1000+ posts

Jak zrobić dobry silnik gry platformowej?

FnafEditor10987 wrote:

kiedy kliknięto zieloną flagę
zawsze
powiedz [Dzięki] przez (2) s
zagraj dźwięk [Rób więcej takich poradników!]

Jest ich bardzo dużo. Zobacz tutaj.

Last edited by AANNTTOONNII (May 18, 2020 11:14:50)

vocaloidka5
Scratcher
43 posts

Jak zrobić dobry silnik gry platformowej?

Ja używam takiego:

kiedy kliknięto zieloną flagę
idź do x: (-178) y: (-112)
zmień tło na [ v]
ustaw [poziom] na [1]
zawsze
jeżeli <klawisz [strzałka w górę] naciśnięty?> to
jeżeli <klawisz [strzałka w prawo] naciśnięty?> to
zmień x o (3)
end
jeżeli <klawisz [strzałka w lewo] naciśnięty?> to
zmień x o (-3)
end
w przeciwnym razie
jeżeli <klawisz [strzałka w prawo] naciśnięty?> to
zmień x o (5)
end
jeżeli <klawisz [strzałka w lewo] naciśnięty?> to
zmień x o (-5)
end
end
jeżeli <dotyka koloru [#70f71c] ?> to
powtarzaj aż <nie <dotyka koloru [#70f71c] ?>>
zmień y o (2)
end
end
jeżeli <dotyka koloru [] ?> to
idź do x: (-178) y: (-112)
następne tło
grawitacja
zmień [poziom] o (1)
jeżeli <dotyka koloru [#70f71c] ?> to
powtarzaj aż <nie <dotyka koloru [#70f71c] ?>>
zmień y o (2)
end
end
end
jeżeli <dotyka koloru [#352fe2] ?> to
idź do x: (-178) y: (-112)
grawitacja
jeżeli <dotyka koloru [#70f71c] ?> to
powtarzaj aż <nie <dotyka koloru [#70f71c] ?>>
zmień y o (2)
end
end
end
end

definiuj grawitacja
jeżeli <nie <dotyka koloru [#70f71c] ?>> to
powtarzaj aż <dotyka koloru [#70f71c] ?>
zmień y o (-4)
end
end

kiedy kliknięto zieloną flagę
grawitacja

kiedy kliknięto zieloną flagę
zawsze
jeżeli <klawisz [strzałka w górę] naciśnięty?> to
powtórz (15) razy
zmień y o (4)
end
czekaj (0,02) s
grawitacja
end
end

-Ten zielony to grunt
-Ten biały to portal na kolejny poziom
-Ten niebieski to kolor którego nie można dotykać

Last edited by vocaloidka5 (May 19, 2020 07:31:16)

artur32123
Scratcher
100+ posts

Jak zrobić dobry silnik gry platformowej?

vocaloidka5 wrote:

Ja używam takiego:

kiedy kliknięto zieloną flagę
idź do x: (-178) y: (-112)
zmień tło na [ v]
ustaw [poziom] na [1]
zawsze
jeżeli <klawisz [strzałka w górę] naciśnięty?> to
jeżeli <klawisz [strzałka w prawo] naciśnięty?> to
zmień x o (3)
end
jeżeli <klawisz [strzałka w lewo] naciśnięty?> to
zmień x o (-3)
end
w przeciwnym razie
jeżeli <klawisz [strzałka w prawo] naciśnięty?> to
zmień x o (5)
end
jeżeli <klawisz [strzałka w lewo] naciśnięty?> to
zmień x o (-5)
end
end
jeżeli <dotyka koloru [#70f71c] ?> to
powtarzaj aż <nie <dotyka koloru [#70f71c] ?>>
zmień y o (2)
end
end
jeżeli <dotyka koloru [] ?> to
idź do x: (-178) y: (-112)
następne tło
grawitacja
zmień [poziom] o (1)
jeżeli <dotyka koloru [#70f71c] ?> to
powtarzaj aż <nie <dotyka koloru [#70f71c] ?>>
zmień y o (2)
end
end
end
jeżeli <dotyka koloru [#352fe2] ?> to
idź do x: (-178) y: (-112)
grawitacja
jeżeli <dotyka koloru [#70f71c] ?> to
powtarzaj aż <nie <dotyka koloru [#70f71c] ?>>
zmień y o (2)
end
end
end
end

definiuj grawitacja
jeżeli <nie <dotyka koloru [#70f71c] ?>> to
powtarzaj aż <dotyka koloru [#70f71c] ?>
zmień y o (-4)
end
end

kiedy kliknięto zieloną flagę
grawitacja

kiedy kliknięto zieloną flagę
zawsze
jeżeli <klawisz [strzałka w górę] naciśnięty?> to
powtórz (15) razy
zmień y o (4)
end
czekaj (0,02) s
grawitacja
end
end

-Ten zielony to grunt
-Ten biały to portal na kolejny poziom
-Ten niebieski to kolor którego nie można dotykać

Wow! Świetny skrypt!



kiedy [ nuda] > (99)
zawsze
programuj w scratchu aż<[nuda] = [0]>
end
paczekwmasle
Scratcher
500+ posts

Jak zrobić dobry silnik gry platformowej?

artur32123 wrote:

Wow! Świetny skrypt!
staraj się nie cytować takich długich skryptów, bo to zajmuje bardzo dużo miejsca wystarczy, że zwrócisz się do konkretnej osoby np. @vocaloidka5

podpisano @paczekwmasle
AANNTTOONNII
Scratcher
1000+ posts

Jak zrobić dobry silnik gry platformowej?

artur32123 wrote:

Wow! Świetny skrypt!

Grawitacja, która nie przyspiesza?…
artur32123
Scratcher
100+ posts

Jak zrobić dobry silnik gry platformowej?

paczekwmasle wrote:

artur32123 wrote:

Wow! Świetny skrypt!
staraj się nie cytować takich długich skryptów, bo to zajmuje bardzo dużo miejsca wystarczy, że zwrócisz się do konkretnej osoby np. @vocaloidka5
Ok, postaram się.



kiedy [ nuda] > (99)
zawsze
programuj w scratchu aż<[nuda] = [0]>
end
PL_DkD_PL
Scratcher
500+ posts

Jak zrobić dobry silnik gry platformowej?

A jak zrobić platformówkę z tzw. walljumpem?
AANNTTOONNII
Scratcher
1000+ posts

Jak zrobić dobry silnik gry platformowej?

PL_DkD_PL wrote:

A jak zrobić platformówkę z tzw. walljumpem?

Skrypt z poradnika go obsługuje. Tylko, że nazwałem go “parkourem”:

AANNTTOONNII wrote:

Ten przydługi skrypt zapobiega wchodzeniu w ściany. Założenie jest takie, że jeżeli jesteśmy więcej niż 5 pikseli pod ziemią to jest to ściana. Zawarłem w nim też skrypt umożliwiający parkour (pozwalający odbić się od ściany).
PL_DkD_PL
Scratcher
500+ posts

Jak zrobić dobry silnik gry platformowej?

A ok, dzięki
alexisgamergo9
Scratcher
76 posts

Jak zrobić dobry silnik gry platformowej?

AANNTTOONNII wrote:

Jako, że jest to mój 100-ny post na forum postanowiłem wykorzystać go do celów edukacyjnych tzn. na napisanie poradnika.
—————————————————————————————————————————————————————
Gotowy skrypt został zastosowany w mojej grze platformowej — Day and Night The platformer
https://scratch.mit.edu/projects/212170093/#player
nowy link - https://scratch.mit.edu/projects/376857831/
—————————————————————————————————————————————————————

JAK STWORZYC DOBRY SILNIK DO GRY PLATFORMOWEJ?

1.Potrzebujemy 4 zmienne:
startX i startY - do określenia początkowego położenia gracza
vX - prędkość gracza w poziomie
vY - prędkość gracza w pionie

2.Teraz pierwsze skrypty:
kiedy kliknięto zieloną flagę
idź do x: (startX) y: (startY) // ustawiamy duszka na początkową pozycję
zawsze
jeżeli <<klawisz [<right arrow> v] naciśnięty?> lub <klawisz [<d> v] naciśnięty?>> to // prawa strzałka lub D zwiększa prędkość w poziomie o 1
zmień [vX v] o (1)
end
jeżeli <<klawisz [<leftt arrow> v] naciśnięty?> lub <klawisz [<a> v] naciśnięty?>> to // lewa strzałka lub A zmniejsza prędkość w poziomie o 1
zmień [vX v] o (-1)
end
end

Jeżeli chcemy żeby duszek poruszał się szybciej lub wolniej to możemy osiągnąć to zmieniając te wartości.

Potrzebne są nam ponadto 2 nowe bloki:
ustaw [vX v] na ((vX) * (0.9))
zmień x o (vX)

Dzięki temu pierwszemu będziemy mieli wrażenie jakoby nasz duszek ślizgał się po planszy jak po lodzie ( można to regulować odpowiednio zwiększając lub zmniejszając wartość vX ). Ten drugi po prostu w każdym obrocie pętli przemieszcza duszka o jego prędkość.

3. Kolejne skrypty:

jeżeli <dotyka [ground v] ?> to
zmień y o (1)
jeżeli <dotyka [ground v] ?> to
zmień y o (1)
jeżeli <dotyka [ground v] ?> to
zmień y o (1)
jeżeli <dotyka [ground v] ?> to
zmień y o (1)
jeżeli <dotyka [ground v] ?> to
zmień y o (1)
jeżeli <dotyka [ground v] ?> to
zmień y o (-5)
zmień x o ((vX) * (-1))

jeżeli <<klawisz [up arrow v] naciśnięty?> lub <klawisz [w v] naciśnięty?>> to // parkour (odbijamy się od ściany)


jeżeli <[vX] > [0]> to


ustaw [vX v] na [-5]

w przeciwnym razie

ustaw [vX v] na [5]

end

zmień [vY v] o (5)

w przeciwnym razie

ustaw [vX v] na [0]

end

end
end
end
end
end
end

Ten przydługi skrypt zapobiega wchodzeniu w ściany. Założenie jest takie, że jeżeli jesteśmy więcej niż 5 pikseli pod ziemią to jest to ściana. Zawarłem w nim też skrypt umożliwiający parkour (pozwalający odbić się od ściany).

4. Teraz jeszcze tylko skrypty na skakanie i spadanie, a wyglądają one następująco:

zmień [vY v] o (-1) // spadanie
zmień y o (vY)
jeżeli <dotyka [ground v] ?> to // dotykamy ziemii, nie musimy już dalej spadać
zmień y o ((vY) * (-1))
ustaw [vY v] na [0]
zmień y o (-1)
jeżeli <dotyka [ground v] ?> to // jeśli dotykamy ziemii to możemy skoczyć
jeżeli <<klawisz [up arrow v] naciśnięty?> lub <klawisz [w v] naciśnięty?>> to
ustaw [vY v] na [15]
end
end
zmień y o (1)
end

Skok może być też wyższy. Jeżeli chcesz żeby gracz mógł skakać wyżej to ustawiaj wartość vY na ponad 15.

Dlaczego przed sprawdzeniem, czy klawisz W jest wciśnięty zmieniam y o -1?
Wytłumaczenie jest proste. W przypadku kiedy gracz dotyka ziemi od razu idzie do góry, jeśli więc zaistniała kiedyś sytuacja, że gracz dotyka ziemii to już za chwilę gracz szedł do góry. Sprawdzam więc, czy duszek nie będzie dotykał ziemi 1 piksel niżej.

5. Na koniec pozostaje już tylko śmierć i przewijanie leveli. Załatwia to prosty skrypt, którego jednak nie będę tu opisywał ponieważ każdy potrzebuje trochę inny. Nie mógłbym zadowolić wszystkich.



dzięki bardzo a hp bym chcial dodać i wtedy nie wiem co będe mial zrobić?
AANNTTOONNII
Scratcher
1000+ posts

Jak zrobić dobry silnik gry platformowej?

@alexisgamergo9

Nie cytuj takich długich postów. Zamiast tego możesz zwrócić się do mnie małpą. A teraz odpowiedź na twoje pytanie:

Dodaj do projektu duszka, który będzie ranił gracza, mogą to być np. kolce w czerwonym kolorze. Dodaj zmienną hp. Do pętli zawsze dodaj taki skrypt:

jeżeli <<dotyka [raniący duszek v] ?> i <nie <(mutex) = [1]>>> to
nadaj [hurt v]
end

I do tego duszka gdzieć indziej daj:

kiedy otrzymam [hurt v]
ustaw [mutex v] na [1]
zmień [hp v] o (-1)
czekaj (ile chcesz) s
ustaw [mutex v] na [0]

To wszystko.
alexisgamergo9
Scratcher
76 posts

Jak zrobić dobry silnik gry platformowej?

AANNTTOONNII wrote:

@alexisgamergo9
@AANNTTOONNII a jakto ma wyglądać w sensie co to mutex ten bo niewiem i co to vY vX bo mnie to ciekawii? i dlaczego nie dałeś bloku zawsze

Powered by DjangoBB