A driving engine is used in a variety of racing games, and can be very easy to replicate. There are two main ways that top-down driving works- in a non-scrollable world and a scrollable world. For the non-scrollable driving engine, only 1 script is needed.
Non-scrollable Engine
when gf clicked
go to x: (0) y: (0) // reset position
point in direction (90) // reset direction
set [turn v] to (0) // reset on flag click
set [velocity v] to (0) // reset on flag click
forever
if <(0) < (velocity)> then // if sprite moving forward
if <key (left arrow v) pressed?> then
change [turn v] by (-0.75) // affect direction negatively
change [velocity v] by (-0.15) // slow down forward movement on turn
end
if <key (right arrow v) pressed?> then
change [turn v] by (.75) // affect direction positively
change [velocity v] by (-0.15) // slow down forward movement on turn
end
else // if movement speed negative
if <key (left arrow v) pressed?> then
change [turn v] by (.75) // turn opposite direction, as with real cars
change [velocity v] by (.15) // slow down backward movement on turn
end
if <key (right arrow v) pressed?> then
change [turn v] by (-0.75) // turn opposite direction, as with real cars
change [velocity v] by (.15) // slow down backward movement on turn
end
end
if <key (up arrow v) pressed?> then
change [velocity v] by (.5) // move forward
end
if <key (down arrow v) pressed?> then
change [velocity v] by (-0.5) // move backward
end
set [turn v] to ((turn) * (.9)) // gradually slow down, as in real physics
turn right (turn) degrees // set turn to control the sprite's direction
set [velocity v] to ((velocity) * (.9)) // gradually slow down, as in real physics
move (velocity) steps // set velocity to control the sprite's position
end
This script is used for just using a large map that is the entire Stage, and the sprite is moving around in that map. So when the player moves, the Stage doesn't move to show more of the map, since the entire Stage is the map.
Scrollable Engine
The main difference between the scrollable driving engine and the non-scrollable driving engine is that a non-scrollable driving engine is good for one computer, two player games, while a scrollable engine is primarily used in one player or online, cloud-based games.The scrollable driving engine requires two sprites- car and road- and as such, two separate scripts. The first one is very similar to the non-scrollable script.
when gf clicked
go to x: (0) y: (0) // reset position
point in direction (90) // reset direction
set [turn v] to (0) // reset on flag click
set [velocity v] to (0) // reset on flag click
forever
if <(0) < (velocity)> then // if sprite moving forward
if <key (left arrow v) pressed?> then
change [turn v] by (.75) // affect direction positively
change [velocity v] by (-0.15) // slow down forward movement on turn
end
if <key (right arrow v) pressed?> then
change [turn v] by (-0.75) // affect direction negatively
change [velocity v] by (-0.15) // slow down forward movement on turn
end
else // if movement speed negative
if <key (left arrow v) pressed?> then
change [turn v] by (-0.75) // turn opposite direction, as with real cars
change [velocity v] by (.15) // slow down backward movement on turn
end
if <key (right arrow v) pressed?> then
change [turn v] by (.75) // turn opposite direction, as with real cars
change [velocity v] by (.15) // slow down backward movement on turn
end
end
if <key (up arrow v) pressed?> then
change [velocity v] by (.5) // move forward
end
if <key (down arrow v) pressed?> then
change [velocity v] by (-0.5) // move backward
end
set [turn v] to ((turn) * (.9)) // gradually slow down, as in real physics
set [velocity v] to ((velocity) * (.9)) // gradually slow down, as in real physics
move (velocity) steps // set velocity to control the sprite's position
end
This script is used for when the map is able to move or scoll when the player moves. Thus making the game a "scrolling game". So making a large map that moves when the player does.
Here is the script that controls the movement of the 'road' the car is driving on.
| Remember that it must be a sprite, not a backdrop. |
when gf clicked
set rotation style [don't rotate v]
go to x: (0) y: (0) // reset position
forever
move ((0) - (velocity)) steps// move opposite direction of velocity
point in direction ([direction v] of (car v)) // point in direction of car
end
An example of a "scrolling game" can be found here: projects:1023469311