Hallo,
Ich habe mir gestern mal die Appletprogrammierung unter Java angeschaut. Scheint mir ja im Gegensatz zu den anderen Sachen, die ich gewöhnt bin (c++ mit sdl/allegro), sehr einfach zu programmieren zu sein, allerdings tritt folgendes Problem auf: Das Applet flackert nicht oder so, also am Doublebuffering kann es nicht liegen, aber es wird halt stetig ruckelnd ausgeführt, außer wenn ich den Mauscursor im Appletbereich bewege. Dann läuft es schön flüssig.
Ich habe schon versucht, ob es aufhört, wenn ich die Thread-Priorität auf MAX setze, aber das bringt auch nichts.
Wisst ihr woran das liegen könnte?
Danke
PS: Vielleicht benutze ich auch nur eine viel zu alte Methode, das Tutorial ist schon 3-4 Jährchen ohne Update am Leben.
Hier mal der Code:
Und die .html:
Ich habe mir gestern mal die Appletprogrammierung unter Java angeschaut. Scheint mir ja im Gegensatz zu den anderen Sachen, die ich gewöhnt bin (c++ mit sdl/allegro), sehr einfach zu programmieren zu sein, allerdings tritt folgendes Problem auf: Das Applet flackert nicht oder so, also am Doublebuffering kann es nicht liegen, aber es wird halt stetig ruckelnd ausgeführt, außer wenn ich den Mauscursor im Appletbereich bewege. Dann läuft es schön flüssig.
Ich habe schon versucht, ob es aufhört, wenn ich die Thread-Priorität auf MAX setze, aber das bringt auch nichts.
Wisst ihr woran das liegen könnte?
Danke
PS: Vielleicht benutze ich auch nur eine viel zu alte Methode, das Tutorial ist schon 3-4 Jährchen ohne Update am Leben.
Hier mal der Code:
Code:
import java.applet.*;
import java.awt.*;
public class SampleThread extends Applet implements Runnable {
//backbuffer
private Image dbImage;
private Graphics dbg;
static CBall ball;
private int speed;
//INIT
public void init() {
ball = new CBall();
}
//START
public void start() {
//make new thread
Thread th = new Thread(this);
//start thread
th.start();
}
//STOP
public void stop() {
}
//DESTROY
public void destroy() {
}
//GAME LOOP
public void run() {
while(true) {
repaint();
ball.update();
try {
Thread.sleep(20);
}
catch(InterruptedException ex) {}
}
}
//PAINT
public void paint(Graphics g) {
ball.draw(dbg);
}
//UPDATE
public void update(Graphics g) {
//initialize doublebuffer
if(dbImage==null) {
dbImage=createImage(this.getSize().width, this.getSize().height);
dbg=dbImage.getGraphics();
}
//clear background
dbg.setColor(getBackground());
dbg.fillRect(0,0,this.getSize().width, this.getSize().height);
//draw foreground
dbg.setColor(getForeground());
paint(dbg);
//blit backpuffer to screen
g.drawImage(dbImage, 0, 0, this);
}
//CLASSES
//CBall
public class CBall {
int x_pos, y_pos, radius;
CBall() {
x_pos = 10;
y_pos = 100;
radius = 20;
}
public void update() {
x_pos++;
}
public void draw(Graphics g) {
g.setColor(Color.red);
g.fillOval(x_pos-radius, y_pos-radius, 2*radius, 2*radius);
}
}
}
Und die .html:
<HTML>
<HEAD> <TITLE>Hello World Applet</TITLE> </HEAD>
<BODY>
<CENTER>
<H1>Hello World Applet</H1>
<APPLET CODE="SampleThread.class" WIDTH=640 HEIGHT=480></APPLET>
</BODY>
</HTML>