Browse Source

Grammar and link fixes for "InputEvent" and "Simple 2D Game"

simple_2d_game.rst had a broken link, so I updated it along with inputevent.rst
Jeff Knox 9 years ago
parent
commit
26f12b58c4
2 changed files with 40 additions and 39 deletions
  1. 14 14
      tutorials/engine/inputevent.rst
  2. 26 25
      tutorials/step_by_step/simple_2d_game.rst

+ 14 - 14
tutorials/engine/inputevent.rst

@@ -16,9 +16,9 @@ How does it work?
 -----------------
 -----------------
 
 
 Every input event is originated from the user/player (though it's
 Every input event is originated from the user/player (though it's
-possible to generate an InputEvent and feed then back to the engine,
+possible to generate an InputEvent and feed them back to the engine,
 which is useful for gestures). The OS object for each platform will read
 which is useful for gestures). The OS object for each platform will read
-events from the device, then feed the to MainLoop. As :ref:`SceneTree <class_SceneTree>`
+events from the device, then feed them to MainLoop. As :ref:`SceneTree <class_SceneTree>`
 is the default MainLoop implementation, events are fed to it. Godot
 is the default MainLoop implementation, events are fed to it. Godot
 provides a function to get the current SceneTree object :
 provides a function to get the current SceneTree object :
 **get_tree()**.
 **get_tree()**.
@@ -31,7 +31,7 @@ received input, in order:
 .. image:: /img/input_event_flow.png
 .. image:: /img/input_event_flow.png
 
 
 1. First, it will try to feed the input to the GUI, and see if any
 1. First, it will try to feed the input to the GUI, and see if any
-   control can receive it. If so, the :ref:`Control <class_Control>` will be called the
+   control can receive it. If so, the :ref:`Control <class_Control>` will be called via the
    virtual function :ref:`Control._input_event() <class_Control__input_event>` and the signal
    virtual function :ref:`Control._input_event() <class_Control__input_event>` and the signal
    "input_event" will be emitted (this function is re-implementable by
    "input_event" will be emitted (this function is re-implementable by
    script by inheriting from it). If the control wants to "consume" the
    script by inheriting from it). If the control wants to "consume" the
@@ -39,19 +39,19 @@ received input, in order:
    not spread any more.
    not spread any more.
 2. If the GUI does not want the event, the standard _input function
 2. If the GUI does not want the event, the standard _input function
    will be called in any node with input processing enabled (enable with
    will be called in any node with input processing enabled (enable with
-   :ref:`Node.set_process_input() <class_Node_set_process_input>`) and override
+   :ref:`Node.set_process_input() <class_Node_set_process_input>` and override
    :ref:`Node._input() <class_Node__input>`). If any function consumes the event, it can
    :ref:`Node._input() <class_Node__input>`). If any function consumes the event, it can
    call :ref:`SceneTree.set_input_as_handled() <class_SceneTree_set_input_as_handled>`, and the event will
    call :ref:`SceneTree.set_input_as_handled() <class_SceneTree_set_input_as_handled>`, and the event will
    not spread any more.
    not spread any more.
 3. If so far no one consumed the event, the unhandled input callback
 3. If so far no one consumed the event, the unhandled input callback
    will be called (enable with
    will be called (enable with
-   :ref:`Node.set_process_unhandled_input() <class_Node_set_process_unhandled_input>`) and override
+   :ref:`Node.set_process_unhandled_input() <class_Node_set_process_unhandled_input>` and override
    :ref:`Node._unhandled_input() <class_Node__unhandled_input>`). If any function consumes the
    :ref:`Node._unhandled_input() <class_Node__unhandled_input>`). If any function consumes the
    event, it can call :ref:`SceneTree.set_input_as_handled() <class_SceneTree_set_input_as_handled>`, and the
    event, it can call :ref:`SceneTree.set_input_as_handled() <class_SceneTree_set_input_as_handled>`, and the
    event will not spread any more.
    event will not spread any more.
 4. If no one wanted the event so far, and a :ref:`Camera <class_Camera>` is assigned
 4. If no one wanted the event so far, and a :ref:`Camera <class_Camera>` is assigned
    to the Viewport, a ray to the physics world (in the ray direction from
    to the Viewport, a ray to the physics world (in the ray direction from
-   the click) will be casted. If this ray hits an object, it will call the
+   the click) will be cast. If this ray hits an object, it will call the
    :ref:`CollisionObject._input_event() <class_CollisionObject__input_event>` function in the relevant
    :ref:`CollisionObject._input_event() <class_CollisionObject__input_event>` function in the relevant
    physics object (bodies receive this callback by default, but areas do
    physics object (bodies receive this callback by default, but areas do
    not. This can be configured through :ref:`Area <class_Area>` properties).
    not. This can be configured through :ref:`Area <class_Area>` properties).
@@ -76,19 +76,19 @@ Example of changing event type.
     # create event
     # create event
     var ev = InputEvent()
     var ev = InputEvent()
     # set type index
     # set type index
-    ev.type=InputEvent.MOUSE_BUTTON
+    ev.type = InputEvent.MOUSE_BUTTON
     # button_index is only available for the above type
     # button_index is only available for the above type
-    ev.button_index=BUTTON_LEFT
+    ev.button_index = BUTTON_LEFT
 
 
 There are several types of InputEvent, described in the table below:
 There are several types of InputEvent, described in the table below:
 
 
 +-------------------------------------------------------------------+--------------------+-----------------------------------------+
 +-------------------------------------------------------------------+--------------------+-----------------------------------------+
 | Event                                                             | Type Index         | Description                             |
 | Event                                                             | Type Index         | Description                             |
 +-------------------------------------------------------------------+--------------------+-----------------------------------------+
 +-------------------------------------------------------------------+--------------------+-----------------------------------------+
-| :ref:`InputEvent <class_InputEvent>`                              | NONE               | Empty Input Event                       |
+| :ref:`InputEvent <class_InputEvent>`                              | NONE               | Empty Input Event.                      |
 +-------------------------------------------------------------------+--------------------+-----------------------------------------+
 +-------------------------------------------------------------------+--------------------+-----------------------------------------+
 | :ref:`InputEventKey <class_InputEventKey>`                        | KEY                | Contains a scancode and unicode value,  |
 | :ref:`InputEventKey <class_InputEventKey>`                        | KEY                | Contains a scancode and unicode value,  |
-|                                                                   |                    | as well as modifiers                    |
+|                                                                   |                    | as well as modifiers.                   |
 +-------------------------------------------------------------------+--------------------+-----------------------------------------+
 +-------------------------------------------------------------------+--------------------+-----------------------------------------+
 | :ref:`InputEventMouseButton <class_InputEventMouseButton>`        | MOUSE_BUTTON       | Contains click information, such as     |
 | :ref:`InputEventMouseButton <class_InputEventMouseButton>`        | MOUSE_BUTTON       | Contains click information, such as     |
 |                                                                   |                    | button, modifiers, etc.                 |
 |                                                                   |                    | button, modifiers, etc.                 |
@@ -121,8 +121,8 @@ An InputEvent may or may not represent a pre-defined action. Actions are
 useful because they abstract the input device when programming the game
 useful because they abstract the input device when programming the game
 logic. This allows for:
 logic. This allows for:
 
 
--  The same code to work on different devices with different inputs (ie:
-   keyboard on PC, Joypad on console)
+-  The same code to work on different devices with different inputs (e.g.,
+   keyboard on PC, Joypad on console).
 -  Input to be reconfigured at run-time.
 -  Input to be reconfigured at run-time.
 
 
 Actions can be created from the Project Settings menu in the Actions
 Actions can be created from the Project Settings menu in the Actions
@@ -140,7 +140,7 @@ SceneTree (derived from MainLoop) has a method for this:
 ::
 ::
 
 
     var ev = InputEvent()
     var ev = InputEvent()
-    ev.type=InputEvent.ACTION
+    ev.type = InputEvent.ACTION
     # set as move_left, pressed
     # set as move_left, pressed
     ev.set_as_action("move_left", true) 
     ev.set_as_action("move_left", true) 
     # feedback
     # feedback
@@ -154,4 +154,4 @@ whole workflow depends on actions, the :ref:`InputMap <class_InputMap>` singleto
 ideal for reassigning or creating different actions at run-time. This
 ideal for reassigning or creating different actions at run-time. This
 singleton is not saved (must be modified manually) and its state is run
 singleton is not saved (must be modified manually) and its state is run
 from the project settings (engine.cfg). So any dynamic system of this
 from the project settings (engine.cfg). So any dynamic system of this
-type needs to store settings in the way the programmer sees best fit.
+type needs to store settings in the way the programmer best sees fit.

+ 26 - 25
tutorials/step_by_step/simple_2d_game.rst

@@ -8,7 +8,7 @@ Pong
 
 
 In this simple tutorial, a basic game of Pong will be created. There are
 In this simple tutorial, a basic game of Pong will be created. There are
 plenty of more complex examples in the demos included with the engine,
 plenty of more complex examples in the demos included with the engine,
-but this should get introduced to basic functionality for 2D Games.
+but this should get one introduced to basic functionality for 2D Games.
 
 
 Assets
 Assets
 ~~~~~~
 ~~~~~~
@@ -25,7 +25,7 @@ resolution. This can be configured in the Project Settings (see :ref:`doc_scenes
 .. image:: /img/clearcolor.png
 .. image:: /img/clearcolor.png
 
 
 Create a :ref:`class_Node2D` node for the project root. Node2D is the base
 Create a :ref:`class_Node2D` node for the project root. Node2D is the base
-type for the 2D engine. After this, add some sprites :ref:`class_Sprite`
+type for the 2D engine. After this, add some sprites (:ref:`class_Sprite`
 node) and set each to the corresponding texture. The final scene layout
 node) and set each to the corresponding texture. The final scene layout
 should look similar to this (note: the ball is in the middle!):
 should look similar to this (note: the ball is in the middle!):
 
 
@@ -38,7 +38,7 @@ The scene tree should, then, look similar to this:
 Save the scene as "pong.scn" and set it as the main scene in the project
 Save the scene as "pong.scn" and set it as the main scene in the project
 properties.
 properties.
 
 
-.. _doc_simple_2d_game-input_actions_setup
+.. _doc_simple_2d_game-input_actions_setup:
 
 
 Input actions setup
 Input actions setup
 ~~~~~~~~~~~~~~~~~~~
 ~~~~~~~~~~~~~~~~~~~
@@ -55,9 +55,10 @@ is defined, then input methods that trigger it are added.
 Open the project properties dialog again, but this time move to the
 Open the project properties dialog again, but this time move to the
 "Input Map" tab.
 "Input Map" tab.
 
 
+.. role:: python(code)
 On it, add 4 actions:
 On it, add 4 actions:
-"left_move_up","left_move_down","right_move_up","right_move_down".
-Assign the keys that you desire. A/Z for left and Up/Down as keys
+``left_move_up``, ``left_move_down``, ``right_move_up``, ``right_move_down``.
+Assign the keys that you desire. A/Z (for the left player) and Up/Down (for the right player) as keys
 should work in most cases.
 should work in most cases.
 
 
 .. image:: /img/inputmap.png
 .. image:: /img/inputmap.png
@@ -92,16 +93,16 @@ the dimensions of the screen and the pad:
         pad_size = get_node("left").get_texture().get_size()
         pad_size = get_node("left").get_texture().get_size()
         set_process(true)
         set_process(true)
 
 
-Then, some variables used for in-game will be added:
+Then, some variables used for in-game processing will be added:
 
 
 ::
 ::
 
 
-    #speed of the ball (in pixels/second0
+    #speed of the ball (in pixels/second)
 
 
     var ball_speed = 80
     var ball_speed = 80
     #direction of the ball (normal vector)
     #direction of the ball (normal vector)
 
 
-    var direction = Vector2(-1,0)
+    var direction = Vector2(-1, 0)
     #constant for pad speed (also in pixels/second)
     #constant for pad speed (also in pixels/second)
 
 
     const PAD_SPEED = 150
     const PAD_SPEED = 150
@@ -113,8 +114,8 @@ Finally, the process function:
     func _process(delta):
     func _process(delta):
 
 
 Get some useful values for computation. The first is the ball position
 Get some useful values for computation. The first is the ball position
-(from the node), the second is the rectangles (Rect2) of the pads.
-Sprites by defaut center the textures, so a small adjustment of size/2
+(from the node), the second is the rectangle (``Rect2``) for each of the pads.
+Sprites center their textures by default, so a small adjustment of ``pad_size / 2``
 must be added.
 must be added.
 
 
 ::
 ::
@@ -123,18 +124,18 @@ must be added.
         var left_rect = Rect2( get_node("left").get_pos() - pad_size/2, pad_size )
         var left_rect = Rect2( get_node("left").get_pos() - pad_size/2, pad_size )
         var right_rect = Rect2( get_node("right").get_pos() - pad_size/2, pad_size )
         var right_rect = Rect2( get_node("right").get_pos() - pad_size/2, pad_size )
 
 
-Since the ball pos was obtained, integrating it should be simple:
+Since the ball position was obtained, integrating it should be simple:
 
 
 ::
 ::
 
 
-        ball_pos+=direction*ball_speed*delta
+        ball_pos += direction * ball_speed * delta
 
 
 Then, now that the ball has a new position, it should be tested against
 Then, now that the ball has a new position, it should be tested against
 everything. First, the floor and the roof:
 everything. First, the floor and the roof:
 
 
 ::
 ::
 
 
-        if ( (ball_pos.y<0 and direction.y <0) or (ball_pos.y>screen_size.y and direction.y>0)):
+        if ( (ball_pos.y < 0 and direction.y < 0) or (ball_pos.y > screen_size.y and direction.y > 0)):
             direction.y = -direction.y
             direction.y = -direction.y
 
 
 If one of the pads was touched, change direction and increase speed a
 If one of the pads was touched, change direction and increase speed a
@@ -143,19 +144,19 @@ little.
 ::
 ::
 
 
         if ( (left_rect.has_point(ball_pos) and direction.x < 0) or (right_rect.has_point(ball_pos) and direction.x > 0)):
         if ( (left_rect.has_point(ball_pos) and direction.x < 0) or (right_rect.has_point(ball_pos) and direction.x > 0)):
-            direction.x=-direction.x
-            ball_speed*=1.1
-            direction.y=randf()*2.0-1
+            direction.x = -direction.x
+            ball_speed *= 1.1
+            direction.y = randf() * 2.0 - 1
             direction = direction.normalized()
             direction = direction.normalized()
 
 
 If the ball went out of the screen, it's game over. Game restarts:
 If the ball went out of the screen, it's game over. Game restarts:
 
 
 ::
 ::
 
 
-        if (ball_pos.x<0 or ball_pos.x>screen_size.x):
-            ball_pos=screen_size*0.5 #ball goes to screen center
-            ball_speed=80
-            direction=Vector2(-1,0)
+        if (ball_pos.x < 0 or ball_pos.x > screen_size.x):
+            ball_pos = screen_size * 0.5  # ball goes to screen center
+            ball_speed = 80
+            direction = Vector2(-1, 0)
 
 
 Once everything was done with the ball, the node is updated with the new
 Once everything was done with the ball, the node is updated with the new
 position:
 position:
@@ -164,7 +165,7 @@ position:
 
 
         get_node("ball").set_pos(ball_pos)
         get_node("ball").set_pos(ball_pos)
 
 
-Only updating the pads according to player input. the Input class is
+Only update the pads according to player input. The Input class is
 really useful here:
 really useful here:
 
 
 ::
 ::
@@ -173,9 +174,9 @@ really useful here:
         var left_pos = get_node("left").get_pos()
         var left_pos = get_node("left").get_pos()
 
 
         if (left_pos.y > 0 and Input.is_action_pressed("left_move_up")):
         if (left_pos.y > 0 and Input.is_action_pressed("left_move_up")):
-            left_pos.y+=-PAD_SPEED*delta
+            left_pos.y += -PAD_SPEED * delta
         if (left_pos.y < screen_size.y and Input.is_action_pressed("left_move_down")):
         if (left_pos.y < screen_size.y and Input.is_action_pressed("left_move_down")):
-            left_pos.y+=PAD_SPEED*delta
+            left_pos.y += PAD_SPEED * delta
 
 
         get_node("left").set_pos(left_pos)
         get_node("left").set_pos(left_pos)
 
 
@@ -183,9 +184,9 @@ really useful here:
         var right_pos = get_node("right").get_pos()
         var right_pos = get_node("right").get_pos()
 
 
         if (right_pos.y > 0 and Input.is_action_pressed("right_move_up")):
         if (right_pos.y > 0 and Input.is_action_pressed("right_move_up")):
-            right_pos.y+=-PAD_SPEED*delta
+            right_pos.y += -PAD_SPEED * delta
         if (right_pos.y < screen_size.y and Input.is_action_pressed("right_move_down")):
         if (right_pos.y < screen_size.y and Input.is_action_pressed("right_move_down")):
-            right_pos.y+=PAD_SPEED*delta
+            right_pos.y += PAD_SPEED * delta
 
 
         get_node("right").set_pos(right_pos)
         get_node("right").set_pos(right_pos)