Hallo Leute.
Ich greif mal wieder ein älteres thema auf, aber es interessiert mich jetzt einfach mal:
Hier ist der Code von einem kleinen „Story Viewer“ oder sowas, hab ich halt einfach gemacht, weil ein freund sehen wollte wies aussieht
naja, der sleep() wert ist hier ja fixed: immer 10. Nun gibt es ja verschiedene varianten, wie man das ganze am besten anpasst, an die dauer des durchlaufs:
Zwei davon - entweder man berechnet wie lange man schläft, oder aber man schläft immer gleichlang und berechnet wie weit man was bewegt…
was haltet ihr für „besser“ bzw geeigneter?
Vielen Dank.
hier der code:
code
[spoiler]
package de.skysoldier.tests;
import java.awt.AlphaComposite;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class ComicTest extends JPanel implements Runnable {
private JFrame f;
private Thread t;
private boolean running;
private BufferedImage woman;
private double x, y, x2, y2;
private Font font;
private float fl;
public ComicTest(){
f = new JFrame("Comic Test");
f.setSize(600, 400);
f.setLocationRelativeTo(null);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setLayout(new BorderLayout());
f.add(this);
init();
}
public void init(){
woman = getImage("frau.png");
font = new Font("Borealis", 0, 20);
t = new Thread(this);
running = true;
f.setVisible(true);
t.start();
}
public void paintComponent(Graphics g){
super.paintComponent(g);
g.setColor(Color.BLACK);
g.fillRect(0, 0, getWidth(), getHeight());
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, fl));
g.drawImage(woman, (int) x, (int) y, null);
g.setColor(Color.WHITE);
g.setFont(font);
g.drawString("Und da kam sie aus den Tiefen des Warps...", (int) x2, (int) y2);
}
public BufferedImage getImage(String name){
try{
return ImageIO.read(getClass().getClassLoader().getResource(name));
}
catch(Exception e){
e.printStackTrace();
return null;
}
}
public void run(){
int t = 0;
while(running){
if(t < 1000){if(fl < 0.99){fl+=0.001;}}
if(t > 1000){if(fl>0){fl-=0.001;}}
x-=0.1;
y-=0.1;
x2+=0.08;
y2+=0.08;
t++;
repaint();
System.out.println(t);
try{Thread.sleep(10);}catch(Exception e){}
}
}
public static void main(String[] args) {
new ComicTest();
}
}
[/spoiler]
*** Edit ***
ja, am ende fliegen exceptions, aber das ist ja jetzt erstmal egal