D
danthe
Gast
Hallo,
Wir haben aktuell in der Schule (10.Klasse) den Auftrag, ein Ping Pong zu basteln. Mein Programm funktioniert soweit ganz gut, allerdings komme und komme ich bei der Erstellung und Verwendung eines Timers nicht weiter.
Das Problem ist folgendes:
Ich habe eine Methode ball(), die durch das Drücken des Start-Knopfes aufgerufen wird. In dieser Methode gibt es innerhalb einer immer erfüllten While-Schleife 4 einzelne Methoden für den Ball, der sich immer diagonal in 4 verschiedene Richtungen bewegt, die je nach festgelegter Richtung aufgerufen werden. Da dieser Ball nicht rumflitzen soll, möchte ich das natürlich timen. Im Moment, nur um die Funktion zu überprüfen, muss ich dazu Thread.sleep benutzen, was natürlich logischerweise alles bremst und ich so die Knöpfe zum Bewegen der Schläger niciht benutzen kann (außerdem muss ich das Programm mit dem Task-Manager beenden). Ich versuche jetzt also einen Timer zu machen, der in diesen Richtungsmethoden anfängt und nach dem Zeichnen des Balles aufhört, damit dieser Abschnitt 50 Millisekunden dauert. Wenn ich aber den Timer aus javax.swing.timer benutze, muss ich aus diesem void irgendwie ein Actionevent machen, das nicht durch einen Knopf, sondern durch die ball()-Methode aktiviert werden kann (quasi wie eine normale Methode auch). Könnt ihr mir weiterhelfen? Oder kennt ihr vielleicht sogar eine bessere Möglichkeit?
Code:
Würde mich über eine anschauliche Erklärung sehr freuen, da ich noch nicht sehr erfahren bin und wir im Unterricht dem Grund- bzw. Leistungskurs nicht vorgreifen dürfen.
MfG,
danthe
Wir haben aktuell in der Schule (10.Klasse) den Auftrag, ein Ping Pong zu basteln. Mein Programm funktioniert soweit ganz gut, allerdings komme und komme ich bei der Erstellung und Verwendung eines Timers nicht weiter.
Das Problem ist folgendes:
Ich habe eine Methode ball(), die durch das Drücken des Start-Knopfes aufgerufen wird. In dieser Methode gibt es innerhalb einer immer erfüllten While-Schleife 4 einzelne Methoden für den Ball, der sich immer diagonal in 4 verschiedene Richtungen bewegt, die je nach festgelegter Richtung aufgerufen werden. Da dieser Ball nicht rumflitzen soll, möchte ich das natürlich timen. Im Moment, nur um die Funktion zu überprüfen, muss ich dazu Thread.sleep benutzen, was natürlich logischerweise alles bremst und ich so die Knöpfe zum Bewegen der Schläger niciht benutzen kann (außerdem muss ich das Programm mit dem Task-Manager beenden). Ich versuche jetzt also einen Timer zu machen, der in diesen Richtungsmethoden anfängt und nach dem Zeichnen des Balles aufhört, damit dieser Abschnitt 50 Millisekunden dauert. Wenn ich aber den Timer aus javax.swing.timer benutze, muss ich aus diesem void irgendwie ein Actionevent machen, das nicht durch einen Knopf, sondern durch die ball()-Methode aktiviert werden kann (quasi wie eine normale Methode auch). Könnt ihr mir weiterhelfen? Oder kennt ihr vielleicht sogar eine bessere Möglichkeit?
Code:
Java:
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import javax.swing.Timer;
public class pingpong extends Applet {
private Button button1 = new Button();
private Button button2 = new Button();
private Button button3 = new Button();
private Button button4 = new Button();
Graphics stift;
boolean anfang=false;
int y1=134;
int y2=134;
int y1plus=y1+50;
int y2plus=y2+50;
int xkreis=200;
int ykreis=176;
int richtung=36;
int punkt1=0;
int punkt2=0;
boolean stop=false;
private Button button5 = new Button();
private TextArea textArea1 = new TextArea("", 1, 1, TextArea.SCROLLBARS_NONE);
public void init() {
setLayout(null);
stift=getGraphics();
setBounds(0, 0, 500, 700);
button1.setBounds(432, 384, 43, 73);
button1.setLabel("UP");
button1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
button1_ActionPerformed(evt);
}
});
add(button1);
button2.setBounds(432, 464, 43, 73);
button2.setLabel("DOWN");
button2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
button2_ActionPerformed(evt);
}
});
add(button2);
button3.setBounds(16, 384, 43, 65);
button3.setLabel("UP");
button3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
button3_ActionPerformed(evt);
}
});
add(button3);
button4.setBounds(16, 464, 43, 81);
button4.setLabel("DOWN");
button4.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
button4_ActionPerformed(evt);
}
});
add(button4);
button5.setBounds(208, 456, 75, 25);
button5.setLabel("Starten!");
button5.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
button5_ActionPerformed(evt);
}
});
add(button5);
textArea1.setBounds(144, 528, 185, 89);
textArea1.setText("");
add(textArea1);
}
void rechtsunten(){
// time.start();
int y2spezial=y2-18;
if(xkreis>=500){
xkreis=200;
ykreis=176;
punkt1=punkt1+1;
textArea1.setText("Player1: "+punkt1+" Player2: "+punkt2+"");
// time.stop();
ball();
}
else if(xkreis>=457 && xkreis<=472 && ykreis>=y2spezial && ykreis<=y2plus){
richtung=69;
}
else if(ykreis>=300){
richtung=123;
}
else
{
richtung=36; // entspricht 3-6 Uhr
}
stift.fillOval(xkreis,ykreis,12,12);
try {
Thread.sleep ( 50 );
} catch ( InterruptedException e ) {} //soll durch Timer ersetzt werden, da bei sleep die Buttons nicht mehr gedrückt werden können
// time.stop();
stift.clearRect(xkreis,ykreis,12,12);
xkreis=xkreis+3;
ykreis=ykreis+3;
}
void linksunten(){
// time.start();
int y1spezial=y1-18;
if(xkreis<=0){
xkreis=200;
ykreis=176;
punkt2=punkt2+1;
textArea1.setText("Player1: "+punkt1+" Player2: "+punkt2+"");
// time.stop();
ball();
}
else if(xkreis>=10 && xkreis<=28 && ykreis>=y1spezial && ykreis<=y1plus){
richtung=36;
}
else if(ykreis>=300){
richtung=912;
}
else
{
richtung=69; // entspricht 6-9 Uhr
}
stift.fillOval(xkreis,ykreis,12,12);
try {
Thread.sleep ( 50 );
} catch ( InterruptedException e ) {} //soll durch Timer ersetzt werden, da bei sleep die Buttons nicht mehr gedrückt werden können
// time.stop();
stift.clearRect(xkreis,ykreis,12,12);
xkreis=xkreis-3;
ykreis=ykreis+3;
}
void rechtsoben(){
// time.start();
int y2spezial=y2-18;
if(xkreis>=500){
xkreis=200;
ykreis=176;
punkt1=punkt1+1;
textArea1.setText("Player1: "+punkt1+" Player2: "+punkt2+"");
// time.stop();
ball();
}
else if(xkreis>=457 && xkreis<=472 && ykreis>=y2spezial && ykreis<=y2plus){
richtung=912;
}
else if(ykreis<=0){
richtung=36;
}
else
{
richtung=123; // entspricht 12-3 Uhr
}
stift.fillOval(xkreis,ykreis,12,12);
try {
Thread.sleep ( 50 );
} catch ( InterruptedException e ) {} //soll durch Timer ersetzt werden, da bei sleep die Buttons nicht mehr gedrückt werden können
// time.stop();
stift.clearRect(xkreis,ykreis,12,12);
xkreis=xkreis+3;
ykreis=ykreis-3;
}
void linksoben(){
// time.start();
int y1spezial=y1-18;
if(xkreis<=0){
xkreis=200;
ykreis=176;
punkt2=punkt2+1;
textArea1.setText("Player1: "+punkt1+" Player2: "+punkt2+"");
// time.stop();
ball();
}
else if(xkreis>=10 && xkreis<=25 && ykreis>=y1spezial && ykreis<=y1plus){
richtung=123;
}
else if(ykreis<=0){
richtung=69;
}
else
{
richtung=912; // entspricht 9-12 Uhr
}
stift.fillOval(xkreis,ykreis,12,12);
try {
Thread.sleep ( 50 );
} catch ( InterruptedException e ) {} //soll durch Timer ersetzt werden, da bei sleep die Buttons nicht mehr gedrückt werden können
// time.stop();
stift.clearRect(xkreis,ykreis,12,12);
xkreis=xkreis-3;
ykreis=ykreis-3;
}
void ball()
{
while(true){
if(richtung==123){
rechtsoben();
}
else if(richtung==36){
rechtsunten();
}
else if(richtung==69){
linksunten();
}
else if(richtung==912){
linksoben();
}
}
}
void player1clear()
{
stift.clearRect(10,y1,15,50);
}
void player2clear()
{
stift.clearRect(475,y2,15,50);
}
void player2malen()
{
stift.fillRect(475,y2,15,50);
}
void player1malen()
{
stift.fillRect(10,y1,15,50);
}
public void button1_ActionPerformed(ActionEvent evt) {
if(y2>25)
{
player2clear();
y2=y2-25;
y2plus=y2+50;
player2malen();
}
}
public void button2_ActionPerformed(ActionEvent evt) {
if(y2<304)
{
player2clear();
y2=y2+25;
y2plus=y2+50;
player2malen();
}
}
public void button3_ActionPerformed(ActionEvent evt) {
if(y1>25)
{
player1clear();
y1=y1-25;
y1plus=y1+50;
player1malen();
}
}
public void button4_ActionPerformed(ActionEvent evt) {
if(y1<304)
{
player1clear();
y1=y1+25;
y1plus=y1+50;
player1malen();
}
}
public void button5_ActionPerformed(ActionEvent evt) {
if(stop==false){button5.setLabel("Stop!");stop=true;}
else if(stop==true){stop();}
stift.setColor(Color.black);
stift.drawLine(0,318,500,318);
player1malen();
player2malen();
ball();
}
}
//by danthe
Würde mich über eine anschauliche Erklärung sehr freuen, da ich noch nicht sehr erfahren bin und wir im Unterricht dem Grund- bzw. Leistungskurs nicht vorgreifen dürfen.
MfG,
danthe