Hallo
ich versuche mich gerade an einem kleinem Billard Spiel. Ich habe mich an ein Bsp gehalten (Balzert, Das Billard Projekt) . Nun will ich aber gerne das der Queue vom Aussehen her änderbar ist. Dieser wird erstmal gezeichnet über die java eigenen draw Werkzeuge. Das würde ich auch gerne so lassen, da so wie er gezeichnet ist erstmal gut funktioniert. Nun würde ich aber gerne ein jpeg/png Bild über diese Zeichnung "drüberlegen" . Die Fuktionsweise des Queue soll aber die gleiche bleiben. So das ich nachher im fertigen Spiel das Aussehen des Queue schnell ändern kann mit verschiedenen Bildern. Gibt es da ne Möglichkeit das zu bewerkstelligen?
ich versuche mich gerade an einem kleinem Billard Spiel. Ich habe mich an ein Bsp gehalten (Balzert, Das Billard Projekt) . Nun will ich aber gerne das der Queue vom Aussehen her änderbar ist. Dieser wird erstmal gezeichnet über die java eigenen draw Werkzeuge. Das würde ich auch gerne so lassen, da so wie er gezeichnet ist erstmal gut funktioniert. Nun würde ich aber gerne ein jpeg/png Bild über diese Zeichnung "drüberlegen" . Die Fuktionsweise des Queue soll aber die gleiche bleiben. So das ich nachher im fertigen Spiel das Aussehen des Queue schnell ändern kann mit verschiedenen Bildern. Gibt es da ne Möglichkeit das zu bewerkstelligen?
Java:
import java.awt.*;
public class Queue extends Component implements Runnable {
public double xPos, yPos;
public double xRichtung, yRichtung;
private double xRichtungNormalisiert, yRichtungNormalisiert;
private double stossstärke, ausholspeed, rücklaufspeed;
private double xRichtungKugelNeu, yRichtungKugelNeu;
private double stossmax = 500;
private double länge = 200;
private boolean sichtbar;
private Kugel Spielkugel;
private Thread t;
private Image Queuebild;
public Queue(Kugel sp) {
Spielkugel = sp;
stossstärke = Spielkugel.radius;
Queuebild = getToolkit().getImage("queue_klein.png");
MediaTracker tracker = new MediaTracker(this);
tracker.addImage(Queuebild, 0);
}
public void starteAusholen() {
rücklaufspeed = 0;
ausholspeed = 1.5;
t = new Thread(this);
t.start();
sichtbar = true;
}
public void stoppeAusholen() {
double speed = java.lang.Math.sqrt(xRichtung * xRichtung + yRichtung
* yRichtung);
xRichtungNormalisiert = xRichtung * (1 / speed);
yRichtungNormalisiert = yRichtung * (1 / speed);
xRichtungKugelNeu = xRichtungNormalisiert
* (stossstärke - Spielkugel.radius) * 0.1;
yRichtungKugelNeu = yRichtungNormalisiert
* (stossstärke - Spielkugel.radius) * 0.1;
ausholspeed = 1;
rücklaufspeed = -1;
}
public void run() {
stossstärke = Spielkugel.radius;
sichtbar = true;
while (stossstärke >= Spielkugel.radius) {
if (stossstärke < stossmax) {
stossstärke *= ausholspeed;
}
stossstärke += rücklaufspeed;
if (rücklaufspeed < 0) {
rücklaufspeed *= 1.1;
// der Queue soll beim rüchlauf beschleunigen.
}
try {
Thread.sleep((long) (1000 / 25));
} catch (InterruptedException e) {
}
}
Spielkugel.xSpeed = xRichtungKugelNeu;
Spielkugel.ySpeed = yRichtungKugelNeu;
sichtbar = false;
stossstärke = Spielkugel.radius;
}
public void paint(Graphics g) {
xPos = Spielkugel.xPosition;
yPos = Spielkugel.yPosition;
double speed = java.lang.Math.sqrt(xRichtung * xRichtung + yRichtung
* yRichtung);
xRichtungNormalisiert = xRichtung * (1 / speed);
yRichtungNormalisiert = yRichtung * (1 / speed);
Tisch derTisch = Tisch.getInstance();
// g.drawImage(Queuebild,(int) Spielkugel.xPosition,(int)
// Spielkugel.yPosition,this);
g.setColor(Color.red);
// Stoßstärke - Balken malen
g.fillRect(
derTisch.getKanteLinks().x,
derTisch.getKanteRechts().y + 20,
(int) ((stossstärke)
* ((derTisch.getSize().width + 2 * Spielkugel.radius) / stossmax) - 3 * Spielkugel.radius),
(int) 20);
// Polygonkoordinaten für das Queue berechnen
int[] xes = {
(int) (xPos - (xRichtungNormalisiert * stossstärke) + yRichtungNormalisiert * 3),
(int) (xPos - (xRichtungNormalisiert * stossstärke) - yRichtungNormalisiert * 3),
(int) (xPos - (xRichtungNormalisiert * (stossstärke + länge)) - yRichtungNormalisiert * 6),
(int) (xPos - (xRichtungNormalisiert * (stossstärke + länge)) + yRichtungNormalisiert * 6) };
int[] yes = {
(int) (yPos - (yRichtungNormalisiert * stossstärke) - xRichtungNormalisiert * 3),
(int) (yPos - (yRichtungNormalisiert * stossstärke) + xRichtungNormalisiert * 3),
(int) (yPos - (yRichtungNormalisiert * (stossstärke + länge)) + xRichtungNormalisiert * 6),
(int) (yPos - (yRichtungNormalisiert * (stossstärke + länge)) - xRichtungNormalisiert * 6) };
// zuerst die Füllfarbe des Queues malen
g.setColor(Color.orange);
g.fillPolygon(xes, yes, xes.length);
// dann die Umrandung
g.setColor(Color.black);
g.drawPolygon(xes, yes, xes.length);
// Polygonkoordinaten für die Spitze berechnen
int[] xos = {
(int) (xPos - (xRichtungNormalisiert * stossstärke) + yRichtungNormalisiert * 3),
(int) (xPos - (xRichtungNormalisiert * stossstärke) - yRichtungNormalisiert * 3),
(int) (xPos - (xRichtungNormalisiert * (stossstärke + 30)) - yRichtungNormalisiert * 4),
(int) (xPos - (xRichtungNormalisiert * (stossstärke + 30)) + yRichtungNormalisiert * 4) };
int[] yos = {
(int) (yPos - (yRichtungNormalisiert * stossstärke) - xRichtungNormalisiert * 3),
(int) (yPos - (yRichtungNormalisiert * stossstärke) + xRichtungNormalisiert * 3),
(int) (yPos - (yRichtungNormalisiert * (stossstärke + 30)) + xRichtungNormalisiert * 4),
(int) (yPos - (yRichtungNormalisiert * (stossstärke + 30)) - xRichtungNormalisiert * 4) };
// Spitze malen
g.fillPolygon(xos, yos, xos.length);
// Zielhilfe malen
g.drawLine((int) (xPos + (xRichtungNormalisiert * Spielkugel.radius)),
(int) (yPos + (yRichtungNormalisiert * Spielkugel.radius)),
(int) (xPos + (xRichtungNormalisiert * (200 * 3))),
(int) (yPos + (yRichtungNormalisiert * (200 * 3))));
}
public boolean sichtbarkeit() {
return sichtbar;
}
}