Aus Das deutschsprachige Scratch-Wiki
| Dieser Artikel soll in Kürze überarbeitet werden oder wird bereits überarbeitet. Status: ausstehend |
Grund: "Blöcke ins Deutsche übersetzen, Siehe auch anpassen"
Dieser Artikel beschreibt Schritt für Schritt, wie man einen Scrolling Platformer erstellt.
Coding the Player
Um die Bewegung des Players zu codieren, müssen die folgenden Skripte erstellt werden. Alle Skripte in diesem Abschnitt befinden sich im Sprite "Player".
When green flag clicked
broadcast (Green Flag v) and wait
broadcast (Play Game v) and wait
When I receive [Play game v]
forever
broadcast (Reset v) and wait
broadcast (Set Up v) and wait
Game On::custom
repeat until <(EXIT)>()>
broadcast (Tick v)
end
if <(EXIT)=(win)> then
Win::custom
else
Die::custom
end
define Position
go to x:((x)-(SCROLL X)) y: ((y) - (SCROLL Y)
define Game On//Run without screen refresh
point in direction (90)
set size to (100)%
clear graphic effects
set [in air v] to (0)
set rotation style [left-right v]
set [sy v] to (0)
set [x v] to (0)
set [y v] to (0)
set [EXIT v] to () // Nothing
set [SCROLLL X v] to (0)
set [SCROLLL Y v] to (0)
show
When I receive [Tick v]
broadcast (Ready v)
Tick <key (Right arrow v) pressed?> <key (Up arrow v) pressed?> <key (Left arrow v) pressed?>::custom
define Tick <right> <up> <left>
if <left> then
Change player X by [-8]::custom
end
if <right> then
Change player X by [8]::custom
end
if <<up> and <(in air)< (4)>> then
set [sy v] to (16)
end
change [sy v] by (-1)
Change player Y by (sy)::custom
Test dying::custom
if <(SCROLL X)<(0)> then
set [SCROLL X v] to (0)
end
if <(SCROLL Y)<(0)> then
set [SCROLL Y v] to (0)
end
change [SCROLL Y v] by (round(((y)-(SCROLL Y))/(10)))
change [SCROLL X v] by (round(((x)-(SCROLL X))/(5)))
Position::custom
if <(y position) < (-180)> then
set [EXIT v] to [die]
end
define Change player X by (sx)
if <(sx::custom)<(0)> then
point in direction (-90)
else
point in direction (90)
end
change [x v] by (sx::csutom)
Position::custom
if <touching (platforms v) ?> then
repeat (12)
change [y v] by (1)
Position::custom
if <not<touching (platforms v) ?>> then
stop [this script v]
end
end
change [y v] by (-12)
repeat until <not<touching (platforms v)?>>
if <(sx)>(0)> then
change [x v] by (-1)
else
change [x v] by (1)
end
Position::custom
end
end
define Change player Y by (sy)
change [y v] by (sy::custom)
change [in air v] by (1)
Position::custom
repeat until <not<touching (platforms v)?>>
if <(sy::custom)>(0)> then
change [y v] by (-1)
else
change [y v] by (1)
set [in air v] to (0)
end
set [sy v] to (0)
Position::custom
end
define Test dying
if <touching (Danger v)?> then
set [EXIT v] to (die)
end
define Die
set [EXIT v] to ()//nothing
repeat (4)
hide
wait (0.1) seconds
show
end
wait (0.5) seconds
define Win
set rotation style [don't rotate v]
repeat (50)
point towards (Portal v)
turn cw (65) degrees
move ((distance to (Portal v))/(2)) steps
change size by (-1)
change [ghost v] effect by (2)
end
hide
change [LEVEL v] by (1)
wait (1) seconds
clear graphic effects
set rotation style [left-right v]
Coding the Platforms Sprite
Sobald der Code des Spielers abgeschlossen ist, muss Code für das Bodensprite (hier als "Plattformen" bezeichnet) hinzugefügt werden, um einen Bildlaufeffekt zu erzielen. Die folgenden Skripte befinden sich im Sprite "Plattformen".
when I receive [Tick v]
Position ((x)-(SCROLL X)) ((y) - (SCROLL Y)
when I receive [Green flag v]
show
define Position (x) (y)
go to x: (x::custom) y: (y::custom)
if <<(x::custom)= (x position)> and <(y::custom) = (y position)>> then
show
else
hide
end
When I receive [Setup v]
set [x v] to (0)
set [y v] to (0)
if <(LEVEL)=(1)> then
switch costume to (Level 1 1)
Clone (450) (0) // This clones a new level. This needs to be done as many times as the number of levels. In this case, 3 is used as an example.
Clone (450) (0)
Clone (450) (0)
else
...::grey // If there is another scene then it should be cloned here using another if else block.
end
define Clone (x) (y)
create clone of (myself v)
change [x v] by (x::custom)
change [y v] by (y::custom)
next costume
Coding the Danger Sprite
Um das Gefahrensprite zu codieren, dupliziere einfach das Sprite "Plattformen" und ersetze alle Level durch nur die gefährlichen Elemente, die den Spieler verletzen würden.
| Man muss sicherstellen, dass man das Gefahrensprite "Gefahr" nennt, da das obige Skript dem Spieler bereits Sinn für ein Sprite mit diesem Namen macht. |
when I receive [Tick v]
position ((x)-(SCROLL X))((y)-(SCROLL Y))::custom
when I receive [Green flag v]
show
when I receive [Reset v]
delete this clone
define Position (x) (y)
go to x: (x::custom) y: (y::custom)
if <<(x::custom)= (x position)> and <(y::custom) = (y position)>> then
show
else
hide
end
when I receive [Setup v]
set [x v] to (0)
set [y v] to (0)
if <(LEVEL)=(1)> then
switch costume to (Level 1 1)
Clone (450) (0) // This clones a new level, do this as many times as the number of levels, in this case 3 is used as an example.
Clone (450) (0)
Clone (450) (0)
else
...::grey // If there is another scene then it should be cloned here using another if else block.
end
define Clone (x) (y)
create clone of (myself v)
change [x v] by (x::custom)
change [y v] by (y::custom)
next costume
Coding the Portal
Jetzt, da alles gemacht ist, muss ein Weg zum nächsten Level gemacht werden.
When I receive [Tick v]
Position ((x)-(SCROLL X)) (((y) - (SCROLL Y)) + ((([sin v] of (timer)) *(100))*(20)))::custom
if <<(costume [number v]) = (2)> and <touching (player v)?>> then
set [EXIT v] to [win]
end
When I receive [Setup v]
set [x v] to (0)
set [y v] to (0)
if <(LEVEL)=(1)> then
switch costume to (Level 1 1)
Position Portal at (450) (180)::custom
else
...::grey // If there is another scene than the portal needs to be positioned here using another if else block.
end
define Position Portal at (x) (y)
set [x v] to (x::custom)
set [y v] to (y::custom)
define Position (x) (y)
go to x: (x::custom) y: (y::custom)
if <<(x::custom)= (x position)> and <(y::custom) = (y position)>> then
show
else
hide
end
Adding Collectibles
Sammlerstücke können dem Spiel hinzugefügt werden, um es interessanter zu machen. Sie sind Objekte, die gesammelt werden müssen, um ein bestimmtes Ziel zu erreichen. Der Code, um sie zu erstellen, ist unten gezeigt:
When I receive [Tick v]
Position ((x)-(SCROLL X)) (((y) - (SCROLL Y)) + ((([sin v] of (timer)) *(300))*(5)))::custom
if <touching (player v)?> then
change [COLLECTED v] by (1)
if <(COLLECTED)=(COLLECTED MAX)> then
broadcast (Open portal v)
start sound (All coins collected v)
else
start sound (Collect v)
end
delete this clone
end
When I receive [Green flag v]
show
when [m v] key pressed
set [MOUSE v] to (join ((mouse x) + (SCROLL X))(join [,]((mouse y) + (SCROLL Y))))
When I receive [Reset v]
delete this clone
define Position (x) (y)
go to x: (x::custom) y: (y::custom)
if <<(x::custom)= (x position)> and <(y::custom) = (y position)>> then
show
else
hide
end
When I receive [Setup v]
set [x v] to (0)
set [y v] to (0)
if <(LEVEL)=(1)> then
Clone (450) (180)::custom
else
...::grey // If there is another scene than coins need to be cloned here using another if else block.
end
define Clone (x) (y)
set [x v] to (x::custom)
set [y v] to (y::custom)
create clone of (myself v)
change [COLLECTED MAX v] by (1)