I have a formlua that works out the coordinates for a projectile shot. This forms an arc. How can I make it travel around this curve (i.e. not in a straight line like PostionInterpolator?)
thanks
I have a formlua that works out the coordinates for a projectile shot. This forms an arc. How can I make it travel around this curve (i.e. not in a straight line like PostionInterpolator?)
thanks
make your own interpolator!
here is some draft i just wrote:
import javax.media.j3d.*;
import javax.vecmath.*;
class ProjectileBehavior extends Behavior
{
public static final float g = 9.81;
private Vector3f startPos;
private Vector3f startVelocity;
private TransformGroup bodyTG;
private Transform3D transform = new Transform3D();
private Vector3f pos = new Vector3f();
private WakeupOnElapsedFrames wakeup = new WakeupOnElapsedFrames(0);
private long t;
public BallMovingBehavior(TransformGroup bodyTG, Vector3f startPos, Vector3f startVelocity)
{
super();
this.bodyTG = bodyTG;
this.startPos = startPos;
this.startVelocity = startVelocity;
}
public void initialize()
{
t = System.currentTimeMillis();
}
public void setEnable(boolean state)
{
if (state)
t = System.currentTimeMillis();
}
public void processStimulus(java.util.Enumeration criteria)
{
pos.x = startPos.x + startVelocity.x*t/1000;
pos.y = startPos.y + startVelocity.y*t/1000;
pos.z = startPos.z + startVelocity.z*t/1000 - g*t^2/(2*1000^2);
transform.set(pos);
bodyTG.set(transform);
this.wakeupOn(wakeup);
// Repeat this every frame
this.wakeupOn(wakeup);
}
}
considering gravity downards the z axis.
And all this is of course very approximative…
It could also be done by extending an interpolator and computing the pos based on the alpha value. The resuting effect would be quite different, in this example the movement depends of “absolute” time, with an alpha object, it depends on “relative time” of the alpha object.
cheers.
public BallMovingBehavior(TransformGroup bodyTG, Vector3f startPos, Vector3f startVelocity)
{
super();
this.bodyTG = bodyTG;
this.startPos = startPos;
this.startVelocity = startVelocity;
}
Do you really need to call super() here. Doesn’t that just call a Behavior constructor which is empty?