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
They can be easily customized to meet the unique requirements of your project.





(9 votes, average: 4.44 out of 5)






This post has 11 comments
Francisco Prado
Really useful. I would try to develop a cog, but your tutorial came in good time!
Pierre Chamberlain
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?
csomakk
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
adam
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
nika
Really useful. thanks ..
Behrouz
source code link is to swf
coreect link is
http://www.emanueleferonato.com/wp-content/uploads/2012/04/cog.zip
Emanuele Feronato
Thank you Behrouz
veeramani
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.
veeramani
i’l continue my career in AS3, Or is it require to change the development path?
Behrouz
you’re welcome Emanuele :D
InspiritGames
Emanuele, thanks for the tutorial.