A variety of clarity changes to the your-first-game tutorial (#517)
* A variety of clarity changes to the your-first-game tutorial * Requested changes from review
This commit is contained in:
parent
84a3c21ba6
commit
300951b2c1
Binary file not shown.
After Width: | Height: | Size: 12 KiB |
Binary file not shown.
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 21 KiB |
|
@ -33,7 +33,8 @@ Launch Godot and create a new project. Then, download
|
|||
using to make the game. Unzip these files in your new project folder.
|
||||
|
||||
.. note:: For this tutorial, we will assume you are already familiar with the
|
||||
Godot Engine editor. If you haven't read :ref:`doc_scenes_and_nodes`, do so now.
|
||||
Godot Engine editor. If you haven't read :ref:`doc_scenes_and_nodes`, do so now
|
||||
for an explanation of setting up a project and using the editor.
|
||||
|
||||
This game will use "portrait" mode, so we need to adjust the size of the
|
||||
game window. Click on Project -> Project Settings -> Display -> Window and
|
||||
|
@ -150,8 +151,9 @@ that's a good time to find the size of the game window:
|
|||
func _ready():
|
||||
screensize = get_viewport_rect().size
|
||||
|
||||
Now we can use the ``_process()`` function to define what the player
|
||||
will do every frame:
|
||||
Now we can use the ``_process()`` function to define what the player will do.
|
||||
The ``_process()`` function is called on every frame, so we'll use it to update
|
||||
elements of our game which we expect to be changing often. Here we'll have it:
|
||||
|
||||
- check for input
|
||||
- move in the given direction
|
||||
|
@ -196,6 +198,10 @@ We can prevent that if we *normalize* the velocity, which means we set
|
|||
its *length* to ``1``, and multiply by the desired speed. This means no
|
||||
more fast diagonal movement.
|
||||
|
||||
.. tip:: If you've never used vector math before (or just need a refresher)
|
||||
you can see an explanation of vector usage in Godot at :ref:`doc_vector_math`.
|
||||
It's good to know but won't be necessary for the rest of this tutorial.
|
||||
|
||||
We also check whether the player is moving so we can start or stop the
|
||||
AnimatedSprite animation.
|
||||
|
||||
|
@ -222,6 +228,7 @@ AnimatedSprite is playing based on direction. We have a "right"
|
|||
animation, which should be flipped horizontally (using the ``flip_h``
|
||||
property) for left movement, and an "up" animation, which should be
|
||||
flipped vertically (``flip_v``) for downward movement.
|
||||
Let's place this code at the end of our ``_process()`` function:
|
||||
|
||||
::
|
||||
|
||||
|
@ -273,7 +280,7 @@ Add this code to the function:
|
|||
::
|
||||
|
||||
func _on_Player_body_entered( area ):
|
||||
hide()
|
||||
hide() # Player disappears after being hit
|
||||
emit_signal("hit")
|
||||
monitoring = false
|
||||
|
||||
|
@ -316,6 +323,8 @@ create any number of independent mobs in the game.
|
|||
Node Setup
|
||||
~~~~~~~~~~
|
||||
|
||||
Click Scene -> New Scene and we'll create the Mob.
|
||||
|
||||
The Mob scene will use the following nodes:
|
||||
|
||||
- :ref:`RigidBody2D <class_RigidBody2D>` (named ``Mob``)
|
||||
|
@ -325,9 +334,9 @@ The Mob scene will use the following nodes:
|
|||
- :ref:`VisibilityNotifier2D <class_VisibilityNotifier2D>` (named ``Visibility``)
|
||||
|
||||
In the :ref:`RigidBody2D <class_RigidBody2D>` properties, set ``Gravity Scale`` to ``0`` (so
|
||||
that the mob will not fall downward). In addition, under
|
||||
``PhysicsBody2D``, click the ``Mask`` property and uncheck the first
|
||||
box. This will ensure that the mobs do not collide with each other.
|
||||
that the mob will not fall downward). In addition, under the
|
||||
``PhysicsBody2D`` section in the Inspector, click the ``Mask`` property and
|
||||
uncheck the first box. This will ensure that the mobs do not collide with each other.
|
||||
|
||||
.. image:: /img/set_collision_mask.png
|
||||
|
||||
|
@ -411,8 +420,7 @@ follows:
|
|||
- ``StartTimer``: ``2``
|
||||
|
||||
In addition, set the ``One Shot`` property of ``StartTimer`` to "On" and
|
||||
set ``Position`` of the ``StartPosition`` node to ``(240, 450)``. Now add a
|
||||
script to ``Main``.
|
||||
set ``Position`` of the ``StartPosition`` node to ``(240, 450)``.
|
||||
|
||||
Spawning Mobs
|
||||
~~~~~~~~~~~~~
|
||||
|
@ -425,7 +433,8 @@ you will see some new buttons appear at the top of the editor:
|
|||
.. image:: /img/path2d_buttons.png
|
||||
|
||||
Select the middle one ("Add Point") and draw the path by clicking to add
|
||||
the points shown.
|
||||
the points shown. To have the points snap to the grid, make sure "Use Snap" is
|
||||
checked. This option can be found under the "Edit" button to the left of the Path2D buttons.
|
||||
|
||||
.. image:: /img/draw_path2d.png
|
||||
|
||||
|
@ -527,16 +536,24 @@ HUD
|
|||
|
||||
The final piece our game needs is a UI: an interface to display things
|
||||
like score, a "game over" message, and a restart button. Create a new
|
||||
scene, and add a ``CanvasLayer`` node named ``HUD`` ("HUD" stands for
|
||||
scene, and add a :ref:`CanvasLayer <class_CanvasLayer>` node named ``HUD`` ("HUD" stands for
|
||||
"heads-up display", meaning an informational display that appears as an
|
||||
overlay, on top of the game view).
|
||||
|
||||
The :ref:`CanvasLayer <class_CanvasLayer>` node lets us draw our UI elements on
|
||||
the layer above the rest of the game so that the information it displays doesn't get
|
||||
covered up by any game elements like the player or the mobs.
|
||||
|
||||
The HUD displays the following information:
|
||||
|
||||
- Score, changed by ``ScoreTimer``
|
||||
- A message, such as "Game Over" or "Get Ready!"
|
||||
- A "Start" button to begin the game
|
||||
|
||||
The basic node for UI elements is :ref:`Control <class_Control>`. To create our UI,
|
||||
we'll use two types of :ref:`Control <class_Control>` nodes: The :ref:`Label <class_Label>`
|
||||
and the :ref:`Button <class_Button>`.
|
||||
|
||||
Create the following children of the ``HUD`` node:
|
||||
|
||||
- :ref:`Label <class_Label>` (named ``ScoreLabel``)
|
||||
|
@ -670,6 +687,12 @@ Connect the ``timout()`` signal of ``MessageTimer`` and the
|
|||
Connecting HUD to Main
|
||||
~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Now that we're done creating the ``HUD`` scene, save it and go back to ``Main``.
|
||||
Instance the ``HUD`` scene in ``Main`` like you did the ``Player`` scene, and place it at the
|
||||
bottom of tree. The full tree should look like this, so make sure you didn't miss anything:
|
||||
|
||||
.. image:: /img/completed_main_scene.png
|
||||
|
||||
Now we need to connect the ``HUD`` functionality to our ``Main`` script.
|
||||
This requires a few additions to the ``Main`` scene:
|
||||
|
||||
|
|
Loading…
Reference in New Issue