Heyho,
hab mir als Ziel gesetzt, ein png-Glücksrad auf Knopfdruck animiert zu drehen und random zu stoppen.
Bin relativ unerfahren, und hab mir aus dem Internet alles zusammengereimt was ging.
Der Code:
("pinger" ist ein kleines Dreieck, das zeigen soll in welchem Feld das Rad steht)
Das Problem: Das Rad dreht sich nicht. Wenn ich in der paintComponent eine lokale Variable drinnen lasse (hier i), und in Math.toRadians i++ mach, dann dreht sich das animiert.
Aber ich bekomm das nicht hin, es auf Befehl random weit drehen zu lassen und das Feld unten in der Mitte auszulesen!
Mein Rad hat 54 Felder, also pro Feld wären 6,66 Grad zu drehen. Heißt: Ich hätte die random Zahl gerundet, und dem Programm gesagt dass nach z.B. 30 Grad drehen rot unten ist. Nur so als Beispiel. Geht das einfacher?
Und wie kann ich das Rad jetzt richtig drehen lassen?
MFG
hab mir als Ziel gesetzt, ein png-Glücksrad auf Knopfdruck animiert zu drehen und random zu stoppen.
Bin relativ unerfahren, und hab mir aus dem Internet alles zusammengereimt was ging.
Der Code:
Java:
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JLabel;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.awt.Color;
import java.io.File;
import java.io.IOException;
import java.util.Random;
import javax.swing.JButton;
public class ROULETTE extends JFrame
{
/**
*
*/
private static final long serialVersionUID = 1L;
private final int farbe = 2500140;
private JLabel bg;
private JLabel scheibe, ping;
private static int gerollt;
private int mpk;
private Random roll;
private static int multi;
private JButton button;
public static void main(String[] args)
{
new ROULETTE();
Random roll = new Random();
gerollt = roll.nextInt(101);
System.out.println(gerollt);
}
public ROULETTE()
{
super("Roulette");
setSize(1280, 720);
setLayout(null);
setResizable(false);
setLocationRelativeTo(null);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
getContentPane().setBackground(Color.darkGray);
scheibe = new wheel();
scheibe.setBounds(10,10,5000,5000);
add(scheibe);
ping = new pinger();
ping.setBounds(10,10,5000,5000);
add(ping);
bg = new paintComponents();
add(bg);
button = new JButton("Spielen");
button.setBounds(465, 500, 35, 10); //x, y, breite, hoehe
add(button);
repaint();
}
public class paintComponents extends JLabel
{
/**
*
*/
private static final long serialVersionUID = 1L;
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.setColor(new Color(farbe));
g.fillRect(0, 0, 1280, 720);
}
}
public class wheel extends JLabel
{
/**
*
*/
private static final long serialVersionUID = 1L;
public void paintComponent(Graphics g)
{
int i = 0;
do
{
i = i +1;
BufferedImage rad = LoadImage("neu2.png");
Graphics2D g2d = (Graphics2D) g;
AffineTransform at = AffineTransform.getTranslateInstance(430,10);
at.rotate(Math.toRadians(i), rad.getWidth()/2, rad.getHeight()/2);
g2d.drawImage(rad, at, null);
repaint();
}
while (i < gerollt);
}
BufferedImage LoadImage(String FileName)
{
BufferedImage img = null;
try{
img = ImageIO.read(new File(FileName));
}catch(IOException e){
}
return img;
}
}
public class pinger extends JLabel
{
/**
*
*/
private static final long serialVersionUID = 1L;
public void paintComponent(Graphics g)
{
BufferedImage anzeige = LoadImage("anzeige.png");
Graphics2D g2d = (Graphics2D) g;
g2d.drawImage(anzeige, 0,0 , null);
repaint();
}
BufferedImage LoadImage(String FileName)
{
BufferedImage img = null;
try{
img = ImageIO.read(new File(FileName));
}catch(IOException e){
}
return img;
}
}
}
("pinger" ist ein kleines Dreieck, das zeigen soll in welchem Feld das Rad steht)
Das Problem: Das Rad dreht sich nicht. Wenn ich in der paintComponent eine lokale Variable drinnen lasse (hier i), und in Math.toRadians i++ mach, dann dreht sich das animiert.
Aber ich bekomm das nicht hin, es auf Befehl random weit drehen zu lassen und das Feld unten in der Mitte auszulesen!
Mein Rad hat 54 Felder, also pro Feld wären 6,66 Grad zu drehen. Heißt: Ich hätte die random Zahl gerundet, und dem Programm gesagt dass nach z.B. 30 Grad drehen rot unten ist. Nur so als Beispiel. Geht das einfacher?
Und wie kann ich das Rad jetzt richtig drehen lassen?
MFG
Zuletzt bearbeitet: