package lecture15; import com.jme3.app.SimpleApplication; import com.jme3.light.DirectionalLight; import com.jme3.material.Material; import com.jme3.math.ColorRGBA; import com.jme3.math.Vector3f; import com.jme3.scene.Geometry; import com.jme3.scene.shape.Sphere; public class HelloAiming2 extends SimpleApplication { Geometry ag; Geometry bg; Geometry cg; Vector3f velocityA = new Vector3f(0, 0, 0); Vector3f accelerationA = new Vector3f(0, 0, 0); Vector3f velocityB = new Vector3f(0, 0, 0); Vector3f accelerationB = new Vector3f(0, 0, 0); Vector3f gravity = new Vector3f(0, -9.8f, 0); final float b = 0.9f; final float m = 1f; private Geometry makeBall(ColorRGBA color) { Material mat = new Material(assetManager, "Common/MatDefs/Light/Lighting.j3md"); mat.setBoolean("UseMaterialColors", true); mat.setColor("Ambient", color); mat.setColor("Diffuse", color); Sphere s = new Sphere(60, 60, 1.5f); Geometry g = new Geometry("Sphere", s); g.setMaterial(mat); return g; } public void simpleInitApp() { DirectionalLight sun = new DirectionalLight(); sun.setDirection(new Vector3f(1, 0, -2).normalize()); sun.setColor(ColorRGBA.White); rootNode.addLight(sun); ag = makeBall(ColorRGBA.Blue); rootNode.attachChild(ag); bg = makeBall(ColorRGBA.Red); rootNode.attachChild(bg); cam.setLocation(new Vector3f(0, 0, 60)); reset(); } protected void reset() { velocityA = new Vector3f(10, 10, 0); ag.setLocalTranslation(-8, 0, 0); velocityB = new Vector3f(10, 10, 0); bg.setLocalTranslation(-8, 0, 0); } @Override public void simpleUpdate(float tpf) { if (ag.getLocalTranslation().getY() < -15f) { reset(); } accelerationA = gravity; velocityA = velocityA.add(accelerationA.mult(tpf)); ag.move(velocityA.mult(tpf)); Vector3f force = velocityB.mult(-b); accelerationB = gravity.add(force.divide(m)); velocityB = velocityB.add(accelerationB.mult(tpf)); bg.move(velocityB.mult(tpf)); } public static void main(String[] args) { HelloAiming2 app = new HelloAiming2(); app.start(); } }