Import mojo Global stars:Starfield,mx:Float,my:Float Function Main() stars = New Starfield() End Function Class TStar Field x:Float,y:Float,z:Float Method Init() x=Rnd(-100,100) y=Rnd(-100,100) z=Rnd(-100,100) End Method Method Update() z-=1 x+=mx y+=my If z<=-100 z+=200 If x<=-100 x+=200 If y<=-100 y+=200 If x>= 100 x-=200 If y>= 100 y-=200 End Method Method Draw() Local i:Int=z+121 Local px:Int=x*450/(z+151) Local py:Int=y*350/(z+151) SetColor 255-i,255-i,255-i DrawRect 320+px,240+py,1,1 End Method End Class Class Starfield Extends App Field star:TStar[1024] Method OnCreate() SetUpdateRate 50 For Local t:Int=0 To star.Length-1 star[t]=New TStar star[t].Init Next End Method Method OnUpdate() mx=(MouseX()-320)/50 my=(MouseY()-240)/50 For Local t:Int=0 To star.Length-1 star[t].Update Next End Method Method OnRender() Cls 0,0,0 For Local t:Int=0 To star.Length-1 star[t].Draw Next End Method End Class
Alle Beiträge von Christian Sonntag
Monkey: minimum base script for the diddy framework
Strict Import mojo Import diddy Global titleScreen:TitleScreen Function Main:Int() game = New MyGame() Return 0 End Class MyGame Extends DiddyApp Method OnCreate:Int() Super.OnCreate() titleScreen = New TitleScreen titleScreen.PreStart() Return 0 End End Class TitleScreen Extends Screen Method New() name = "Title" End Method Start:Void() game.screenFade.Start(50, false) End Method Render:Void() Cls DrawText "TITLE SCREEN!", SCREEN_WIDTH2, SCREEN_HEIGHT2, 0.5, 0.5 DrawText "Click to Play!", SCREEN_WIDTH2, SCREEN_HEIGHT2 + 20, 0.5, 0.5 DrawText "Escape to Quit!", SCREEN_WIDTH2, SCREEN_HEIGHT2 + 40, 0.5, 0.5 End Method Update:Void() If KeyHit(KEY_ESCAPE) game.screenFade.Start(50, true) game.nextScreen = game.exitScreen End End End
Monkey: class example with extends, implements and abstract
Strict Import mojo Interface IUpdateable Method OnUpdate:Int() End Interface IRenderable Method OnRender:Int() End Class AbstractEntity Abstract Global cw:Int Global ch:Int Method New (cw:Int, ch:Int) Self.cw = cw; Self.ch = ch; End End Class Ball Extends AbstractEntity Implements IUpdateable, IRenderable Field x:Int Field y:Int Field xs:Int Field ys:Int Method New () Self.x = 0 Self.y = 0 Self.xs = 1 Self.ys = 1 End Method New (cw:Int, ch:Int) Super.New(cw, ch) Self.x = 0 Self.y = 0 Self.xs = 1 Self.ys = 1 End Method OnUpdate:Int() Self.x += xs Self.y += ys If Self.x > Self.cw-16 Or Self.x < 0 Self.xs =- Self.xs End If Self.y > Self.ch-16 Or Self.y < 0 Self.ys =- Self.ys End Return 0 End Method OnRender:Int() DrawCircle Self.x, Self.y, 16 Return 0 End End Class Pad Extends AbstractEntity Implements IUpdateable, IRenderable Field x:Int Field y:Int Field xs:Int Method New () Self.x = 0 Self.y = ch - 16 Self.xs = 1 End Method New (cw:Int, ch:Int) Super.New(cw, ch) Self.x = 0 Self.y = ch - 16 Self.xs = 1 End Method OnUpdate:Int() Self.x += xs If Self.x > Self.cw-64 Or Self.x < 0 Self.xs =- Self.xs End Return 0 End Method OnRender:Int() DrawRect Self.x, Self.y, 64, 8 Return 0 End End Class game Extends App Field ball:Ball Field pad:Pad Method OnCreate:Int() SetUpdateRate(60) ball = New Ball(DeviceWidth(), DeviceHeight()) pad = New Pad() Return 0 End Method OnUpdate:Int() ball.OnUpdate() pad.OnUpdate() Return 0 End Method OnRender:Int() Cls 0,0,0 ball.OnRender() pad.OnRender() Return 0 End End Function Main:Int() New game Return 0 End
Monkey: particle class
Import mojo Class Particle Global ParticleList:List<particle> = New List<particle> Field x:Float,y:Float,a:Float = 1,r:Int Field ox:Int,oy:Int Field img:Image Field dx:Float,dy:Float, da:Float Field maxdistance:Int Field speed:Float Field dir:Int Field fade:Int Field z:Int Method Create:Particle(_x:Int, _y:Int, _img:Image, _dir:Int = 0, _speed:Float = 0, frames:Int = 1, _fade:Int = False, _autorot:Int = False, _z:Int = 0) ParticleList.AddLast(Self) z = _z x = _x y = _y ox = _x oy = _y img = _img speed = _speed dir = _dir dx = Sin(dir) * speed dy = -Cos(dir) * speed da = 1.0 / frames maxdistance = frames If dir And _autorot r = -dir - 180 End If If _fade fade = True End If End Method Method Update() x+=dx y+=dy If fade a-=da maxdistance-=1 If maxdistance <= 0 Or a <= 0 Destroy() End If If x > VDeviceWidth() Or x < 0 - img.Width Or y > VDeviceHeight() Or y < 0 - img.Height Destroy() End If End Method Method Draw() SetAlpha a DrawImage img,x,y,r,1,1 SetAlpha 1 End Method Method SetPAlpha(alpha:Float) a = alpha End Method Method SetPRotation(rot:Int) r = rot End Method Method Destroy() ParticleList.Remove(Self) End Method Method AddX(_x:Int) x+= _x End Method Method AddY(_y:Int) y+= _y End Method Method SetDirection(_dir:Int) dir = _dir End Method Method SetSpeed(_speed:Float) speed = _speed End Method End Function ParticleExplosion(_x:Float, _y:Float, image:Image, n:Int, frames:Int, speed_multiplyer:Float = 0, ar:Int = False, _z:Int = 0) Local speed:Float For Local i:Int = 1 To n Local dir:Int = Rnd(0, 359) If speed_multiplyer speed = Rnd(0.08*speed_multiplyer, 1.5*speed_multiplyer) Else speed = Rnd(0.08, 1.5) End If Local part:Particle = New Particle() part.Create(_x, _y, image, dir, speed, frames - 10 + Rnd((frames*1.40)), True, ar, _z) Next End Function Function EmitParticle(_x:Float, _y:Float, image:Image, frames:Int, fade:Int = True, dir:Int = 0, speed:Float = 0, ar:Int = False, _z:Int = 0) Local part:Particle = New Particle() part.Create(_x, _y, image, dir, speed, frames, fade, ar, _z) End Function Function ParticleCount:Int() Return Particle.ParticleList.Count() End Function Function ClearParticles() Particle.ParticleList.Clear() End Function Function ClearParticlesZ(z:Int = 0) For Local delp:Particle = Eachin Particle.ParticleList If delp.z = z Particle.ParticleList.Remove(delp) End If Next End Function Function UpdateParticlesZ(z:Int = 0, forcex:Float = 0, forcey:Float = 0) For Local UpdateP:Particle = Eachin Particle.ParticleList If UpdateP.z = z UpdateP.Update() If forcex UpdateP.x+=forcex If forcey UpdateP.y+=forcey End If Next End Function Function DrawParticlesZ(z:Int = 0) For Local UpdateP:Particle = Eachin Particle.ParticleList If UpdateP.z = z UpdateP.Draw() End If Next End Function
Monkey: box2d falling boxes
'----Includes----' Import box2d.dynamics.b2world '----Test Zone----' Function Main() New Box2DLoop() End Function '----Main Loop----' Class Box2DLoop Extends App Field _world:b2World Field RATIO:Float = 8 Field _nextCrateIn:Int '--Main Methods----' Method OnCreate() ' 1. Set Up World setupWorld() ' Create Walls and Floors createWallsAndFloor() setupDebugDraw() _nextCrateIn = 0 'Display Setup SetUpdateRate(60) End Method Method setupDebugDraw:Void() 'Box2D Debug Settings 'Delete this section if you dont need to see the physical process in graphics. Local dbgDraw :b2DebugDraw = New b2DebugDraw() dbgDraw.SetDrawScale(10.0) dbgDraw.SetFillAlpha(0.3) dbgDraw.SetLineThickness(1.0) dbgDraw.SetFlags(b2DebugDraw.e_shapeBit | b2DebugDraw.e_jointBit)'| b2DebugDraw.e_pairBit) _world.SetDebugDraw(dbgDraw) End Method OnRender() Cls _world.DrawDebugData() End Method Method OnUpdate() _world.TimeStep(1.0 /30,10,10) _world.ClearForces() _nextCrateIn = _nextCrateIn - 1 If _nextCrateIn <=0 And _world.m_bodyCount < 80 Then addARandomCrate() _nextCrateIn = 10 Endif End Method Method setupWorld() ' Define gravity Local gravity:b2Vec2 = New b2Vec2(0,9.8) ' Ignore Sleeping Objects Local ignoresleeping:Bool = True _world = New b2World(gravity,ignoresleeping) End Method addARandomCrate() Local fd:b2FixtureDef = New b2FixtureDef() Local sd:b2PolygonShape = New b2PolygonShape() Local bd:b2BodyDef = New b2BodyDef(); bd.type = b2Body.b2_Body fd.friction = 0.8 fd.restitution = 0.3 fd.density = 0.7 fd.shape = sd sd.SetAsBox(randomInt(5,40) / RATIO, randomInt(5, 40) / RATIO) bd.position.Set(randomInt(15,530) / RATIO, randomInt(-100, -10) / RATIO) bd.angle = randomInt(0,360) * 3.14 / 180 Local b:b2Body = _world.CreateBody(bd) b.CreateFixture(fd) End Method randomInt:Int(lowVal:Int, highVal:Int) If (lowVal <= highVal) Return lowVal + Floor(Rnd() * (highVal - lowVal + 1)) Endif End Method createWallsAndFloor:Void() Local sd:b2PolygonShape = New b2PolygonShape() Local fd:b2FixtureDef = New b2FixtureDef() Local bd:b2BodyDef = New b2BodyDef() bd.type = b2Body.b2_staticBody sd.SetAsArray([New b2Vec2(0,0),New b2Vec2(550/RATIO,0), New b2Vec2(550/RATIO,10/RATIO), New b2Vec2(0,10/RATIO)]) fd.friction = 0.5 fd.restitution = 0.3 fd.density = 0.0 fd.shape = sd bd.position.Set(0,560/RATIO) Local b:b2Body = _world.CreateBody(bd) b.CreateFixture(fd) Local sdwall:b2PolygonShape = New b2PolygonShape() Local fdwall:b2FixtureDef = New b2FixtureDef() Local bdwall:b2BodyDef = New b2BodyDef() bd.type = b2Body.b2_staticBody fdwall.friction = 0.5 fdwall.restitution = 0.3 fdwall.density = 0 fdwall.shape = sdwall sdwall.SetAsBox(5/RATIO,390/RATIO) bdwall.position.Set(5/RATIO,195/RATIO) Local leftwall:b2Body = _world.CreateBody(bdwall) leftwall.CreateFixture(fdwall) bdwall.position.Set(545/RATIO,195/RATIO) Local rightwall:b2Body = _world.CreateBody(bdwall) rightwall.CreateFixture(fdwall) End End Class
Monkey: box2d simple join example
#rem In this demo I create two bodies and then join them with a Joint. one body is a static body. Please take this demo and expend it with explanations so we can all learn. (keep it simple..) #End '----Imports----' Import box2d.collision Import box2d.collision.shapes Import box2d.common.math Import box2d.dynamics.contacts Import box2d.dynamics Import box2d.flash.flashtypes Import box2d.common.math.b2vec2 '----Test Zone----' Function Main() New Box2DLoop End Function '----Main Loop----' Class Box2DLoop Extends App 'Box 2D World Definitions Field BXworld : b2World 'Box2D physical World Object Field m_velocityIterations : Int = 10 'Dont know whats this yet. Field m_positionIterations : Int = 10 'Either that. Field m_timeStep : Float = 1.0/60 'Hmm, I know whats this but no changes accured when presetting. Field m_physScale : Float = 1 ' 30 'I Change its value but same results. Field m_debugdrawscale : Float = 10 'This Affects the size of the physical Body Display 'A Box2D Object Definition Field ABody:b2Body 'The Actual Body Field BBody:b2Body 'The Actual Body Field BodyDef:b2BodyDef Field BodyShape:b2PolygonShape Field BodyFixture:b2FixtureDef Method OnCreate() 'Display Setup SetUpdateRate(60) '--Box2D Section--' 'World Setups BXworld = New b2World(New b2Vec2(0,9.7),True) 'General Body Definitions BodyDef =New b2BodyDef BodyShape =New b2PolygonShape() BodyFixture=New b2FixtureDef BodyDef.type=b2Body.b2_Body 'A dynamic body set BodyFixture.density =1.0 BodyFixture.friction =0.5 BodyFixture.restitution =0.1 BodyShape.SetAsBox(5,5) BodyFixture.shape=BodyShape 'Create Body 1 ABody=BXworld.CreateBody(BodyDef) ABody.CreateFixture(BodyFixture) ABody.SetPosition(New b2Vec2(20,20)) 'Create Body 2 BBody=BXworld.CreateBody(BodyDef) BBody.CreateFixture(BodyFixture) BBody.SetPosition(New b2Vec2(45,20)) BBody.SetType(True) 'Setting the Body as Static '------------------------------------------------------------' 'Basic Creation of Joint type revolute.. Local NewJoint:b2RevoluteJointDef=New b2RevoluteJointDef NewJoint.Initialize(ABody,BBody,New b2Vec2(30.0,25.0)) BXworld.CreateJoint(NewJoint) '------------------------------------------------------------' 'Debug Settings 'Delete this section if you dont need to see the physical process. Local dbgDraw :b2DebugDraw = New b2DebugDraw() dbgDraw.SetDrawScale(m_debugdrawscale) dbgDraw.SetFillAlpha(0.3) dbgDraw.SetLineThickness(1.0) dbgDraw.SetFlags(b2DebugDraw.e_shapeBit | b2DebugDraw.e_jointBit)'| b2DebugDraw.e_pairBit) BXworld.SetDebugDraw(dbgDraw) End Method Method OnRender() Cls 'Box2D Display Section BXworld.DrawDebugData() 'Delete this line if you dont need to see the physical process in graphics. (must also delete 'Box2D Debug Settings section above) End Method Method OnUpdate() 'The Stepping of Box2D Engine BXworld.TimeStep(m_timeStep,m_velocityIterations,m_positionIterations) BXworld.ClearForces() 'Dont know why you need this.. End Method End Class
Monkey: simple box2d box
#rem 'Im still very new at box2d but im starting to understand its principle. 'its not an easy to understand engine since the tutorials are not dealing with explaning the core principle of this engine. 'I will try to do that with what ive figured out till now. 'In box2d you First define things and then create them. 'First you define the your 2D world. 'Example: Field BXworld : b2World 'Box2D physical World Object Field m_velocityIterations : int = 10 'Dont know whats this yet. Field m_positionIterations : int = 10 'Either that. Field m_timeStep : Float = 1.0/60 'Hmm, I know whats this but no changes accured when presetting. Field m_physScale : Float = 1 ' 30 'I Change its value but same results. Field m_debugdrawscale : Float = 10 Then you create it. BXworld = New b2World(New b2Vec2(0,9.7),True) Now that you have created your world you can create objects. Same here, first you need to define the object and then create it. Example: Field ABody:b2Body 'The Actual Body Field BodyDef:b2BodyDef Field BodyShape:b2PolygonShape Field BodyFixture:b2FixtureDef BodyDef.type=b2Body.b2_Body 'A dynamic body set BodyFixture.density =1.0 BodyFixture.friction =0.5 BodyFixture.restitution =0.1 BodyShape.SetAsBox(10,10) BodyFixture.shape=BodyShape You create the object using the World... ABody=BXworld.CreateBody(BodyDef) ABody.CreateFixture(BodyFixture) I still not totaly understand this engine but you can run the demo and check stuff out. My next demo will be a joint demo. #End '----Imports----' Import box2d.collision Import box2d.collision.shapes Import box2d.common.math Import box2d.dynamics.contacts Import box2d.dynamics Import box2d.flash.flashtypes Import box2d.common.math.b2vec2 '----Test Zone----' Function Main() New Box2DLoop End Function '----Main Loop----' Class Box2DLoop Extends App 'Box 2D World Definitions Field BXworld : b2World 'Box2D physical World Object Field m_velocityIterations : Int = 10 'Dont know whats this yet. Field m_positionIterations : Int = 10 'Either that. Field m_timeStep : Float = 1.0/60 'Hmm, I know whats this but no changes accured when presetting. Field m_physScale : Float = 1 ' 30 'I Change its value but same results. Field m_debugdrawscale : Float = 10 'This Affects the size of the physical Body Display 'A Box2D Object Definition Field ABody:b2Body 'The Actual Body Field BodyDef:b2BodyDef Field BodyShape:b2PolygonShape Field BodyFixture:b2FixtureDef Method OnCreate() 'Display Setup SetUpdateRate(60) '--Box2D Section--' 'World Setups BXworld = New b2World(New b2Vec2(0,9.7),True) 'Creating a Simple Box (simple.. right..) BodyDef =New b2BodyDef BodyShape =New b2PolygonShape() BodyFixture=New b2FixtureDef BodyDef.type=b2Body.b2_Body 'A dynamic body set BodyFixture.density =1.0 BodyFixture.friction =0.5 BodyFixture.restitution =0.1 BodyShape.SetAsBox(10,10) BodyFixture.shape=BodyShape ABody=BXworld.CreateBody(BodyDef) ABody.CreateFixture(BodyFixture) ABody.SetPosition(New b2Vec2(20,20)) 'Debug Settings 'Delete this section if you dont need to see the physical process. Local dbgDraw :b2DebugDraw = New b2DebugDraw() dbgDraw.SetDrawScale(m_debugdrawscale) dbgDraw.SetFillAlpha(0.3) dbgDraw.SetLineThickness(1.0) dbgDraw.SetFlags(b2DebugDraw.e_shapeBit | b2DebugDraw.e_jointBit)'| b2DebugDraw.e_pairBit) BXworld.SetDebugDraw(dbgDraw) End Method Method OnRender() Cls 'Box2D Display Section BXworld.DrawDebugData() 'Delete this line if you dont need to see the physical process in graphics. (must also delete 'Box2D Debug Settings section above) End Method Method OnUpdate() 'The Stepping of Box2D Engine BXworld.TimeStep(m_timeStep,m_velocityIterations,m_positionIterations) BXworld.ClearForces() 'Dont know why you need this.. End Method End Class
Monkey: minimum Box2d with diddy example
Strict
Import diddy 
Import box2d.collision
Import box2d.collision.shapes
Import box2d.collision.shapes
Import box2d.dynamics.joints
Import box2d.common.math
Import box2d.dynamics.contacts
Import box2d.dynamics
Import box2d.flash.flashtypes
Import box2d.common.math.b2vec2
Global gameScreen:Screen
Function Main:Int()
        game=New MyGame()
        Return 0
End Function
Class MyGame Extends DiddyApp
        Method OnCreate:Int()
               Super.OnCreate()
               SetUpdateRate(60)     
               gameScreen = New Box2dscreen  
               gameScreen.PreStart()         
               Return 0
        End
End
Class Box2dscreen Extends Screen
        '
        Field world:b2World 
        Field contactlistener:ContactListener 
        '
    Field m_velocityIterations:Int = 10
    Field m_positionIterations:Int = 10
    Field m_timeStep:Float = 1.0/60     ' set this to your SetUpdateRate()
    Field m_physScale:Float = 1' 30       ' Not in use, but you should not use pixels as your units, an object of length 200 pixels would be seen by Box2D as the size of a 45 story building.
        Field m_debugdrawscale:Float=1          ' set this to m_physScale if you are scaling your world.
        Method New()
               Local doSleep:Bool = True
               Self.world = New b2World(New b2Vec2(0,0), doSleep)    ' no need for AABB in newer versions of box2d, the world is infinite
               Self.SetGravity(1.0,20) '
               world.SetWarmStarting(True)   
               '
                '
               '// set debug draw
               Local dbgDraw :b2DebugDraw = New b2DebugDraw()      
               dbgDraw.SetDrawScale(m_debugdrawscale) ' was 30
               dbgDraw.SetFillAlpha(0.3)
               dbgDraw.SetLineThickness(1.0)
               dbgDraw.SetFlags(b2DebugDraw.e_shapeBit | b2DebugDraw.e_jointBit)'| b2DebugDraw.e_pairBit)
               world.SetDebugDraw(dbgDraw)
               Self.contactlistener=New ContactListener()
               world.SetContactListener(Self.contactlistener)' for collision detection, if you need information which objects collide                           
        End Method
        Method Start:Void()
               Self.CreateDemo()     
        End
        Method Render:Void()
               Cls
               Self.world.DrawDebugData()
        End
        Method Update:Void()
               world.TimeStep(m_timeStep, m_velocityIterations, m_positionIterations)
               world.ClearForces()
        End Method
        Method SetGravity:Void(x:Float,y:Float)
               Self.world.SetGravity(New b2Vec2(x,y))
        End Method
        Method CreateDemo:Void()
               Local b:b2Body 
               ' a box for ground
               b=Self.CreateBox(340,420,480,30,True)
               b.SetUserData(New StringObject("ground")) ' give object a name for collision detection in contactlistener
               ' a sphere
               b=Self.CreateSphere(350,220,40)      
               b.SetUserData(New StringObject("sphere"))
               ' create a polygon from an array of b2d Vectors
               Local tri:b2Vec2[]= [New b2Vec2(0, 0), New b2Vec2(0, -100),   New b2Vec2(200 ,0)]
               b=Self.CreatePolybody(200,20,tri)
               b.SetUserData(New StringObject("triangle1"))                               
'              ' create a polygon from an array with floats
               Local triangle:Float[]=[0.000000000,-49.000000,99.000000,59.0000000,-77.000000,79.0000000]
               b=Self.CreatePolybody(200,100,Self.ArrayToVectorarray(triangle))
               b.SetUserData(New StringObject("triangle2")) 
        End Method
        Method CreateBox:b2Body (xpos:Float,ypos:Float,width:Float,height:Float,static:Bool=True)
               Local fd :b2FixtureDef = New b2FixtureDef()
               Local sd :b2PolygonShape = New b2PolygonShape()
               Local bd :b2BodyDef = New b2BodyDef()
               If static=True
                       bd.type = b2Body.b2_staticBody
               Else
                       bd.type = b2Body.b2_Body
               Endif          
               fd.density = 1.0
               fd.friction = 0.5
               fd.restitution = 0.1
               fd.shape = sd
               sd.SetAsBox(width,height)
               bd.position.Set(xpos,ypos)
               Local b :b2Body
               b = Self.world.CreateBody(bd)        
               ' Recall that shapes don’t know about bodies and may be used independently of the physics simulation. Therefore Box2D provides the b2Fixture class to attach shapes to bodies.
               b.CreateFixture(fd)   
               '
               Return b       
        End Method
        Method CreateSphere:b2Body (xpos:Float,ypos:Float,radius:Float,static:Bool=False)
               Local fd :b2FixtureDef = New b2FixtureDef()
               Local bd :b2BodyDef = New b2BodyDef()
               Local cd :b2CircleShape = New b2CircleShape()  
               '              
               cd.m_radius  = radius
               fd.density = 2
               fd.restitution = 0.2
               fd.friction = 0.5
               fd.shape=cd
               If static=True
                       bd.type = b2Body.b2_staticBody ' a static body
               Else
                       bd.type = b2Body.b2_Body 'a dynamic body
               Endif
               bd.position.Set(xpos,ypos)
               Local b :b2Body
               b = Self.world.CreateBody(bd)
               b=Self.world.CreateBody(bd)
               b.CreateFixture(fd)                  
               Return b       
        End Method
        Method CreatePolybody:b2Body(xpos:Float,ypos:Float,verts:b2Vec2[],static:Bool=False,bullet:Bool=False)
               ' polys must be  defined vertices from left to right or their collision will not work. They must be convex.
               ' A polygon is convex when all line segments connecting two points in the interior do not cross any edge
               ' of the polygon. 
               ' Polygons are solid and never hollow. A polygon must have 3 or more vertices.
               Local b :b2Body
               Local fd :b2FixtureDef = New b2FixtureDef()
               Local sd :b2PolygonShape = New b2PolygonShape()
               Local bd :b2BodyDef = New b2BodyDef()
               '
               sd.SetAsArray(verts,verts.Length)
               fd.shape=sd
               bd.type = b2Body.b2_Body              
               '
               bd.position.Set(xpos,ypos)
               bd.bullet=bullet
               b=Self.world.CreateBody(bd)
               '
               fd.density = 1.0
               fd.friction = 0.5
               fd.restitution = 0.1
               b.CreateFixture(fd)
               '              
               Return b               
        End Method
        Method ArrayToVectorarray:b2Vec2[](arr:Float[])
               ' converts a normal array with floats to an array of b2Vec2
               Local vecs:b2Vec2[1]
               vecs=vecs.Resize(arr.Length/2)
               Local count:Int
                For Local f:Float=0 To arr.Length-2 Step 2
                       vecs[count]=New b2Vec2(arr[f],arr[f+1])
                       count+=1
               Next
               Return vecs
        End Method
        Method Cleanup:Void()
               ' When a world leaves scope or is deleted by calling delete on a pointer, all the memory reserved for bodies, fixtures, and joints is freed.
               ' This is done to improve performance and make your life easier. However, you will need to nullify any body, fixture, or joint pointers you have because they will become invalid.
        End Method
End Class
Class ContactListener Extends b2ContactListener
    ' to gather information about collided objects.
        ' http://www.box2dflash.org/docs/2.1a/reference/Box2D/Dynamics/b2ContactListener.html
        ' You cannot create/destroy Box2D entities inside these callbacks.
    Method New()
        Super.New()
    End
    Method PreSolve : Void (contact:b2Contact, oldManifold:b2Manifold)
    End
        Method BeginContact:Void(contact:b2Contact)
'              Print "objects did collide.."
               '
               ' get the fixtures involved in collision
               Local fixA:b2Fixture=contact.GetFixtureA()' Instead of telling you which b2Body collided, the b2Contact tells you which fixture collided. 
               Local fixB:b2Fixture=contact.GetFixtureB()' To know which b2Body was involved in the collision you can retrieve a reference to the fixture.
               Local userdata1:Object=Object(fixA.GetBody().GetUserData())
               Local userdata2:Object=Object(fixB.GetBody().GetUserData())
               If userdata1<>Null
                       Local name:String=StringObject(userdata1).ToString()
'                      Print "involved in collision:"+ name
               Endif
               If userdata2<>Null
                       Local name:String=StringObject(userdata2).ToString()
'                      Print "involved in collision:"+ name
               Endif          
        End Method
End
ASObjC: NSURLConnection – http get and post
-- -- pgURLAppDelegate.applescript -- pgURL -- -- Created by goodtime on 4/10/11. -- Copyright 2011 NiceMac. All rights reserved. -- demonstrates doing a GET or POST Request using NSURLConnection. Runs in the Background (not in main thread) -- contains no UI... might add one later, for now it just logs or displays alerts -- see console log and feel free to change the URL -- reference material: http://cocoawithlove.com/2008/09/cocoa-application-driven-by-http-data.html script pgURLAppDelegate property parent : class "NSObject" property self : current application's pgURLAppDelegate -- should match the script delegate name above property myURL : "http://www.heise.de" -- URL of your request property postMethod : "POST" -- use POST for POST property myBody : "" -- PUT YOUR POST MESSAGE HERE if trying to do a POST -- URL Request Encoding property myEncoding : NSUTF8StringEncoding of current application --code for UTF8 property getMethod : "GET" -- use GET for any other Requests property intermediateMsg : "" -- Text String returned from the request (may not be complete for long downloads) property entireMsg : "" -- All the Text String returned from the request on pgURL_(myURL, myBody, myMethod) -- String to NSURL tell class "NSURL" of current application set myURL to URLWithString_(myURL) end tell -- String tell class "NSString" of current application set myBody to stringWithString_(myBody) end set myBody to myBody's dataUsingEncoding_(myEncoding) tell class "NSString" of current application set myMethod to myMethod end tell NSMutableURLRequest of current application set myRequest to requestWithURL_(myURL) end tell myRequest setHTTPMethod_(myMethod) end -- add the Message Body when sending a POST Method if myMethod = "POST" then tell myRequest setHTTPBody_(myBody) end end -- form the connection set myConnection to (((current application's class "NSURLConnection")'s alloc)'s initWithRequest_delegate_(myRequest, self)) end -- handle the connection in the background (not in main thread) -- this is controlled by the next four threads on connection_didReceiveResponse_(myConnection, response) tell class "NSHTTPURLResponse" of current application set statusText to (localizedStringForStatusCode_(statusCode of response)) as text set statusCode to (statusCode of response) as string end -- if it fails to do anything, show what it didn't do here (the error) if statustext = "no error" then -- I am not really sure if this does anything or if it is reseting the returnData properly tell current application's returnData setLength_(0) end else display alert "HTTP Error: " & statusCode & return & "Error Message: " & statusText & "." end end on connection_didReceiveData_(myConnection, returnData) -- convert Data returned to String (Don't ever forget how to do this, it is a pain when do forget) set my intermediateMsg to (((current application's class "NSString")'s alloc)'s initWithData_encoding_(returnData, current application's NSUTF8StringEncoding)) as string log "didReceivedData:" log intermediateMsg & return & return set my entireMsg to my entireMsg & intermediateMsg end on connection_didFailWithError_(myConnection,trpErr) -- display alert trpErr as string log trpErr set EM to "" try set newError to (NSLocalizedDescription of userInfo of (trpErr)) as string on error EM -- if AppleScript can't do this, so what else is wrong set errorMore to EM end display alert newError & return & return & errorMore end on connectionDidFinishLoading_(myConnection) log "connection Finished." -- here you can do what you want to do with the intermediateMsg log "here is your entire message returned:" log entireMsg log "end of line." end on applicationWillFinishLaunching_(aNotification) -- Insert code here to initialize your application before any files are opened -- run the request here for demonstration purposes pgURL_(myURL, myBody, getMethod) end applicationWillFinishLaunching_ on applicationShouldTerminate_(sender) -- Insert code here to do any housekeeping before your application quits return current application's NSTerminateNow end applicationShouldTerminate_ end script
ASObjC: NSScreen – get screen resolution
property myScreen : class "NSScreen" of current application
set screen to item 1 of myScreen's screens
set res to screen's frame as list
set {screenw, screenh} to {|width| of |size| of item 1 of res, height of |size| of item 1 of res}