Talking about Actionscript 3, Box2D and Flash.
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
Never miss an update! Subscribe, and I will bother you by email only when a new game or full source code comes out.