maarten54321
Gebruiker
- Lid geworden
- 7 nov 2010
- Berichten
- 121
Hallo allemaal! 
Ik ben bezig aan mijn eerste Java game die al bijna af is, maar ik zit vast;
Het probleem ligt hem aan het "balkje". Er wordt alleen gecontroleerd als de muis bewogen is. Daardoor kan hij niet altijd controleren of het balletje wel op het balkje terecht gekomen is. Jammer kan in Java een class maar een ding erven... Dus eigenlijk wordt er alleen gecontroleerd of het balletje tegen het balkje komt als de muis tegelijkertijd beweegt. Hoe kan ik dit oplossen?
Alvast bedankt!

Ik ben bezig aan mijn eerste Java game die al bijna af is, maar ik zit vast;
Het probleem ligt hem aan het "balkje". Er wordt alleen gecontroleerd als de muis bewogen is. Daardoor kan hij niet altijd controleren of het balletje wel op het balkje terecht gekomen is. Jammer kan in Java een class maar een ding erven... Dus eigenlijk wordt er alleen gecontroleerd of het balletje tegen het balkje komt als de muis tegelijkertijd beweegt. Hoe kan ik dit oplossen?
Alvast bedankt!

Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Pong extends JFrame
implements MouseMotionListener {
private JButton button;
private JPanel panel;
private boolean mouse = true;
private Ball ball;
private int mouseX;
public static void main(String[] args) {
Pong frame = new Pong();
frame.setSize(476, 248);
frame.createGUI();
frame.show();
}
private void createGUI() {
setDefaultCloseOperation(EXIT_ON_CLOSE);
Container window = getContentPane();
window.setLayout(new FlowLayout());
panel = new JPanel();
panel.setPreferredSize(new Dimension(450, 200));
panel.setBackground(Color.white);
panel.addMouseMotionListener(this);
window.add(panel);
}
public void mouseDragged(MouseEvent e) {
}
public void lose() {
ball.stop();
JOptionPane.showMessageDialog(null, "You hava losed!");
System.exit(0);
}
public void draw() {
Graphics paper = panel.getGraphics();
paper.setColor(Color.white);
paper.fillRect(0, 190, 450, 10);
paper.setColor(Color.red);
paper.fillRect(mouseX, 190, 35, 10);
}
public void control() {
int ballX = ball.getX();
int ballY = ball.getY();
final int width = 35;
//Handles only x
if ((ballY == 180) && (mouseX - 16 < ballX) && (mouseX + 16 > ballX)) {
}
else {
lose();
}
}
public void mouseMoved(MouseEvent e) {
mouseX = e.getX();
if (mouse) {
ball = new Ball(panel);
ball.start();
mouse = false;
}
draw();
control();
}
}
class Ball extends Thread {
private Graphics graphics;
private int x = 0;
private int y = 0;
private boolean running = true;
private int xChange = 1;
private int yChange = 1;
private int diameter = 10;
private Color color = Color.blue;
public Ball(JPanel panel) {
graphics = panel.getGraphics();
}
public void changeColor(Color c) {
color = c;
}
public Color getColor() {
return color;
}
public void changeDiameter(int d) {
diameter = d;
}
public int getDiameter() {
return diameter;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
public void run() {
while (running) {
delete();
move();
bounce();
draw();
delay();
}
}
private void delete() {
graphics.setColor(Color.white);
graphics.fillOval(x,y,diameter,diameter);
}
private void move() {
x = x + xChange;
y = y + yChange;
}
private void bounce() {
//Handles x
if ((x == 0) || (x == 440)) {
xChange = -xChange;
}
//Handles y
if ((y == 0) || (y==180)) {
yChange = -yChange;
}
}
private void draw() {
graphics.setColor(color);
graphics.fillOval(x,y,diameter,diameter);
}
private void delay() {
try {
Thread.sleep(8);
}
catch (InterruptedException e) {
}
}
}
Laatst bewerkt: