Java Reference
In-Depth Information
var isStatic = true;
init{
startingX = control.translateX;
startingY = control.translateY;
startingRot = control.rotate;
var box = new net.phys2d.raw.shapes.Box(control.width, control.height);
body = new Body(box, 10);
body.setRestitution(.9);
staticBody = new StaticBody(box);
staticBody.setPosition(control.translateX + control.width/2.0, control.translateY +
control.height/2.0);
body.setPosition(control.translateX + control.width/2.0, control.translateY +
control.height/2.0);
}
function update(){
if (not isStatic){
control.translateX = body.getPosition().getX() - control.width/2.0;
control.translateY = body.getPosition().getY() - control.height/2.0;
control.rotate = Math.toDegrees(body.getRotation());
}
}
}
Listing 6-10 shows a function named
doReplace
and a helper class called
ControlHandler
. The
function
doReplace
follows the same pattern as the
doReplace
functions in the chapter on transitions. It
takes two
Nodes
, in this case
Groups
, and a function named
doAfter
that is called when the transition is
over.
The function
doReplace
looks through the contents of the
Group
nodeToReplace
and finds all children
that are of type
Control
. For each
Control
node found, a
ControlHandler
is created and added to the
Sequence
handlers
and to the
Sequence
inactives
. The idea here is that
handlers
will keep a reference to
all
Controls
and
Bodies
in the animation. The
Sequence
inactives
keeps track of which
Controls
have
not yet started to fall. The
staticBody
of each
handler
is also added to the
world
. If you recall a
World
object is used to do the actual physics calculations, the
staticBody
is added at his point so that so that
the first few falling bodies will have something to bounce off of.
The
Sequence
inactives
is then shuffled so that the
Controls
will start to fall in a random order. In
my testing I liked the randomness, but this line can easily be commented out to create a reproducible
animation.
The
Timeline
addBodies
is created and started; this
Timeline
pops
ControlHandlers
from the
inactives
and activates them. The process of activating a
ControlHandler
means that it should swap out
its
StaticBody
for a
Body
. This makes the
Control
start to fall. The
Timeline
addBodies
activates a new
ControlHandler
every .5 seconds, so that all of the
Controls
don't just start dropping all at once.
The
Timeline
worldUpdater
is used to advance the location of each
Body
. This is basically identical to
the
Timeline
used in this chapter to explore physics. The
world
object is stepped and each handler is
updated. The
update
function takes the location and rotation of the
body
and applies it to the location
and rotation of the
Control
Node
.
Two more
Timelines
are created to help manage when the transition is done. The
Timeline
checkCleanup
checks every second to see if all of the
Controls
have fallen below the original bottom