Reseting the ball after changes
import java.awt.*;
I have done the menu, but I have problem with reseting of the ball,
everytime I change the size or the speed of the ball, it kind of
change the way the sounds works...I kinda figure out that I need to
reset it everytime I change the size or the speed of the ball....does
anyone have an idea how i could go about it
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Formatter;
import javax.swing.*;
import java.io.File;
import javax.sound.sampled.*;
import helpers.GlobalProperties;
import java.awt.Color;
import java.util.Random;
//private Color ballColor = null;
public class AnimationSound extends JPanel {
private static final int BOX_WIDTH = 640;
private static final int BOX_HEIGHT = 480;
private static final int RATE = 30;
private File soundFile = new File("resources/snd16.wav");
private File soundFile2 = new File("resources/soundwrong.wav");
private Clip clip,clip2;
private float ballRadius = 50;
private float ballX = 250 - ballRadius;
private float ballY = 250 - ballRadius;
private float ballSpeedX = 6;
private boolean randomColorMode = false;
private Color ballColor = null, numberColor = null;
private Color backgroundColor;
JMenuBar menubar = new JMenuBar();
JMenu menu = new JMenu("menu");
public AnimationSound() {
JMenu speed = new JMenu("speed");
JMenu size = new JMenu("Size");
menu.add(speed);
menu.add(size);
JMenuItem big = new JMenuItem("Big");
JMenuItem small = new JMenuItem("small");
JMenuItem middium = new JMenuItem("Medium");
JMenuItem fast = new JMenuItem("Fast");
JMenuItem normal = new JMenuItem("Normal");
JMenuItem slow = new JMenuItem("Slow");
speed.add(fast);
speed.add(normal);
speed.add(slow);
size.add(big);
size.add(small);
size.add(middium);
menubar.add(menu);
this.setPreferredSize(new Dimension(BOX_WIDTH, BOX_HEIGHT));
// Prepare a Clip
try {
AudioInputStream audioInputStream =
AudioSystem.getAudioInputStream(soundFile);
AudioInputStream audioInputStream2 =
AudioSystem.getAudioInputStream(soundFile2);
AudioFormat audioFormat = audioInputStream.getFormat();
AudioFormat audioFormat2 = audioInputStream2.getFormat();
DataLine.Info dataLineInfo =
new DataLine.Info(Clip.class, audioFormat);
DataLine.Info dataLineInfo2 =
new DataLine.Info(Clip.class, audioFormat2);
clip = (Clip) AudioSystem.getLine(dataLineInfo);
clip2 = (Clip) AudioSystem.getLine(dataLineInfo2);
clip.open(audioInputStream);
clip2.open(audioInputStream2);
} catch (Exception e) {
e.printStackTrace(System.err);
}
Timer timer = new Timer(1000 / RATE, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
ballX += ballSpeedX;
if (ballX - ballRadius < 0) {
ballSpeedX = -ballSpeedX;
ballX = ballRadius;
playSound();
//getParameters();
} else if (ballX + ballRadius > BOX_WIDTH) {
ballSpeedX = -ballSpeedX;
ballX = BOX_WIDTH - ballRadius;
playSound2();
//getParameters();
}
repaint();
}
});
timer.start();
fast.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
ballSpeedX = 10;
}
});
slow.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
ballSpeedX = 4;
//ballSpeedX = ballSpeedX + 3;
//System.exit(0);
}
});
normal.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
ballSpeedX = 6;
}
});
big.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
/*if(Selection.equals("Big")){
*/
ballRadius = 50;
}
});
small.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
/*if(Selection.equals("Big")){
*/
ballRadius = 10;
}
});
middium.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
/*if(Selection.equals("Big")){
*/
ballRadius = 30;
}
});
}
// Play the sound in a separate thread.
private void playSound() {
Runnable soundPlayer = new Runnable() {
@Override
public void run() {
try {
clip.setMicrosecondPosition(0);
clip.start();
} catch (Exception e) {
e.printStackTrace();
}
}
};
new Thread(soundPlayer).start();
}
private void playSound2() {
Runnable soundPlayer2 = new Runnable() {
@Override
public void run() {
try {
clip2.setMicrosecondPosition(0);
clip2.start();
} catch (Exception e) {
e.printStackTrace();
}
}
};
new Thread(soundPlayer2).start();
}
private void getColors() {
//if(randomColorMode){
// this color is used to represent the
// random color mode
Random ran = new Random();
int ranInt = ran.nextInt(4);
switch(ranInt){
case 0: ballColor = Color.white;break;
case 1: ballColor = Color.blue;break;
case 2: ballColor = Color.yellow;break;
default: ballColor = Color.red;break;
//}
}
if(ballColor.equals(Color.white)){
ballColor = Color.white;
backgroundColor = Color.black;
}
else if(ballColor.equals(Color.blue)){
ballColor = Color.blue;
backgroundColor = Color.black;
}
else if(ballColor.equals(Color.yellow)){
ballColor = Color.yellow;
backgroundColor = Color.black;
}
else{
ballColor = Color.red;
backgroundColor = Color.black;
}
}
private void getParameters() {
// if(ballColor.equals(Color.black))
// randomColorMode = true;
//else
//randomColorMode = false;
getColors();
}
@Override
public void paintComponent(Graphics g) {
getParameters();
super.paintComponent(g); // Paint background
//getColors();
g.setColor(Color.BLACK);
g.fillRect(0, 0, BOX_WIDTH, BOX_HEIGHT);
g.setColor(Color.GREEN);
//this.getParameters();
g.fillOval(
(int) (ballX - ballRadius),
(int) (ballY - ballRadius),
(int) (2 * ballRadius), (int) (2 * ballRadius));
g.setColor(Color.WHITE);
g.setFont(new Font("Dialog", Font.PLAIN, 12));
StringBuilder sb = new StringBuilder();
Formatter formatter = new Formatter(sb);
formatter.format(
"Ball @(%3.0f) Speed=(%2.0f)", ballX, ballSpeedX);
g.drawString(sb.toString(), 20, 30);
}
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
AnimationSound Ani = new AnimationSound();
JFrame frame = new JFrame("A Moving Ball");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(new AnimationSound());
frame.add(Ani);
frame.setJMenuBar(Ani.menubar);
frame.pack();
frame.setVisible(true);
}
});
}
}