Build 10 classic Flash games and learn game development along the way with this ultra-fast paced game development course.

If you love this blog, this is the book for you.

Buy the book

Get the source code of 12 commercial Flash games, which have been loaded more than 50 million times!

Learn from real world successful examples.

Get it now

Box2D for Flash Games teaches you how to make Flash physics games from scratch with the most advanced features.

Create the new Flash game smashing hit.

Buy the book

Create a cog with Box2D

Do you like cogs? Do you plan to use them in some game?

Here is a simple function which will allow you to create a cog, configure some parameters and make it work thanks to revolute joint motors.

This script does not introduce any new concept, I just used compound objects and revolute joints:

package {
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import Box2D.Dynamics.*;
	import Box2D.Collision.*;
	import Box2D.Collision.Shapes.*;
	import Box2D.Common.Math.*;
	import Box2D.Dynamics.Joints.*;
	public class Main extends Sprite {
		private var world:b2World=new b2World(new b2Vec2(0,10),true);
		private var worldScale:Number=30;
		private var theCog:b2Body;
		public function Main() {
			debugDraw();
			addCog(Math.random()*340+150,Math.random()*180+150,Math.random()*100+50,Math.random()*30+5,Math.random()*20+5,Math.floor(Math.random()*15)+6,Math.random()+1);
			addEventListener(Event.ENTER_FRAME,update);
			stage.addEventListener(MouseEvent.CLICK,createCog);
		}
		private function createCog(e:MouseEvent):void {
			world.DestroyBody(theCog);
			addCog(Math.random()*340+150,Math.random()*180+150,Math.random()*100+50,Math.random()*30+5,Math.random()*20+5,Math.floor(Math.random()*15)+6,Math.random()+1);
		}
		private function addCog(pX:Number,pY:Number,r:Number,cogWidth:Number,cogHeight:Number,nCogs:Number,motorSpeed:Number):void {
			var fixtureDef:b2FixtureDef = new b2FixtureDef();
			fixtureDef.restitution=0;
			fixtureDef.density=1;
			var circleShape:b2CircleShape=new b2CircleShape(r/worldScale);
			fixtureDef.shape=circleShape;
			var bodyDef:b2BodyDef=new b2BodyDef();
			bodyDef.userData=new Sprite();
			bodyDef.position.Set(pX/worldScale,pY/worldScale);
			bodyDef.type=b2Body.b2_dynamicBody;
			theCog=world.CreateBody(bodyDef);
			theCog.CreateFixture(fixtureDef);
			var polygonShape:b2PolygonShape = new b2PolygonShape();
			for (var i:Number=0; i

addCog function wants these arguments:

pX: the horizontal position of the center of the cog, in pixels.

pY: the vertical position of the center of the cog, in pixels.

r: the radius of the cog, in pixels

cogWidth: the width of each teeth in the cog

cogHeight: the height of each teeth in the cog

nCogs: number of tooth in the cog

motorSpeed: speed of the motor

and this is the result:

Click on the stage to generate random cogs

Download the source code.

Rate this post: 1 Star2 Stars3 Stars4 Stars5 Stars (9 votes, average: 4.44 out of 5)
Loading ... Loading ...
Flash Templates provided by Template Monster are pre-made web design products developed using Flash technology.
They can be easily customized to meet the unique requirements of your project.
Be my fan on Facebook and follow me on Twitter! Exclusive content for my Facebook fans and Twitter followers

This post has 11 comments

  1. Francisco Prado

    on April 5, 2012 at 5:49 pm

    Really useful. I would try to develop a cog, but your tutorial came in good time!

  2. Pierre Chamberlain

    on April 5, 2012 at 6:33 pm

    Hey Emanuel,

    Is it better to have each “teeth” of the cog wheel be equally deep “within” the circle and extruded “outside” the circle (50/50 inside and outside)? Or could the teeth start right at the edge of the circle and extrude only outside (0/100 outside only)?

    Does having each teeth protrude through the circle guarantee better collision detection maybe?

  3. csomakk

    on April 5, 2012 at 8:55 pm

    I’d love to see it working with a few cogs attached to eachoter. I currently don’t have time to make it myself.. :( stupid school

  4. adam

    on April 7, 2012 at 4:09 pm

    Hellloo :)
    I have a question and I didnt know how to get it to you so I hope it’s okay Im doing it from here..
    Im sure you familiar with the flash game series “age of war”.. I really would like to know how to do a game like that..
    I mean.. how can i spawn movieclips(probably array) with different abilities finding other movieclips (probably hitTest) spawn by the enemy and fighting..
    I have some experience with as3..
    so.. please help? ;)
    thanks you are great and I love you tutorials very much!!

    age of war 1
    http://www.kongregate.com/games/Louissi/age-of-war?gclid=CKm Jhb_roq8CFQdG3wodV1myXw

  5. nika

    on April 9, 2012 at 6:03 pm

    Really useful. thanks ..

  6. Behrouz

    on April 10, 2012 at 9:58 am

    source code link is to swf
    coreect link is

    http://www.emanueleferonato.com/wp-content/uploads/2012/04/cog.zip

  7. Emanuele Feronato

    on April 10, 2012 at 10:19 am

    Thank you Behrouz

  8. veeramani

    on April 10, 2012 at 1:03 pm

    Hi Emanuele,

    i have one question,which comes to my mind daily when i’m working,
    Is the flash action script development is good for my future?
    Now a days using of flash App’s and Flash Games have been reduced!!!!.

    give some ideas.

  9. veeramani

    on April 10, 2012 at 1:04 pm

    i’l continue my career in AS3, Or is it require to change the development path?

  10. Behrouz

    on April 10, 2012 at 2:17 pm

    you’re welcome Emanuele :D

  11. InspiritGames

    on April 14, 2012 at 12:16 pm

    Emanuele, thanks for the tutorial.