Types of Boids

The public and protected methods and data of the Boid class and its PredatorBoid and PreyBoid subclasses are shown in Figure 22-6.

The Boid class and subclasses

Figure 22-6. The Boid class and subclasses

Boid represents a boid using a BranchGroup, TransformGroup, and BoidShape (a Shape3D node). The TransformGroup moves the boid about in the scene, and the BranchGroup permits the boid to be removed from the scene (e.g., after being eaten). Only a BranchGroup can be detached from a scene graph. The subgraph is built in the Boid() constructor:

    private TransformGroup boidTG = new TransformGroup();  // global
   
    public Boid(...)
    { // other initialization code, and then ...
   
      // set TG capabilities so the boid can be moved
      boidTG.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
      boidTG.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
      addChild(boidTG);  // add TG to Boid BranchGroup
   
      // add the boid shape to the TG
      boidTG.addChild( new BoidShape(boidColour) );
    } // end of Boid()

Boid Movement

The most important attributes for a boid are its current position and velocity. These are set to random values (within a certain range) in the Boid constructor:

    // globals
    protected Vector3f boidPos = new Vector3f();
    protected Vector3f boidVel = new Vector3f();
   
    // code in the Boid constructor
    boidPos.set(randPosn(),(float)(Math.random()*6.0), randPosn());
    boidVel.set( randVel(), randVel(), randVel());

The moveBoid() method ...

Get Killer Game Programming in Java now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.