Flash Tutorial Links:
Play Games: HTML5 Tutorials:

How To Make A Tower Defense Game (Part 1)

So many monsters, so little ... towers

History of Tower Defense

This is a genre made popular by Warcraft III editor. The tower defense game was included as one of the bonus stages in Warcraft III, and so many defense mods have been created since then. It basically involves creating towers and placing them strategically to prevent waves and waves of monsters from advancing to a particular end point.

Towers have a variety of specialties to help you cope with the advancing monsters like being able to deal Area of Effect (AOE) damage, slow the monsters, or just plain nuke them to their deaths. In many Tower Defense games, the towers are also capable of being upgraded, giving them an extra boost in their power. Strategic placement, opportunistic upgrading of towers are hallmarks of a good tower defense player.

Game Scenario

Here, we focus on three different towers, the Fire Tower for plain old single target damage, the Ice Tower for a single target slow, as well as the Lightning Tower for AOE splash damage. With this arsenal at your disposal, you'll prevent 20 waves of advancing monsters.

Game Details

  1. Player can place Fire, Ice and Lightning Towers on various spots of the map.
  2. The player has to defend against 20 waves of monsters.
  3. Each monster's death or escape gives the player 15 gold.
  4. The player wins if all waves are killed.
  5. The player loses when 10 monsters break through his defenses.

Download the Game Files

The files you need to create this game can be downloaded from here.

Step 1 - Managing your FLA file

If you're not too familiar with how the framework is for this new tutorial, I strongly recommend that you head over to the Game Framework (Part 2) for these advanced tutorials first. It should give you a good idea of how I'm organising the FLA files now.

The timeline now contains the Menu, Game, GameWin and GameLose sections. Our focus will still be on the Game section since this is where all the ACTION takes place!

new timeline

As usual, let's jump into the startGame function and take a look at the initial values that we'll handle right at the start.

Step 2 - Setting initial values in your GameController.as

The startGame function is where you initialize all the variables and game states that your game should be defaulted to. Do refrain from putting these initialisations into your GameController() which is your constructor. This is a common mistake that I see. Remember that the constructor is called immediately when this swf runs, so you really don't have to initialise anything when the player is staring at the menu page.

74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
public function startGame()
{
    currGold = C.START_GOLD;
    currWave = 0;
    maxWave = C.MAX_WAVE;
    
    placings = new Array();
    monsters = new Array();
    towers = new Array();
    bullets = new Array();
    
    timer = 0;
    life = C.PLAYER_START_LIFE;
    
    setupGame();
    
    //Initialise the UI event listeners
    mcGameUI.btnBuildFireTower.addEventListener(
            MouseEvent.CLICK, clickTowerFire);
    mcGameUI.btnBuildFireTower.addEventListener(
            MouseEvent.ROLL_OVER, showTowerFireHelp);
    mcGameUI.btnBuildFireTower.addEventListener(
            MouseEvent.ROLL_OUT, clearHelp);
    
    mcGameUI.btnBuildIceTower.addEventListener(
            MouseEvent.CLICK, clickTowerIce);
    mcGameUI.btnBuildIceTower.addEventListener(
            MouseEvent.ROLL_OVER, showTowerIceHelp);
    mcGameUI.btnBuildIceTower.addEventListener(
            MouseEvent.ROLL_OUT, clearHelp);
    
    mcGameUI.btnBuildLightningTower.addEventListener(
            MouseEvent.CLICK, clickTowerLightning);
    mcGameUI.btnBuildLightningTower.addEventListener(
            MouseEvent.ROLL_OVER, showTowerLightningHelp);
    mcGameUI.btnBuildLightningTower.addEventListener(
            MouseEvent.ROLL_OUT, clearHelp);
    
    mcGameUI.mouseEnabled = false;
    
    mcGameStage.addEventListener(Event.ENTER_FRAME,update);
    
    //Handle event when this game is being preloaded
    addEventListener(Event.ADDED_TO_STAGE, gameAddedToStage ); 
    
    //Handle situations when this game is being run directly
    if (stage != null)
    {
        stage.addEventListener(KeyboardEvent.KEY_DOWN,keyDownHandler);
    }
}

Now, our game is starting to look more complex. =) Ok, let's tackle them bit by bit. Take a look at lines 80 to 83. placings is an array that will store all the possible locations that you can place your towers in. Specifically, if you open up the Library, there is a movieclip type called Placing. This is the one. monsters is the array that will store the monsters that come in waves to harass you. towers is the array that will store the towers that you place onto the map, and bullets will store all the bullets that are flying all over the place in the game.

Collectively, these 4 arrays will help us manage the game. In line 88, you can see the setupGame function which you have seen previously in the basic tutorials. If not, let's examine it again later.

Lines 91 to 96 add 3 event listeners to the towers that you see on the UI.

I've named them as such. But you would have noticed that I added a mcGameUI.btnBuildFireTower... etc. What is this mcGameUI? I've added this additional UI layer, just like I had this Game layer so that I can easily manage the UI. It will prove useful later on in more complex tutorials where I have to add or remove things dynamically from the UI. To see what this is exactly, it is just a blank movieclip (again, recall how I use a blank movieclip as the mcGameStage ... same concept here) that encompasses all the UI you put in during design time. It is accessed through the UI layer.

So to access the elements in the UI, we cannot just refer to it simply with btnBuildFireTower. Since it is a child of the overall UI movieclip, mcGameUI, now, we have to add the parent in front, hence, mcGameUI.btnBuildFireTower. Hope you recall your object oriented programming!

Anyway, back to lines 91 to 96. So what are these lines of code doing? They add a MouseEvent.CLICK listener which will trigger the clickTowerFire function when the player clicks on the button. We'll examine this later on. It adds a MouseEvent.ROLL_OVER so that the help text for the towers are displayed when you mouse moves over the icon, and the third event listener listens for ROLL_OUT events so that it can clear the text of the help.

Similarly, lines 98 to 103 does the same for the button btnBuildIceTower, and lines 105 to 110 does the same for the lightning tower.

Lines 112 is worth mentioning, since this is a very very common pitfall for game developers playing around with multiple layers of movieclips. I mentioned earlier that all these three buttons in your UI now belong to the parent mcGameUI. Since they are the children of this parent, when you click on them, what really happens is that the mcGameUI responds to those mouse events, and sometimes your child UI elements do not get them at all. So you can be sitting there feeling puzzled why some of the mouse events that you assigned to the various buttons in your mcGameUI just don't respond to you at all. Now you know! By assigning mcGameUI.mouseEnabled = false, you're telling Flash to not allow mcGameUI to respond to the mouse events at all.

139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
private function setupGame()
{
    //Loop through all items on stage
    for (var i=0; i< mcGameStage.numChildren; i++)
    {
        var currObject = mcGameStage.getChildAt(i);
    
        //Look through the objects to see if it is class Placing
        if (currObject is Placing)
        {
            placings.push(currObject);
            currObject.gotoAndStop("off");
            
            currObject.addEventListener(MouseEvent.ROLL_OVER, 
            	turnOnPlacing);
            currObject.addEventListener(MouseEvent.ROLL_OUT, 
           		turnOffPlacing);					
        }
    }
}

In the setupGame function, we want to look through the mcGameStage and find out the Placing objects to be pushed into the array called placings. This is really the same style as how we looped through the game stage and searched for the Platform objects in the basic tutorial 8. Reason for this is that you, as the game designer, can freely design areas or strategic spots on the game map where the player is able to place a tower. If so, just drag a placing object out into mcGameStage.

The background map was drawn independently, so you may want to do some planning before you get your designer to draw this out. (Another way to do this would be to do the map in a tile-based fashion, but that is another tutorial. ^_^ ). You can see that about 36 placings have been dragged out. These 36 spots will be the valid spots that the player can build his towers upon. If you double-click and examine each Placing object further, you will see that I have already created 3 sections, properly labelled.

Eventually, we'll be making use of these sections to control whether the player can place his new towers upon it. Now, let's look at the code again.

139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
private function setupGame()
{
    //Loop through all items on stage
    for (var i=0; i< mcGameStage.numChildren; i++)
    {
        var currObject = mcGameStage.getChildAt(i);
    
        //Look through the objects to see if it is class Placing
        if (currObject is Placing)
        {
            placings.push(currObject);
            currObject.gotoAndStop("off");
            
            currObject.addEventListener(MouseEvent.ROLL_OVER, 
            	turnOnPlacing);
            currObject.addEventListener(MouseEvent.ROLL_OUT, 
           		turnOffPlacing);					
        }
    }
}

Line 149 shows you that we push each placing object into the array called placings. Line 150 immediately sets each of the placings to their default label, which should be "off". Two event listeners are added to the placings, and the placings will respond to a mouse roll over, as well as a mouse roll out.

160
161
162
163
164
165
166
167
168
169
170
171
172
private function turnOnPlacing(evt:MouseEvent)
{
    var currPlacing = evt.currentTarget as Placing;
    if (currPlacing.currentLabel == "possible")
        currPlacing.gotoAndStop("on");
}
 
private function turnOffPlacing(evt:MouseEvent)
{
    var currPlacing = evt.currentTarget as Placing;
    if (currPlacing.currentLabel == "on")
        currPlacing.gotoAndStop("possible");
}

The above codes show what these two listeners do. Since all the placings share the same function (turnOnPlacing) that will be triggered when a mouse roll over event happens, this function must be able to tell them apart. Line 162 shows you how you can do that. evt.currentTarget will return you the placing which triggered this event, and "as Placing" simply casts it back into a Placing object.

The whole purpose of turnOnPlacing is to show the player that his mouse is currently hovering over a valid spot to place the tower. Of course, this means that the player must have clicked on a tower beforehand. As you'll see later, when a player clicks on a tower, all the placings which can hold a tower will go to their frame labelled "possible", turning the placing into a green colour. Lines 163 and 164 basically checks to see that if the mouse is hovering over such a possible placing, and jumps to the frame labelled "on", which will turn the placing white in colour.

As you can see, when the mouse hovers over a Placing that is at "possible" state, it will go to the "on" state, which is white. The function turnOffPlacing does the opposite and turns the "on" state back to a "possible" state when the mouse rolls away.

Strict Actionscript coders may not like this way of sneaking in "logic" into the frame labels. You can see that I'm responding differently with code depending on what a movieclip's frame label is. I agree, but for the purpose of the tutorial, and I don't see much issues ... yet ..., I'd continue using this style. Ideally, we should create a class attribute possibly to store such logic.

Step 3 - UI Functions

There are three pretty similar functions, clickTowerFire, clickTowerIce, and clickTowerLightning triggerred by clicking on the respective UI buttons. Let's examine what happens when you click on the fire tower.

174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
private function clickTowerFire(evt:MouseEvent)
{
    //Check if the player has already clicked on a tower
    if (currTower != null)
    {
        mcGameUI.removeChild(currTower);
        currTower = null;
    }
    
    if (currGold >= C.TOWER_FIRE_COST)
    {
        currGold -= C.TOWER_FIRE_COST;
        
        //Create a Fire Tower now, referenced by the variable currTower
        currTower = new Tower_Fire();
        mcGameUI.addChild(currTower);
        
        //Turn on all placings
        for (var i in placings)
        {
            if (placings[i].canPlace)
                placings[i].gotoAndStop("possible");
        }
    }
}

What you see in line 177 is this variable currTower. This is central to the logic of what happens when you click on the buttons. In that line, it checks if this variable is not null (meaning it currently contains something already, which would mean that you have previously clicked another tower), and if so, it removes it from the mcGameUI and sets it to null. The reason for this code handles the situation whereby you click on say the button to build the Fire Tower, and so, currTower stores a reference to it. Say the player changes his mind, and then clicks on the button to build the Ice Tower, those lines 177 to 181 will thus remove the visual cue of the fireTower, and replaces it with the Ice Tower. currTower refers to this thing that you see when you click on a tower button.

As the player is hovering his mouse over the map to find a suitable location, this hovering tower helps to act as a visual cue as to what he is currently selecting for placement. This movieclip is added to the mcGameUI layer simply because we want it to float above all other game assets in the game at that point of time. Take note that when you place the tower, this movieclip of the tower will be added to the mcGameStage instead. The beauty of Flash layers!

Line 183 checks if you currently have enough gold to build this tower. Again, I choose to put these variables which we need to play with quickly during game balancing in a constants file, C.as. This allows you to go to a single file to make quick changes rather than scour through your entire code to find fragments of it.

Line 185 removes that amount of gold from you.

Line 188 creates a Tower_Fire and it is added to the mcGameUI as mentioned earlier. The reason why it follows your mouse cursor and moves along with it will be explained later in the game loop.

Lines 191 to 196 now loops through placings which has a reference to each Placing object, and checks if they currently allows placement of towers. This is locked through the use of a boolean attribute called canPlace which will be set to false once a tower is placed upon a Placing object. If this attribute is true (by default), it will "light up" to the green colour, which is actually the frame inside the Placing object labelled "possible". We'll see this again later when we take a look at the Tower class codes.

The functions clickTowerLightning and clickTowerLightning do basically the same thing as clickTowerFire, save for the fact that they create their own respective towers, so I'll leave it to you to read through them.

If you look at the following codes in lines 252 to 265, the functions showTowerFireHelp, etc, basically sets the help text when you mouse over the respective tower building icons.

Download the Game Files

The files you need to create this game can be downloaded from here.

To be continued ... in How To Make A Tower Defense Game (Part 2).

Flash Resources
Preloader FPS Display Sounds & Music
Keycodes Name Generator
Game Development Resources
Sprite Sheets


Posted by Dendriel

on 2014-11-05 17:49:43

Can anyone tell me how to "GameUI" instance becomes "mcGameUI"? this "mc" in the name is a pattern?

Thanks in advance!


Posted by Reski

on 2014-11-03 09:05:13

how do I get back to the interface design .. thank you


Posted by Travis

on 2014-10-04 12:29:28

I got the error #1009 aswell after converting the old as3 code to CC format. but found a fix.

the txt updates are the last things in the update function.
Cut the txt string updates under //Handle display, lines 381 to 387 and paste them at 367-368. this will make the checks for gameOver or gameWin the last things to be called, and make it work.

this is an inexperienced guess but,
from what I understand the error is caused
because the txt updates are after the checks,
when even after hitting the calls in gameover/win for removing the update function and changing the frame, it will still run that last update function all the way threw its code, hitting the txt updates as the last thing, after the main fla is set to frame gameOver/Win which the txts are not in those frames and will reference as Null.


Posted by LOL

on 2014-08-29 15:01:06

How to create upgradables?


Posted by Mets

on 2014-08-13 16:43:36

the mouse pointer is change bcoz i change the screen resolution


Posted by nebar

on 2014-08-12 18:56:17

games


Posted by Joshua

on 2014-08-10 12:44:54

Please help me. Every time i try to edit it i debug it and it doesnt show the waves, life, gold, helpmenu,ect correctly. The help usually is random words. And the gold says 0 put it really isnt. Help :(


Posted by Ken

on 2014-08-02 10:38:06

What if i'm trying to create another stage with a different placing and paths of monsters, and i want it in the same .fla file

how can i do that?


Posted by Joseph

on 2014-02-20 23:26:46

Double check that you have named your text field as txtLife, and that it is inside the mcGameUI movie clip.


Posted by King

on 2014-02-20 14:43:23

TypeError: Error #1009: Cannot access a property or method of a null object reference.
at GameController/update()


-- Sir Joseph, I always get this kind of error whenever I try to publish it into an .swf .

line error: mcGameUI.txtLife.text = String(life);

Can you help me out. thanks


Posted by Joseph

on 2013-12-14 17:49:13

You should have unzpped a file called C.as too? No? =)


Posted by Khalid

on 2013-12-13 00:26:44

When i downloaded the program first thing I tried was to of course run it, but it says Access to undefined property C. Is C something on your computer or something in the program that i can't find? Curious.


Posted by sakthivel

on 2013-12-04 12:50:41

nice well


Posted by Level maker

on 2013-09-24 08:23:16

Hello, please can I request one unique as3 tutorial?
It's Level editor for players.
If you are interested tell me, I can link you source code of level editor in as3, but it is not tutorial.

Level editor is great future.


Posted by Joseph

on 2013-09-21 12:00:40

I've updated this portion here with a download which shows how you can create a boss at the end of the waves. For ease of viewing, The boss will appear at the end of the 5th wave. Take a look! You can download all the source files under the download section.


Posted by muhammadyasar

on 2013-08-21 21:32:46


Posted by Joseph

on 2013-08-21 00:23:13

@ Tony: Escape should mean the monster going past all your towers and out of the map.


Posted by Joseph

on 2013-08-21 00:17:06

Hi, I'm using Flash Professional CS3 in these examples. Any of the newer Flash Professional will do, or Flash CC.


Posted by joshua

on 2013-08-08 12:40:08

Hey guys. newbie here. What's the exact flash software needed to make this game?


Posted by TonyFckinStark

on 2013-08-07 00:00:35

hey can you explain "Each monster's death or escape gives the player 15 gold." it's really confusing. escape from the map/path? and whatever you can add please. thank you


Posted by Raymond

on 2013-08-05 20:59:41

Sorry guys, i wan to ask what is "warning: 3596: duplicate variable definition."
this thing come out after i done all the step follow the guide, someone know what happen?


Posted by Raymond

on 2013-08-05 20:47:00

Hello there, i try to follow the guide with step by step, but when i launch the game, there are error

C:\Users\MaOz\Desktop\Coursework - Final sem\Traditional Game - Final Coursework 2013\Daruma Otoshi Tower Defense\src\GameController.as, Line 300 Warning: 3596: Duplicate variable definition.
C:\Users\MaOz\Desktop\Coursework - Final sem\Traditional Game - Final Coursework 2013\Daruma Otoshi Tower Defense\src\GameController.as, Line 351 Warning: 3596: Duplicate variable definition.
C:\Users\MaOz\Desktop\Coursework - Final sem\Traditional Game - Final Coursework 2013\Daruma Otoshi Tower Defense\src\GameController.as, Line 357 Warning: 3596: Duplicate variable definition.
C:\Users\MaOz\Desktop\Coursework - Final sem\Traditional Game - Final Coursework 2013\Daruma Otoshi Tower Defense\src\GameController.as, Line 459 Warning: 3596: Duplicate variable definition.
C:\Users\MaOz\Desktop\Coursework - Final sem\Traditional Game - Final Coursework 2013\Daruma Otoshi Tower Defense\src\GameController.as, Line 466 Warning: 3596: Duplicate variable definition.
C:\Users\MaOz\Desktop\Coursework - Final sem\Traditional Game - Final Coursework 2013\Daruma Otoshi Tower Defense\src\GameController.as, Line 473 Warning: 3596: Duplicate variable definition.
C:\Users\MaOz\Desktop\Coursework - Final sem\Traditional Game - Final Coursework 2013\Daruma Otoshi Tower Defense\src\GameController.as, Line 480 Warning: 3596: Duplicate variable definition.
C:\Users\MaOz\Desktop\Coursework - Final sem\Traditional Game - Final Coursework 2013\Daruma Otoshi Tower Defense\src\GameController.as, Line 487 Warning: 3596: Duplicate variable definition.
C:\Users\MaOz\Desktop\Coursework - Final sem\Traditional Game - Final Coursework 2013\Daruma Otoshi Tower Defense\src\GameController.as, Line 494 Warning: 3596: Duplicate variable definition.
C:\Users\MaOz\Desktop\Coursework - Final sem\Traditional Game - Final Coursework


Posted by Guilherme

on 2013-05-02 02:11:22

Very nice tutorial. I couldnt create a TD without your help! Now i can create my own TD just for fun =D


Posted by Sketchist

on 2012-04-15 08:10:13

Can you send me an E-Mail on how to make a Fast-Forward button? And a Pause Menu button?


Posted by Enda

on 2012-02-23 08:48:27

hi, i try to make tower defense with your tutorial.
but i think way the enemy quite stiff, i mean no rotation on turn. can you help me? i try make it with waypoint. but it`s difficul


Posted by tommw

on 2012-02-03 04:27:04

Hey man!

I have a important Question and I really hope you could help me out.

I want to put the Tower_Fire.as, Tower_Lightning.as and Tower_Ice.as classes in the GameController.as
What's the best way to do that?

Cheers!

Tommw


Posted by TW

on 2012-01-30 21:39:43

Very nice tutorials man!
I really do appreciate folks like you that take time to help people out.
Bless you! :)


Posted by Joseph

on 2011-04-18 23:06:58

I understand the concerns about calling a root function from a class like Tower. It doesn't feel very OO.

Instead of "GameController(root).bullets.push(newBullet);
GameController(root).mcGameStage.addChild(newBullet);"
perhaps you can then set another variable, say shouldFire, to be true in the Tower object.

Inside your main game loop running from your GameController, you can then loop through all the towers to check if this variable is true, and if so, create a new appropriate bullet, then immediately set this variable back to false.

But for the purpose of a minigame, and explanation over an online tutorial, I thought the described way would be easier.


Posted by Sean

on 2011-04-15 23:29:28

You can add this to my previous post. This is by far the best tower defense tutorial I have found. The others are so basic and don't really take into account future additions.


Posted by Sean

on 2011-04-15 23:27:31

Alright, thank you. I am progressing along pretty well. I have everything working right now.

I was wondering though, what is a good way to avoid calling a root function from a class, like in your Tower class?


Posted by Joseph

on 2011-04-14 20:50:31

That's the right way to do it. Your Tower class will just be an AS class, and you can put it to extend MovieClip.

Your LaserTower would probably be linked to the actual MovieClip in your Flash library, under its linkage, you can set its base class to point to .Tower


Posted by Sean

on 2011-04-13 07:14:36

I got it all fixed, I had another movieclip in my tower movieclip that didn't have a MouseEnabled = false;

I am trying to now have classes for each tower, with a tower base class. For example, I have my base class "Tower" and my sub class "LaserTower". Should "Tower" extend MovieClip and "LaserTower" extend "Tower"?

I want my tower subclass to put in the tower stats (damage, cooldown, etc.), effects (hitting multiple units, slow tower, etc.) and create a bullet, since different towers will have different bullets.


Posted by Joseph

on 2011-04-05 22:43:23

Just to check, did you include the codes:

//Turn on all placings
for (var i in placings)
{
if (placings[i].canPlace)
placings[i].gotoAndStop("possible");
}

These are the codes that actually make the tiles light up. Perhaps you can follow this direction, and add in some trace statements to see where you got wrong.


Posted by Sean

on 2011-04-04 09:29:08

I am going through your tutorial kind of just getting the basics down while still doing my own code. I usually only look at the tutorial when I get stuck.

I am having a problem now where when I click on a tower button in the UI and it is following the mouse around, my empty tiles won't highlight when the mouse moves over them.


Posted by Joseph

on 2011-02-14 22:44:40

Not sure which part of the code you're unsure of, but let's look at it one by one.

This code happens in the Placing.as. Notice that an event listener has been added to it, such that when you click on the Placing, it triggers the function placeTower, which in turn calls GameController(root).placeTowerAt(....).

GameController(root) is just a reference back to the main GameController class that controls the entire game. Since Placing is a child of the root, we can do this referencing to the root, which is actually the overall GameController class.

We need to cast it because if your FLA is set with Strict mode on, it gives you an error since it isn't sure if root has the function placeTowerAt.

What placeTowerAt does (the code is defined back in GameController.as) is to then create a tower at that particular location which you clicked on.

A bit indirect, I know, but I was just trying to be a little more OO. :p


Posted by Francis

on 2011-02-02 23:51:17

Hey, i really like your tutorial but i cant understand what is the meaning of this code in Placing class.

GameController(root).placeTowerAt(this.x, this.y);

i cant figure it out. can you explain it to me?

Thanks for your help.

t0kz


Posted by Francis

on 2011-02-02 23:50:54

Hey, i really like your tutorial but i cant understand what is the meaning of this code in Placing class.

GameController(root).placeTowerAt(this.x, this.y);

i cant figure it out. can you explain it to me?

Thanks for your help.

t0kz


Posted by pinkerton

on 2011-02-02 23:28:54

hey, i really enjoyed your tutorial but in Placing class it bothers me in
GameController(root).placeTowerAt(this.x, this.y);

can you please help me with this?


Posted by Mike

on 2010-12-26 09:16:26

Hey, I really enjoyed your tutorial, great work on organisation and teaching procedures


Posted by Joseph

on 2010-11-15 22:33:01

Harv, thanks a lot! Your feedback will be useful! =)
Do let me know. Have fun making games!


Posted by harv

on 2010-11-13 08:26:06

hey man! been lookin for a decent tut for ages... gonna give this a go and i'll let ya know hw it goes... cheers :D


Posted by Joseph

on 2010-09-25 22:22:41

Hi Mike!
You came at the right time, I just finished the tutorial. Everything's up! :)


Posted by Mike

on 2010-09-25 06:26:12

Hi, i can't seem to find any posts with a date on them so i was just wondering if this was still under development? Thanks.

M


Flash Tutorial Links:
Play Games: HTML5 Tutorials:
gaming tools download on app store now!
Home | About Us | Contact Us
Powered by Make Flash Games. All Rights Reserved.
By Joseph Tan