Files
QtGameMaker/help/files/212_00_paths.html
T

203 lines
9.6 KiB
HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head>
<title>Paths</title>
<link href="style.css" rel="stylesheet" type="text/css">
</head>
<body background="images/back.gif">
<!--START-->
<h1>Paths</h1>
In more advanced games you often want to let instances follow certain paths.
Even though you can indicate this by e.g. using timer events or code, this
is rather complicated. Path resources are an easier mechanism for this. The
idea is rather simple. You define a path by drawing it. Next you can place
an action in the creation event of the object to tell the object to
follow the particular path. This chapter will explain this in detail.
<h3>Defining paths</h3>
To create a path in your game, choose <b>Create Path</b> from the <b>Resources</b> menu.
The following form will pop up (in the example we already added a little
path).
<p>
<img src="images/form_path.jpg">
<P>
At the top left of the form you can set the name of the path, as usual.
Below it you find the points that define the path. Each point has both a
position and a speed (indicated with sp). Depending on how you use the path,
the position is either absolute, that is, the instance for which you will
later use the path will follow it at that particular place, or it is
relative, that is, the instance will always start at the first position on
the path and follow the path from there. The speed should be interpreted as
follows. A value of 100 means the original speed given for the path when
assigning it to the instance. A lower value reduces the speed, a higher
value increases it (so it indicates the percentage of the actual speed).
Speed will be interpolated between points, so the speed changes gradually.
<P>
To add a point press the button <B>Add</B>. A copy is made of the currently
selected point. Now you can change the actual position and speed by changing
the values in the edit boxes. Whenever you select a point in the list, you
can also change its values. Press <B>Insert</B> to insert a new point before
the current one, and <B>Delete</B> to delete the current point.
<P>
At the right of the form you will see the actual path. The red dot indicates
the currently selected control point. The blue dots are the other control
points. The green square indicates the position where the path starts. You
can also change the path using the mouse. Click anywhere on the image to add
a point. Click on an existing point and drag it to change its position. When
you hold &lt;Shift&gt; while clicking on a point, you insert a point.
Finally, you can use the right mouse button to remove points. (Note that you
cannot change the speed this way.) Normally the points will be aligned with
a grid. You can change the grid settings at the top tool bar. Here you can
also indicate whether the grid should be visible or not. If you want to
precisely position a point, hold the &lt;Alt&gt; key while adding or moving
it.
<P>
You can influence the shape of the path in two ways. Fist of all you can use
the type of connection. You can either choose straight line connections or a
smooth path. Secondly, you can indicate whether the path must be closed or
not.
<P>
On the toolbar there are a number of important controls. From left to right
they have the following meaning. The first button indicates that you are
ready and want to close the form, keeping the changes. (If you want to
discard the changes, press the cross to close the window and indicate that
you do not want to save the changes.) Next there is the button to undo the
last change.
<P>
The following set of toolbar buttons allows you the clear the path, reverse
the order in which the path is traversed, shift the path, mirror it
horizontally, flip it vertically, rotate it, and scale it. Next there are
buttons to shift the view (not the path itself; the actual view area is
indicated in the status bar at the bottom) and to center the view.
<P>
As already indicated above you can next set the snap values and whether to
show the grid. Finally there is a button to indicate that you want to see a
particular room as background for the path. Using this you can easily put
the path at a particular place in the room, for example on a race track,
so that later the instances will follow the correct route. (This only
makes sense when you use absolute paths; see below.)
<h3>Assigning paths to objects</h3>
To assign a path to an instance of an object, you can place the path action
in some event, for example in the creation event. In this action you must
specify the path from the drop down menu. There are some further values you
can provide.
<P>
You must indicate the path that must be followed and the speed in pixels per
step. When the speed is positive the instance starts at the beginning of the
path. If it is negative it starts at the end. Remember that when you defined
the path you specify the actual speed relative to this indicated speed.
There is also an action to change the speed with which the path is executed.
You could, for example, use this to let an instance slow down or speed up along its
path. Note that the normal speed of the instance is ignored (actually set to
0) when executing a path. Also things like gravity and friction do not
influence the motion along a path.
<P>
Next you specify the end behavior, that is, what should happen when the end
of the path is reached. You can choose to stop the motion and end the path.
You can also restart the path from the beginning, that is, the instance
jumps back to the position where the path was started and executes the path
again. A third option is to restart from the current position, that is, the
instance follows the path again but now with this new starting position
(this is the same when the path is closed). Finally you can choose to
reverse the motion, making the instance go back and forth along the path.
Note that also at the end of the path an event happens; see below.
<P>
Finally you can indicate whether the path must be absolute or relative. An
absolute path is executed at the place where it is defined. The instance is
placed at the start position and moved from there (end position when speed
is negative). This is, for example, useful when you have a race track on
which you have defined the path. When you choose relative the instances starts
executing the path from its current position. This is useful when an
instance should make a local motion. For example, space ships in a space
invader game can make a particular turn from their current position.
<P>
When you want to place the instance at a different point along its path you
can use the action to set the path position. A path position always lies
between 0 and 1, 0 indicating the start position and 1 the end position on
the path. Note that in each step the direction variable is automatically set
to the correct direction along the path. You can use this variable to
choose the correct orientation for the sprite.
<P>
When using scripts or pieces of code you have more control over the way the
path is executed. There is a function to start a path for an instance. The
variable <TT>path_position</TT> indicates the current position on the path
(between 0 and 1 as indicated above). The variable <TT>path_speed</TT>
indicates the speed along the path. A variable <TT>path_scale</TT> can be
used to scale the path. A value of 1 is the original size. A larger value
indicates that the path is made larger; a smaller value makes it smaller.
The variable <TT>path_orientation</TT> indicates the orientation in which
the path is executed (in degrees counter-clockwise). This enables you to
execute the path in a different orientation (e.g. moving up and down rather
than left and right). There is also a variable to control the end behavior.
Finally there are lots of functions to ask for properties of paths (e.g. the
x and y coordinate at a certain positions) and there are functions to create
paths. There are even functions that create collision free paths for an
instance to reach a certain goal. See the later sections on GML for details
on this.
<P>
You might wonder what happens when the instance collides with another
instance while it follows a path. Basically the same happens as when the
instance moves with a speed. When there is a solid instance, the instance is
placed back at its previous location. When both instances are not solid they are
placed at their new positions Next the collision event(s) are executed and
it is checked whether the collision has been resolved. If not and the other
instance is solid the instance will stop, as it should (assuming there is a
collision event defined). Also, the <TT>path_position</TT> variable is not
increased. When the blocking instance disappears the instance will continue
to follow its path. To handle collisions yourself the variable <TT>
path_positionprevious</TT> can be useful. It holds the previous position for
the path and you can set the path position to this variable to avoid
advancing along the path.
<h3>The path event</h3>
As described above, you can indicate what must happen when the instance
reaches the end of the path. At this moment also an <b>End of Path</b> event
occurs. You can find it under the <b>Other</b> events. Here you can place
actions. For example, you might want to destroy the instance, or let it
start a new (different) path.
<!--END-->
</body>
</html>
<!-- KEYWORDS
adding paths
creating paths
paths
path on room image
setting paths
path index
path orientation
path scale
path position
path end behavior
end of path event
smooth paths
-->