Flash game creation tutorial - part 5
Filed Under Flash •
March 14th update: part 5.3 released.
March 3rd update: part 5.2 released.
February 9th update: part 5.1 released.
Here I am with the 5th step of the flash game creation tutorial.
Read steps 1,2,3 and 4 and you're ready.
I know some readers are in trouble with this tutorial because they can't make their games work.
Unfortunately, I cannot reply to all private messages asking "how can I draw the ball?" or similar questions.
If you are completely new to Flash, then you should learn the basics, not only to follow this tutorial, but as a good way to start mastering any software.
Well, now let's start the tutorial.
Many of you asked for a level management, and that's what I am going to give you.
First, play 4 or 5 minutes with this little "game".
It's made of 4 levels, and each level is a frame.
Level 1: You have to collect 10 bubbles or coins or whatsoever to complete it
Level 2: You have to reach the exit
Level 3 and Level 4 aren't properly levels but "rooms" with communicating doors. This is a new feature that isn't included in Ball Revamped, but it can be useful if you want to create a game with "rooms" like old arcades during Commodore 64 age.
Every frame must have a stop(); in its actions window
Let's see the actionscript in the frame 1 hero:
Frame 1
-
onClipEvent (load) {
-
yspeed = 0;
-
xspeed = 0;
-
wind = 0.00;
-
power = 0.65;
-
gravity = 0.1;
-
upconstant = 0.75;
-
friction = 0.99;
-
collected_coins = 0;
-
}
-
onClipEvent (enterFrame) {
-
if (Key.isDown(Key.LEFT)) {
-
xspeed = xspeed-power;
-
}
-
if (Key.isDown(Key.RIGHT)) {
-
xspeed = xspeed+power;
-
}
-
if (Key.isDown(Key.UP)) {
-
yspeed = yspeed-power*upconstant;
-
}
-
if (Key.isDown(Key.DOWN)) {
-
yspeed = yspeed+power*upconstant;
-
}
-
xspeed = (xspeed+wind)*friction;
-
yspeed = yspeed+gravity;
-
_y = _y+yspeed;
-
_x = _x+xspeed;
-
_rotation = _rotation+xspeed*2;
-
if (_root.coin.hitTest(this.hero_hit)) {
-
_root.coin._x = Math.random()*400+50;
-
collected_coins++;
-
_root.level1_text.text = 10-collected_coins+" more to go";
-
if (collected_coins == 10) {
-
_root.gotoAndPlay(2);
-
}
-
}
-
if (_root.wall.hitTest(_x, _y, true)) {
-
xspeed = 0;
-
yspeed = 0;
-
_x = 120;
-
_y = 120;
-
}
-
}
Nothing new but some minor changes at lines 29-36, where I check the collision between the hero and the coin, increase a variable (initialized at line 9) and go to the next frame if I collected the right amount of coins.
Please note: most of you sent me their works with a
gotoAndPlay(2);
but remember this actionscript is in the hero, not in the frame, so you must write
_root.gotoAndPlay(2);
to have it working.
If first frame is simple, the second is even simpler
Frame 2
-
onClipEvent (load) {
-
yspeed = 0;
-
xspeed = 0;
-
wind = 0.00;
-
power = 0.65;
-
gravity = 0.1;
-
upconstant = 0.75;
-
friction = 0.99;
-
}
-
onClipEvent (enterFrame) {
-
if (Key.isDown(Key.LEFT)) {
-
xspeed = xspeed-power;
-
}
-
if (Key.isDown(Key.RIGHT)) {
-
xspeed = xspeed+power;
-
}
-
if (Key.isDown(Key.UP)) {
-
yspeed = yspeed-power*upconstant;
-
}
-
if (Key.isDown(Key.DOWN)) {
-
yspeed = yspeed+power*upconstant;
-
}
-
xspeed = (xspeed+wind)*friction;
-
yspeed = yspeed+gravity;
-
_y = _y+yspeed;
-
_x = _x+xspeed;
-
_rotation = _rotation+xspeed*2;
-
if (_root.exit.hitTest(_x, _y, true)) {
-
_root.gotoAndPlay(3);
-
}
-
if (_root.wall.hitTest(_x, _y, true)) {
-
xspeed = 0;
-
yspeed = 0;
-
_x = 120;
-
_y = 120;
-
}
-
}
Create a movieclip instanced as "exit" (the exit square) and check the collision. If the collision is true then go to frame 3.
That's all.
Creating "rooms" instead of "levels" is a bit more complicated because until now the player "popped" in the stage, appearing from nowhere. If we have rooms, we want the player to pass through these rooms without popping from nowhere.
That's the "difficult" part.
Frame 3
Let's think about frame/level 3: how many ways does the player enter in frame 3? He can pop from frame 2 or enter from frame 4 through the door.
Some actionscript
-
onClipEvent (load) {
-
if (_root.throughdoor == 1) {
-
yspeed = _root.save_y_speed;
-
xspeed = _root.save_x_speed;
-
_y = _root.save_y_position;
-
_x = 470;
-
}
-
else{
-
yspeed = 0;
-
xspeed = 0;
-
}
-
wind = 0.00;
-
power = 0.65;
-
gravity = 0.1;
-
upconstant = 0.75;
-
friction = 0.99;
-
}
-
onClipEvent (enterFrame) {
-
if (Key.isDown(Key.LEFT)) {
-
xspeed = xspeed-power;
-
}
-
if (Key.isDown(Key.RIGHT)) {
-
xspeed = xspeed+power;
-
}
-
if (Key.isDown(Key.UP)) {
-
yspeed = yspeed-power*upconstant;
-
}
-
if (Key.isDown(Key.DOWN)) {
-
yspeed = yspeed+power*upconstant;
-
}
-
xspeed = (xspeed+wind)*friction;
-
yspeed = yspeed+gravity;
-
_y = _y+yspeed;
-
_x = _x+xspeed;
-
_rotation = _rotation+xspeed*2;
-
if (_root.door.hitTest(_x, _y, true)) {
-
_root.save_x_speed = xspeed;
-
_root.save_y_speed = yspeed;
-
_root.save_y_position = _y;
-
_root.gotoAndPlay(4);
-
}
-
if (_root.wall.hitTest(_x, _y, true)) {
-
xspeed = 0;
-
yspeed = 0;
-
_x = 120;
-
_y = 120;
-
}
-
}
Lines 2-7: Check if a root variable called throughdoor is set to 1. I decided to set this variable at 1 (almost) every time the player passes through a door. So if the player passed (the value is 1), I execute some strange code I will explain later.
Lines 8-11: If the throughdoor is different than 1, it means the player did not pass through a door, so I want to have xspeed and yspeed values set to zero, just line in all other examples seen before.
Lines 36-41: Check the collision between the player and a movieclip instanced as door (the "door" itself).
If the collision is true, I need to save xspeed, yspeed and y position of the hero. Why? Because I want to give the player a felling of "continuity" when passing through a door. If the player passes a door close to its upper margin and at a low speed, I want him to find himself in the next room close to the upper margin of the door at a low speed.
That why I save all these values.
Then I go to frame 4
Frame 4
Player can only enter in frame 4 from the door on frame 3.
-
onClipEvent (load) {
-
yspeed = _root.save_y_speed;
-
xspeed = _root.save_x_speed;
-
_y = _root.save_y_position;
-
_x = 30;
-
wind = 0.00;
-
power = 0.65;
-
gravity = 0.1;
-
upconstant = 0.75;
-
friction = 0.99;
-
}
-
onClipEvent (enterFrame) {
-
if (Key.isDown(Key.LEFT)) {
-
xspeed = xspeed-power;
-
}
-
if (Key.isDown(Key.RIGHT)) {
-
xspeed = xspeed+power;
-
}
-
if (Key.isDown(Key.UP)) {
-
yspeed = yspeed-power*upconstant;
-
}
-
if (Key.isDown(Key.DOWN)) {
-
yspeed = yspeed+power*upconstant;
-
}
-
xspeed = (xspeed+wind)*friction;
-
yspeed = yspeed+gravity;
-
_y = _y+yspeed;
-
_x = _x+xspeed;
-
_rotation = _rotation+xspeed*2;
-
if (_root.door.hitTest(_x, _y, true)) {
-
_root.save_x_speed = xspeed;
-
_root.save_y_speed = yspeed;
-
_root.save_y_position = _y;
-
_root.throughdoor = 1;
-
_root.gotoAndPlay(3);
-
}
-
if (_root.wall.hitTest(_x, _y, true)) {
-
xspeed = 0;
-
yspeed = 0;
-
_x = 120;
-
_y = 120;
-
}
-
}
Lines 2-4: I retrieve previously saved (from frame 3) values for xspeed, yspeed and y position
Line 5: I set x position to 30. It's a value that gives the feeling of being just entered through the door
Lines 30-36: Checks collision between the player and the door in the same way as for frame 3, but I set the _root.throughdoor to 1 because I am "warning" frame 3 I did not came from the exit on frame 2 but through a door from frame 4.
That's why in frame 3 I have the lines
-
if (_root.throughdoor == 1) {
-
yspeed = _root.save_y_speed;
-
xspeed = _root.save_x_speed;
-
_y = _root.save_y_position;
-
_x = 470;
-
}
-
else{
-
yspeed = 0;
-
xspeed = 0;
-
}
I retrieve the speed and y position values like I did on frame 4 (but I set the x position to 470, giving the feeling of being just entered through the door) only if the _root.throughdoor variable is set to 1 (in this example, only if I come from frame 4).
And that's all for now with level changing.
Some code improvements are on the horizon, but I'll cover them in next tutorials.
Now you have not excuses not to send me a game made by you following these tutorials.
If you send me the game with the source code, I'll publish to this site with a credit to you.
Meanwhile, download the source code and enjoy.
Waiting for your games and feedback now...
Related Item: casino game
Tell me what do you think about this post. I'll write better and better entries.
They can be easily customized to meet the unique requirements of your project.
48 Responses to “Flash game creation tutorial - part 5”
Leave a Reply
Trackbacks
-
Flash game creation tutorial - part 1 at Emanuele Feronato on
December 31st, 2006 11:26 pm
[...] December 23rd update: 5th part released. December 23rd update: 4th part released. December 6th update: 3rd part released. November 18th update: 2nd part released. [...]
-
Flash game creation tutorial - part 2 at Emanuele Feronato on
December 31st, 2006 11:27 pm
[...] December 31st update: 5th part released. December 23rd update: 4th part released. December 6th update: 3rd part released. [...]
-
Flash game creation tutorial - part 4 at Emanuele Feronato on
December 31st, 2006 11:27 pm
[...] WordPress « Collectabubble Flash game creation tutorial - part 5 » [...]
-
Flash game creation tutorial - part 6a at Emanuele Feronato on
January 24th, 2007 12:37 pm
[...] First, if you haven’t done it yet, read all steps from 1st to 5th, then here we go. [...]
-
Flash game creation tutorial - part 3 at Emanuele Feronato on
February 9th, 2007 7:02 pm
[...] February 9th update: part 5.1 released. December 31st update: 5th part released. December 23rd update: 4th part released. [...]
-
Flash game creation tutorial - part 5.1 at Emanuele Feronato on
March 14th, 2007 12:56 pm
[...] Well, since lots of readers commented and mailed me part 6a is too hard and I should split it in pieces, that’s what I am going to do. This is the part 5.1, to be read after part 5. [...]
-
A Gem of Flash Game Tutorials | Newbie Game Programmers on
December 17th, 2007 4:22 pm
[...] game creation tutorial - Part 1 :: Part 2 :: Part 3 :: Part 4 :: Part 5 :: Part 5.1 :: Part 5.2 :: Part [...]

(8 votes, average: 4.63 out of 5)
Fantastic!!
It’s great!!
I’m making the game… I’ll tell you when I’m finished
How can I add sound to my game ?
I tried with this in the actions layer and in the hero’s layer but it doesn’t work
new Sound (C:\…);
I also tried this
new Sound,(C:\…);
And this
new (Sound,(C:\…));
But anything works
Hi, first of all I just wanted to say that I think these tutorials are great, some really usefull info going on here and please keep up the good work.
Second, I can make a game like the one above with two rooms conecting together but i’m having difficulty when I try more than one door in a single frame, any help would be appreciated.
Hi nice tute!:) Ive looked for ages for one like yours! Keep it up!:)
Thank you so much for these tutorials.
I’ve tried quite a few tutorials for Flash, but not until I found yours could I tackle dynamic motion with ActionScript.
Can’t wait for the next part, thanks a million.
Absolutely a superb collection of tutorials!
Very well put together.
Thank you.
Hey,
Maybe an idea for the next tutorial: High Score list
I know how to build one, but I think not many know…
My old game, now a bit harder and with high score list:
http://82.171.133.44/spel/
Thanks alot for ur tuts!
For sound do this:
1. Import a sound file to your library.
2. Make a new layer, named Music
3. Drag the sound file in the library to the scene and your done :-)
Thank you very much!
Is this the last tutorial or are there going to be more?
It’s not the last tutorial, since the game is not completed.
I am going to cover smart enemies, shooting, levels with multipe exit/doors, level editors and some other tricks. And I am preparing a step by step tutorial to make another classic… what if I say “Line rider”… ??
when will the next tutorial be out?
Really nice tutorial,
I couldn’t find any other as good as this one.
I did not read it all at this moment, but I can see it’s great.
Emanuele, how many more “parts” do you expect this to have?
Is it near the end or do you have lot’s of other cool things in Flash to show us?
Thanks a lot, I’m waitin for the next one.
—I’m brazilian, please forgive my writting(or writing?) errors…
you can make sound play(but unfortunatly not stop) by:
1 placing sound into a empty key frame
2 give sound a instance name of “sSound”
3 add this action script to the sound,
sKeySound = new Sound();
sKeySound.attachSound(”sSound”);
watchKeyBoard = new Object();
watchKeyBoard.onKeyDown = function() {
trace(Key.getAscii());
if (Key.getAscii() == 32) {
box_mc._xscale = box_mc._yscale -= 5;
}
if (Key.getAscii() == 115) {
sKeySound.start();
}
};
watchKeyBoard.onKeyUp = function() {
arrowMC.removeMovieClip();
};
Key.addListener(watchKeyBoard);
The tutorial is very good. I made this game:
http://img168.imageshack.us/my.php?image=supermagiantc2.swf
Here’s the source code for you Emanuele
http://www.box.net/public/gzxkl8jje8
thanx for the tutorials. Heres what i made from learning from your tut.
http://www.deviantart.com/deviation/46645092/
gj the tut was very informational.
Is there any way to increase the reliability of the hit test? because sometimes my character goes flying of the edge of the screen when the test runs repeatedly, any help would be appreciated.
Great tuturial.
How would you make solid walls that simply stop your characters movement though? (Rather than respawning him).
I think you would just not include the
_x = 120;
_y = 120;
which I believe makes the x and y coords 120
correct me if I’m wrong :)
Great tutorials Emanuele!
Hope you have the time and energy to show us more possibillities in this game. I think we are quite a few who are dropping by this site every day to see if there is new stuff.
Hey, what do you do if you want to cap off the speeds? I’ve considered throwing a conditional statement around the incrementers and multipliers. Something like
if (Math.abs(xspeed)
to blah
I think to stop your character, rather than respawning him you would say
if (_root.wall.hitTest(_x, _y, true)) {
_x -= xspeed;
_y -= yspeed;
xspeed = 0;
yspeed = 0;
}
Thanks for the superb tutorials! I’ve used it for an educational game at http://www.higherbebington.wirral.sch.uk/spacequest.html to help the kids with their maths! I’ve learnt so much from this!
Thanks again!
PS Let me know what you think!
SO how would i put this code to make different levels and the exits and doors into the flash where the walls move instead of the hero?
hi, just here to say i need help on making the doors work thats hard for me since im a beginner could u tell me as easily as possible, thanks.
Thank you so much! I’ve done almost all of this series of tutorials (taken me a few days, I’m pretty noobish) but I’ve learnt so much. I’ll give you the link for my game when I’m finished. They really are like the best tutorials on the web. They beat all the ones on NewGrounds & Tutorialised
Hey! I really love your tutorials, I used them alot in the game I’m making. But I don’t understand how to implement advancing levels in my game ’cause my game is different than yours so all the things are different. Can you please teach me how to add something so that when I get XX amount of coins or touch something I proceed to the next level?
GREAT TUTS Im very excited now that i can do this, but i was wondering if you can tell me what are the names of the books that you learnt from?
First things first; amazing tutorials, i can’t believe i can do this much with flash though i’ve only owned it for a few days, thanks :-)
But i have a problem, maybe i misunderstood, but you mentioned putting different actionscript into different frames, on the hero. I can’t find how to do this…. Do i put the actionscript into the frame now instead of the hero?, please help.
(I’m having trouble downloading the source codes, otherwise i wouldn’t have asked).
How can I, instead of lose when I touch a wall, make the “wall” a ground?
Please awnser.
And a magnificent tutorial, by the way.
Great tutorial!
This is very cool stuff, you could also make it so theres a wall on room 4 that you need a certan speed to get thru, having to go back into room 3 to build up speed o.O
Thanks for the tutorial really help me on making games thanks a lot
Hi
I need little help *suprise suprise*
How can i make simple Exit (When my “hero” hits it, scene2 starts)My game is little simpler than this coin thing, just move hero to the exit throught every level(something like that) Im newbie in flash games so i dont really know what scritp to type and where :) If you know what i mean and want to help, then please email me slenkovaari@hotmail.com
Thanks for the tutorial
if (_root.exit.hitTest(_x, _y, true)) {
_root.gotoAndPlay(3);
I think thats what i need, but i want it to change to scene2 not frame 2. Does this make sense? What do i need to write to make it change to scene2 on hit?
got it working
DEAR TONY, youmust import the audio into the movie, not by AS, but by using FILE>Import… and select the wanted audio. PEACE.:LOL
when i type “if (_root.coin.hitTest(this.hero_hit)) {” my hero doesn’t collect it but when i type”if (_root.coin.hitTest(this)) {” my hero colects it why does that happen.
thanx. now i don’t need to think about what i write! i can just copy and paste! my favorite action!
Very nice! But I warn the newbies not to do bigger games in frames. They should be done in one frame. Just right click on the game above and press “forward”. Then you’ll see why :P