T
Tobias4Rock
Gast
Hi @ all!
Ich will/muss für die Schule ein Java-Applet schreiben, bei dem eine Kugel immer rechtwinklig an den Seiten reflektiert wird. Das funktioniert auch wunderbar. Jetzt wollte ich das ganze allerdings noch etwas fortführen und daraus so ein Spiel machen, bei dem man unten einen Balken (ein Rechteck) bewegen kann um damit die Kugel vor dem "herausfallen aus dem Spielfeld" zu bewahren, ich hoffe ihr versteht was ich meine.
Relevant ist also nur die x-Koordinate des Mauszeigers. Dies habe ich versucht mit
public void mouseMoved(MouseEvent e)
zu realiesieren und habe dafür etliche verschiedene Ansätze gewählt:
einfach so, in der Haupt-Applet-Klasse
mit Canvas
mit einer extra Klasse, die von Component erbt
mit Threads
und noch ein paarn.
Das Problem ist aber, dass ich noch nicht einmal ein Jahr lang in der Schule Java lerne und auch sonst wenig Programmiererfahrungen habe, jedenfalls komme ich einfach nicht weiter und hatte die Hoffnung, dass vlt hier jemand mir weiterhelfen könnte.
Hier mal ein Quellcode, der funktioniert so erstmal perfekt, allerdings eben ohne das zu bewegende Rechteck. Die meisten Lösungsansätze habe ich allerdings wieder rausgelöscht bzw. woanders stehen, da diese ja sowieso nicht zum Erfolg geführt haben:
Ich hoffe mir kann wer weiterhelfen, wär wirklich total lieb, speziell da wir am Freitag 3 Programme abgeben sollen und ich das ganz gerne dazu tun würde...
Also dann,
Vielen Dank schonmal im Voraus,
Tobias
Ich will/muss für die Schule ein Java-Applet schreiben, bei dem eine Kugel immer rechtwinklig an den Seiten reflektiert wird. Das funktioniert auch wunderbar. Jetzt wollte ich das ganze allerdings noch etwas fortführen und daraus so ein Spiel machen, bei dem man unten einen Balken (ein Rechteck) bewegen kann um damit die Kugel vor dem "herausfallen aus dem Spielfeld" zu bewahren, ich hoffe ihr versteht was ich meine.
Relevant ist also nur die x-Koordinate des Mauszeigers. Dies habe ich versucht mit
public void mouseMoved(MouseEvent e)
zu realiesieren und habe dafür etliche verschiedene Ansätze gewählt:
einfach so, in der Haupt-Applet-Klasse
mit Canvas
mit einer extra Klasse, die von Component erbt
mit Threads
und noch ein paarn.
Das Problem ist aber, dass ich noch nicht einmal ein Jahr lang in der Schule Java lerne und auch sonst wenig Programmiererfahrungen habe, jedenfalls komme ich einfach nicht weiter und hatte die Hoffnung, dass vlt hier jemand mir weiterhelfen könnte.

Hier mal ein Quellcode, der funktioniert so erstmal perfekt, allerdings eben ohne das zu bewegende Rechteck. Die meisten Lösungsansätze habe ich allerdings wieder rausgelöscht bzw. woanders stehen, da diese ja sowieso nicht zum Erfolg geführt haben:
Code:
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
public class Scheibea extends Applet
{
//attribute
public int x_position_zeiger = 20;
private boolean isStandalone = false;
Color hintergrundfarbe = Color.cyan;
// int test = 0;
public void mouseMoved(MouseEvent e)
{
while(/*test < 100*/ true)
{
x_position_zeiger = e.getX();
// test++;
try {Thread.sleep(10);}
catch(InterruptedException f) {return;}
}
}
//Parameterwert holen
public String getParameter(String key, String def)
{
return isStandalone ? System.getProperty(key, def) :
(getParameter(key) != null ? getParameter(key) : def);
}
//Das Applet konstruieren
public Scheibea()
{
setBackground(hintergrundfarbe);
}
void zeitschleife()
{
try {Thread.sleep(20);}
catch(InterruptedException e) {return;}
}
public void paint(Graphics Stift)
{
//variabeln
Rechteck rechteck;
rechteck = new Rechteck();
int y = 0;
int x = 0;
int breite = 90;
int hoehe = 90;
int delta_x = 1;
int delta_y = 1;
int zaehler = 0;
int farbwechsel = 10;
boolean farbwechsel_an = false;
double breite_applet = this.getWidth();
double hoehe_applet = this.getHeight();
Color farbe1 = Color.red;
Color farbe2 = Color.yellow;
Color kugelfarbe = Color.black;
while(true)
{
// wenn rechts
if(x == breite_applet - breite)
{
delta_x = delta_x * (-1);
}
// wenn oben
if(y == 0)
{
delta_y = delta_y * (-1);
}
// wenn links
if(x == 0)
{
delta_x = delta_x * (-1);
}
// wenn unten
if(y == hoehe_applet - hoehe)
{
delta_y = delta_y * (-1);
}
while (y <= hoehe_applet - hoehe && x <= breite_applet - breite && x >= 0 && y>=0)
{
Stift.setColor(kugelfarbe);
//um ausgefranzte raender zu vermeiden,
//wird der Rand nochmals seperat gezeichnet
Stift.drawOval(x, y,breite, hoehe);
Stift.fillOval(x, y,breite, hoehe);
/* Versuch zur Auslesung der waagerechten mauszeigerposition,
methoden lassen sich nicht verschachteln
public void mouseMoved(MouseEvent e)
{
x_position_zeiger = e.getX();
}
Stift.fillRect(x_position_zeiger, 50,50, 50); */
zeitschleife();
if (farbwechsel_an == true)
{
if(zaehler <= farbwechsel)
{
Stift.setColor(farbe1);
}
if(zaehler >= farbwechsel)
{
Stift.setColor(farbe2);
}
}
if (!farbwechsel_an == true)
Stift.setColor(hintergrundfarbe);
Stift.drawOval(x, y,breite, hoehe);
Stift.fillOval(x, y, breite, hoehe);
zaehler++;
if(zaehler >= 2 * farbwechsel)
{
zaehler = 0;
}
y = y + delta_y;
x = x + delta_x;
}
y = y - delta_y;
x = x - delta_x;
}
}
//Das Applet initialisieren
public void init()
{
try
{
jbInit();
}
catch(Exception e)
{
e.printStackTrace();
}
}
//Initialisierung der Komponenten
private void jbInit() throws Exception
{
}
//Applet-Information holen
public String getAppletInfo()
{
return "Applet-Information";
}
//Parameter-Infos holen
public String[][] getParameterInfo()
{
return null;
}
}
class Rechteck extends Component implements MouseMotionListener
{
public Rechteck()
{
// addMouseMotionListener(this);
}
public void mouseMoved(MouseEvent e)
{
int x_position_zeiger = e.getX();
Graphics Stift;
Stift=getGraphics();
Stift.setColor(Color.green);
Stift.fillRect(x_position_zeiger, 100, 10, 10);
}
public void mouseDragged(MouseEvent e)
{
}
public void paint(Graphics Stift)
{
}
}
Ich hoffe mir kann wer weiterhelfen, wär wirklich total lieb, speziell da wir am Freitag 3 Programme abgeben sollen und ich das ganz gerne dazu tun würde...
Also dann,
Vielen Dank schonmal im Voraus,
Tobias
