package com.codebynumber.java3d.breakout; import java.util.Random; import javax.media.j3d.Appearance; import javax.media.j3d.ColoringAttributes; import javax.media.j3d.Group; import javax.media.j3d.Material; import javax.media.j3d.Transform3D; import javax.media.j3d.TransformGroup; import javax.vecmath.Color3f; import javax.vecmath.Vector3d; public class Bricks extends TransformGroup { private float brickdepth = 0.5f; private float spacer = 0.5f; int numbricks; public Bricks(int numRows, Ball b) { super(); for (int i = 0; i < numRows; i++) { float z = -((float) Breakout.length - (brickdepth + spacer) * i); addChild(createBlock(b, z)); } } /** * * @param b * @param z * @return */ private Group createBlock(Ball b, float z) { TransformGroup all = new TransformGroup(); for (float x = - (float)Breakout.width/2 + 0.1f; x < (float)Breakout.width/2-0.1; x+=1.1) { Transform3D t3d = new Transform3D(); t3d.setTranslation(new Vector3d(x, 0.0, z)); TransformGroup tg = new TransformGroup(t3d); Appearance app = new Appearance(); Random rand = new Random(); ColoringAttributes ca = new ColoringAttributes(new Color3f(rand.nextFloat()-0.2f, rand.nextFloat()-0.2f, rand.nextFloat()-0.2f), ColoringAttributes.NICEST); app.setColoringAttributes(ca); Box box = new Box(1.0, brickdepth, brickdepth); box.setAppearance(app); box.setTransform(t3d); Vector3d vect = new Vector3d(1.0, 0.0, -1.0); Collision bump = new Collision(b, box, vect); bump.setSchedulingBounds(Breakout.bounds); tg.addChild(bump); tg.addChild(box); all.addChild(tg); } return all; } }