I've taken a very simple sample applet I found on the forums here, using software rendering, and running it with JPCT and I am getting periodic serious flickering. The clear color is black, the object is green, and everything appears as it should for about 5 seconds, then it flickers between black and white for about 1 second and returns about 5 seconds later - ad infinitum. BTW, I am using Applet, not JApplet, as I need to build something that runs on 1.1.
The code I'm using is posted below:
import java.applet.*;
import java.awt.Graphics;
import com.threed.jpct.FrameBuffer;
import com.threed.jpct.IRenderer;
import com.threed.jpct.Object3D;
import com.threed.jpct.Primitives;
import com.threed.jpct.World;
public class TestApplet extends Applet implements Runnable
{
private static final long serialVersionUID = 1L;
private Object3D box;
private FrameBuffer buffer = null;
private World world = null;
private boolean alive = true;
private boolean initialized = false;
// Initialize all components of the applet
public void init()
{
world = new World();
World.setDefaultThread( Thread.currentThread() );
world.setAmbientLight( 0, 255, 0 );
buffer = new FrameBuffer( getWidth(), getHeight(), FrameBuffer.SAMPLINGMODE_NORMAL );
buffer.enableRenderer( IRenderer.RENDERER_SOFTWARE );
box = Primitives.getBox( 12.0f, 2.0f );
box.setName( "MySphere" );
box.build();
world.addObject( box );
world.getCamera().setPosition( 50, -50, -50 );
world.getCamera().lookAt( box.getTransformedCenter() );
initialized = true;
new Thread( this ).start();
}
// Main Game Loop:
public void run()
{
while( alive )
{
box.rotateY( 0.01f );
this.repaint();
try
{
Thread.sleep( 10 );
}
catch( Exception e )
{}
}
}
// Draw the scene:
public void paint( Graphics g )
{
if( !initialized )
return;
buffer.clear();
// render the world onto the buffer:
world.renderScene( buffer );
world.draw( buffer );
buffer.update();
buffer.display( g, 0, 0 );
}
// End the main game loop:
public void destroy()
{
alive = false;
}
}
I'm not experienced with applets, so I'm probably doing something terrifically noobish (and if so, I apologize), but should I be manually double buffering something? Or, am I using something obviously wrong?
Very much appreciated - btw, I'm testing on Vista SP2, with 1.6 JDK (configured to use 1.3 but emit 1.1 code) - Eclipse IDE
Try to override update(Graphics g) and let it call paint(g).
That was just absolutely insightful and helpful m8, cheers ;D. I guess I'll need to start looking into Applets more.