Hi,
wie schonmal hier erwähnt programmiere ich gerade ein SpaceInvader-Spiel. Dabei bin ich fest davon überzeugt, dass Java anderen Hochsprachen wie C++ hinsichtlich der Performance kaum nachsteht, wenn man ein gutes Design wählt. Mein Konzept steht nun inzwischen und kann auch schon getestet werden. Deswegen möchte ich bevor ich weitermache gerne eure Meinung zu meinem Konzept wissen. Ich bin noch nicht so lange dabei hier und jetzt kann man ausserdem auch noch alles ändern.
Das Projekt habe ich als .zip hochgeladen (siehe unten). Wer will darf gerne reinschauen und mal den Code nach Schwachstellen auseinander nehmen (naja eigentlich bitte ich darum
)
Dann habe ich noch ein kleines Problem. Wenn ein Feind vom Spieler zerstört wird, möchte ich die Explosion aus einer Hintergrundexplosion und einer Vordergrundexplosion (animiertes .gif) machen. Die Hintergrundexplosion stellt hierbei ein roter Kreis dar, den ich direkt in Java zeichne. Dieser Kreis wird am Anfang recht schnell größer, am Schluss jedoch immer langsamer und verblasst allmählich. Solange ich den Radius der Explosion klein halte funktioniert das auch, sobald der jedoch recht groß ist ruckelt das Spiel und wird erbärmlich langsam. Wenn ich die Transparenz der Hintergrund-Explosion deaktiviere gibt es keine Probleme mehr. Das will ich jedoch nicht. Ich vermute, dass das Problem bei g.setColor(blabla) liegt. Scheint einfach zu viel Zeit zu kosten. Aber wie kann ich das sonst lösen? Die Transparenz wird ja direkt beim Zeichnen in Abhängigkeit des Radius berechnet.
Die Klasse die diese Explosion darstellt heißt ExplosionBackground und wird von der Sub-Logikklasse Level1 verwaltet.
www.badongo.com/file/1877394
Der Entry Point ist die Klasse Ships3
mfg
Revenant
wie schonmal hier erwähnt programmiere ich gerade ein SpaceInvader-Spiel. Dabei bin ich fest davon überzeugt, dass Java anderen Hochsprachen wie C++ hinsichtlich der Performance kaum nachsteht, wenn man ein gutes Design wählt. Mein Konzept steht nun inzwischen und kann auch schon getestet werden. Deswegen möchte ich bevor ich weitermache gerne eure Meinung zu meinem Konzept wissen. Ich bin noch nicht so lange dabei hier und jetzt kann man ausserdem auch noch alles ändern.
Das Projekt habe ich als .zip hochgeladen (siehe unten). Wer will darf gerne reinschauen und mal den Code nach Schwachstellen auseinander nehmen (naja eigentlich bitte ich darum
Dann habe ich noch ein kleines Problem. Wenn ein Feind vom Spieler zerstört wird, möchte ich die Explosion aus einer Hintergrundexplosion und einer Vordergrundexplosion (animiertes .gif) machen. Die Hintergrundexplosion stellt hierbei ein roter Kreis dar, den ich direkt in Java zeichne. Dieser Kreis wird am Anfang recht schnell größer, am Schluss jedoch immer langsamer und verblasst allmählich. Solange ich den Radius der Explosion klein halte funktioniert das auch, sobald der jedoch recht groß ist ruckelt das Spiel und wird erbärmlich langsam. Wenn ich die Transparenz der Hintergrund-Explosion deaktiviere gibt es keine Probleme mehr. Das will ich jedoch nicht. Ich vermute, dass das Problem bei g.setColor(blabla) liegt. Scheint einfach zu viel Zeit zu kosten. Aber wie kann ich das sonst lösen? Die Transparenz wird ja direkt beim Zeichnen in Abhängigkeit des Radius berechnet.
Die Klasse die diese Explosion darstellt heißt ExplosionBackground und wird von der Sub-Logikklasse Level1 verwaltet.
Code:
public class ExplosionBackground
{
int xpos = 0;
int ypos = 0;
double radius = 1;
double radiusStart = 0;
double x = 0;
double speed = 1.0;
/**constructor
*
* @param x - the x coordinate of the explosion
* @param y - the y coordinate of the explosion
* @param r - the radius of the explosion
* @param speed - the speed of the explosion. Its value is proposed to be 0.0 < speed < 1.0
*/
ExplosionBackground(int x, int y, int r, double speed)
{
xpos = x;
ypos = y;
this.x = -Math.sqrt(r);
radiusStart = r;
this.speed = speed;
}
public void draw(Graphics g)
{
// x value of is increasing constantly
x+=speed;
// basicalle the radius is calculated like the y value of the equation y = -x² + b
// this means the explosion will first grow fast and then slower and slower
radius = -(x*x)+radiusStart;
// cancel drawing if explosion is at max radius
if ((int)radius >= (int)radiusStart) return;
if (x >= 0) return;
// set transparent red color, whose transparency is calculated dynamically using the current radius
g.setColor(new Color(1.0f,0f,0f,1.0f-(float)(radius/radiusStart)));
g.fillOval(xpos-(int)(radius/2),ypos-(int)(radius/2),(int)radius,(int)radius);
}
/**get status of the explosion
*
* @return true if explosion is still drawn false otherwise
*/
public boolean getAlive()
{
if (x < 0) return true; // x < 0 ???
return false;
}
}
www.badongo.com/file/1877394
Der Entry Point ist die Klasse Ships3
mfg
Revenant