# 2D Alienshooter



## paddy778 (17. Jun 2016)

hey Leute hab schon Erfahrung mit Spielen, die in Java programmiert sind, gemacht und habe im Internet ein Spiel gesehen, das die Kollisionen von Objekten zeigt. Und ich habe versucht dieses Spiel auszuprobieren, aber es ging nicht. die Bilder, die ich dort heruntergeladen habe, wurden mir nicht als Objekte im Fenster gezeichnet, wie es eig sein sollte hat jemand ne Idee? 
Oder klappt es bei jemandem? Der komplette Code befindet sich auf dieser Seite und auch die zugehörigen Dateien. Danke!

Hier der Link zum Code: http://zetcode.com/tutorials/javagamestutorial/collision/

Und zusätzlich habe ich im Anhang noch ein Bild angehängt, wie das Spiel am Ende aussehen soll.


----------



## Jardcore (17. Jun 2016)

Wie genau hast du es denn ausprobiert? Hast du den Quelltext kopiert? Es ist relativ aufwändig deinem Link zu folgen und dort den kompletten Code zu studieren, der wahrscheinlich richtig ist.

Poste am besten den genauen Fehler den du hast, so das man zusammen das Problem ausmachen kann.

Wenn du dich ernsthaft mit der Spieleentwicklung in Java auseinander setzten willst kann ich dir Libgdx bzw. Lwjgl empfehlen.


----------



## paddy778 (17. Jun 2016)

ich habe zuerst die Syntax der einzelnen Klassen/java Dateien geprüft, die auch richtig waren und habe dann versucht das Spiel zum Laufen zu bringen. Die Methode loadImage() wird zwar aufgerufen,  aber die Bilder, die dann als Objekte gezeichnet werden sollen, werden nicht angezeigt.
Wäre mal gut, wenn du das Spiel auch mal testen könntest ob es bei dir funktioniert
Die Funktionen, die für die Bilder sind, hab ich mit angefügt als Datei.

PS: habe Eclipse verwendet.

Hier die Methode, die nicht richtig funktioniert:



```
private void drawObjects(Graphics g) {

        if (craft.isVisible()) {
            g.drawImage(craft.getImage(), craft.getX(), craft.getY(),  
                    this);
        }

        ArrayList<Missile> ms = craft.getMissiles();

        for (Missile m : ms) {
            if (m.isVisible()) {
                g.drawImage(m.getImage(), m.getX(), m.getY(), this);
            }
        }

        for (Alien a : aliens) {
            if (a.isVisible()) {
                g.drawImage(a.getImage(), a.getX(), a.getY(), this); 
            }
        }
```

Wenn ich die Zeile g.drawImage... ersetze und stattdessen kreise zeichne funktionieren die Funktionen. Dann werden halt Punkte statt die Bilder angezeigt.


----------



## Joose (17. Jun 2016)

Code bitte in Code-Tags posten, danke! 
[code=java] ... dein code ... [/code]


----------



## paddy778 (17. Jun 2016)

okey danke


----------



## Joose (17. Jun 2016)

Entweder im Beitrag Editor über Einfügen->Code oder wie schon oben geschrieben die Code-Tags am Anfang bzw. Ende des Code setzen
[code=java] .. dein code .. [/code]
wird zu 

```
.. dein code ..
```


----------



## Jardcore (17. Jun 2016)

Könntest du die Fehlermeldung posten die in deiner Console ausgegeben wird? Vielleicht hast du die Bilder in den falschen Ordner gepackt.

Im Objekt Missile müsstest du mal gucken was die getImage() Methode macht und dort schauen von wo das Bild gezogen werden sollte.


----------



## paddy778 (18. Jun 2016)

Das ist das Problem! Compiler gibt keinen Fehler! es werden Bilder nur nicht angezeigt. Ich Lade hier mal Bilder hoch , die zeigen wie es angezeigt wird und was angezeigt werden soll. das rote sind die Alien und rechts das Raumschiff


----------



## paddy778 (18. Jun 2016)

Und das ist die Methode getImage():


```
protected int x;
  protected int y;
  protected int width;
  protected int height;
  protected boolean vis;
  protected Image image;

  public Sprite(int x, int y) {

  this.x = x;
  this.y = y;
  vis = true;
  }

  protected void getImageDimensions() {

  width = image.getWidth(null);
  height = image.getHeight(null);
  }

  protected void loadImage(String imageName) {

  ImageIcon ii = new ImageIcon(imageName);
  image = ii.getImage();
  }

  public Image getImage() {
  return image;
  }
```

Außerdem sollen so die Bilder vom PC geladen werden, am Beispiel vom Alien Bild:


```
private void initAlien() {

  loadImage("alien.png");
  getImageDimensions();
  }
```
ich hoffe ihr könnt mir helfen. Danke


----------



## mrBrown (18. Jun 2016)

Wo hast du denn die Bilddateien gespeichert?


----------



## paddy778 (18. Jun 2016)

direkt dort wo auch die Java Dateien sind. Aber ich habe das Problem anderweitig gelöst 
Habe aus den 5 Dateien eine gemacht und mit einem anderen Programm namens Java Editor hat es nach beheben mehrerer Compilerfehler ( habe die Klasse CollisionEx, in der das Hauptprogramm war, nicht als erste public class gemacht) endlich geklappt. Aber danke trotzdem

Hab das Spiel mal hochgeladen( Da kein Java geht mache ich ne txt Datei daraus), falls du es mal anschauen willst
Aber eine Frage noch, falls du dir mein Spiel anschaust:
Wie kommt man oben links auf die Zahl 27 und wie kann ich sie ändern?


----------



## Meniskusschaden (18. Jun 2016)

paddy778 hat gesagt.:


> Wie kommt man oben links auf die Zahl 27 und wie kann ich sie ändern?


Das ist die Anzahl der Elemente, die in der ArrayList `private ArrayList<Alien> aliens;` gespeichert ist. Sie wird mit folgendem Codeausschnitt ausgegeben:
	
	
	
	





```
g.drawString("Aliens left: " + aliens.size(), 5, 15);
```
Du kannst sie ändern, indem du Alien-Objekte zur ArrayList hinzufügst oder daraus entfernst.


----------



## paddy778 (18. Jun 2016)

Danke für eure Antworten

Und wie kann ich die Geschwindigkeit der Aliens ändern?


----------

