# Array und Parameter



## Bengaltiger (24. Feb 2011)

hallo

ich hab eine array aller figuren einer klasse.
ich möchte folgendes versuchen:
jede einzelne figur soll ein int wert(leben) bekommen,
der int wert(leben) nimmt ab und
wenn es gleich 0 ist soll er sich selbst löschen.

wie bekome ich sowas hin?
hab vieles probiert nix klappt

bin noch ein anfänger....



danke im voraus


----------



## Cola_Colin (24. Feb 2011)

Tjo, dann zeige doch mal dein "vieles" und was da so die Probleme sind.
Kostenlos deine Aufgaben lösen ohne das du selber Anstrengung zeigst tut hier kaum einer


----------



## Bengaltiger (24. Feb 2011)

also hab das hier:


```
ArrayList<Actor> rockets1 = new ArrayList();
public int typ1[];
//__________________________________________
public void Aliens(){
    int typ1[] = new typ1[4];
    RocketsTyp1[] rocket1 = new RocketsTyp1[4];
    Location loc = new Location(0,0);
    for(int i=0; i<3; i++){
    typ1[i]= 3;
    rocket1[i] = new RocketsTyp1();
    if(isEmpty(loc)){
    addActor(rocket1[i], new Location(loc));
    delay(1000);
    rocket1[i].show();}}
                     }
//____________________________________________
int n
rockets1=getActors();
     n=rockets1.hashCode();
//--------------------------------------------------
typ1[n]--;
      if(typ1[n]==0){
      actor2.removeSelf();}
//___________________________________________
```
doch es kommt ein nullpointer exeption,
ich glaub liegt an der variable...


----------



## tagedieb (25. Feb 2011)

Nun es waere doch sehr hilfreich zu erwaehnen welches framework du da verwendest..  bei hellsehen bin ich in der schule durchgefallen ;-)

Du verwendest wahrscheinlich das GameGrid?


```
public int typ1[];
```
Das ist wahrscheinlich dein int wert(leben). In einer Objektorientierten Programiersprache gehoert dieses Feld ins entsprechenden Objekt (RocketTyp1) und ich wuerde sie zum bessern verstaendnis 
	
	
	
	





```
leben
```
 nennen.

Ich hab nicht erraten koennen wie nun das leben abnimmt. Aber je nachdem ob es stetig oder bei collision abnimmt solltest du das in der 
	
	
	
	





```
act()
```
 oder 
	
	
	
	





```
collide()
```
 Methode implementieren.


Dieser Code hier mach nun gar keinen Sinn. Was soll der den deiner Meinung nach bewirken? 
Was willst du mit dem hashCode der ArrayList und wieso benutzt du ihn als index auf dein int array? Hast du actor2 irgendwo zugewiesen? Ich glaube hier laeuft so ziemlich alles falsch...


```
public int typ1[];
int n
rockets1=getActors();
n=rockets1.hashCode();
--------------------------------------------------
typ1[n]--;
if(typ1[n]==0){
actor2.removeSelf();}
```


----------



## the GINI the M (25. Feb 2011)

Mich wundert's, dass der Code überhaupt kompiliert.

Zu Deiner ursprünglichen Frage:
ArrayLists sind toll um was zu entfernen (bis auf ConcurrentModifications :-S)
Allerdings wird das entfernen auf der Liste durchgeführt, nicht auf dem Member:

Statt:

```
actor2.removeSelf()
```
würde ich machen:

```
myActorList.remove(actor2)
```
oder eben, falls Du die Liste "rockets1" nennen willst:

```
rockets1.remove(actor2)
```

Falls die Actor Liste statisch in der Actor Klasse ist, kannst Du natürlich eine Methode "removeSelf" zu den Aktoren einbauen.
Keine Ahnung ob das ist, was Du brauchtest.

Prinzipiell, wenn Du aus einem normalen Array (nicht ArrayList) etwas entfernen möchtest, habe ich schnell diesen Code hier zusammengestiefelt:


```
public static int[] removeEntry(int indexToRemove,int[] original)
	{
		int l=original.length;
		if(indexToRemove>=l)
			return original;
		int[] remainder=new int[l-1];
		if(indexToRemove>0)
			System.arraycopy(original, 0, remainder, 0, indexToRemove);
		System.arraycopy(original, indexToRemove+1, remainder, indexToRemove, l-indexToRemove-1);
		return remainder;
	}
```

Das ist vermutlich die schnellste Variante. Bei riesigen Arrays bedeutet das allerdings nichts, und die ArrayList mit ihrem "Remove" wäre besser.


----------



## Bengaltiger (26. Feb 2011)

@tage dieb ja mit gamegrid 
hab schon mit int collide gearbeitet
@the dini the m
deine hilfe klappt net:

```
rockets1.remove(actor2)
```


ich hab euch nur ein abschnitt gegeben natürlich compiliert es^^

was ich benötige:

ein public int, der von ner variable abhängt.
beispiel: public int leben und abhängige variable i.
es sollen i mal public int erstellt werden doch der wert von leben bleibt gleich 3.
die verschiedenen public ints möchte ich dann woanders nutzen...
ich hoffe ihr versteht mich jetzt


----------



## Bengaltiger (26. Feb 2011)

aber danke the gini the m

rockets1.remove(actor2) 

hat mir bei nem anderen problem weiter geholfen


----------



## the GINI the M (26. Feb 2011)

Mir ist (jetzt wo Dein Code formattiert ist) noch was aufgefallen.
a)
Du deklarierst den globalen Array typ1, machst aber innerhalb vom Aliens Konstruktor nochmals ein lokales typ1. Ist Dir bewusst, dass das lokale typ1 nichts mit dem globalen zu tun hat und dass es "stirbt", sobald Dein Alien konstruiert ist?

b)
Ich habe noch nie einen Array mittels

```
int[] name = new name[size];
```
gemacht. Mir ist nur

```
int[] name = new int[size];
```
 bekannt.
Kann schon sein, dass die erste Variante funktioniert, ich sehe das allerdings zum ersten mal...


----------



## Bengaltiger (26. Feb 2011)

jo danke habs auch gemerkt 

aber habt ihr ein vorschlag wie ich das mit dem leben umsetzen kann :S?


----------



## the GINI the M (26. Feb 2011)

Bin vielleicht etwas langsam an diesem Samstag... aber ich habe Deine Ausführungen einfach nicht begriffen.
Sag doch mal, was Du am Schluss haben möchtest, wie sich das Spiel diesbezüglich verhalten soll.


----------



## Bengaltiger (26. Feb 2011)

ok ich versuch es so gut wie möglich


```
// RocketGun.java

import ch.aplu.jgamegrid.*;
import java.awt.event.KeyEvent;
import java.awt.*;
import java.util.ArrayList;

class RocketGun extends GameGrid{

  ArrayList<Actor> rockets1 = new ArrayList();
  public int i;
  int[]typ1= new int[i];
 public RocketGun(){
   super(600, 600,1,null,"sprites/galaxy.jpg",false);
   .....
                     }

 public void Player1(){
     Player rocket = new Player();
     .......
                      }

 public void Aliens(){
    RocketsTyp1[] rocket1 = new RocketsTyp1[4];
    Location loc = new Location(0,0);
    while(i<4){
    rocket1[i] = new RocketsTyp1();
    if(isEmpty(loc)){
    addActor(rocket1[i], new Location(loc));
    delay(1000);
    rocket1[i].show();
    i++;}}
                     }

 public static void main(String[] args){
     RocketGun galaxy = new RocketGun();
     .....
     }

//<---Begin class Player--->\\
class Player extends Actor{
    int n;
 public Player(){
   super("sprites/rocket1.gif");}
 private void shoot(){
   if(gameGrid.getNumberOfActors(RocketsTyp1.class)!=0){
     ..........
     rockets1=getActors();
     n=rockets1.hashCode();
   switch(gun){
     .........
              }                                          }
                     }
 public void act(){
   ..........
                 }
 public int collide(Actor actor1, Actor actor2){
      Location loc= actor2.getLocation();
      Actor rocket1=gameGrid.getOneActorAt(loc,RocketsTyp1.class);
      actor1.removeSelf();
      typ1[n]--;
      if(typ1[n]==0){
      rockets1.remove(actor2);
      actor2.removeSelf();}
      ...........
                                                }
  
                        }
//<---End class Player--->\\

//<---Begin class RocketsTyp1--->\\
class RocketsTyp1 extends Actor{
 public RocketsTyp1(){
   super(true,"sprites/rocket2.gif");
      setVertMirror(true);
      typ1[i]=10;}
 private void shoot(){
  .............
                     }
 public void act(){
     ...........
                  }
  public int collide(Actor actor1, Actor actor2){
       ...................
  }
 
                               }
//<---End class RocketsTyp1--->\\

}
```

also hier erstelle ich meine "feinde":

```
public void Aliens(){
    RocketsTyp1[] rocket1 = new RocketsTyp1[4];
    Location loc = new Location(0,0);
    while(i<4){
    rocket1[i] = new RocketsTyp1();
    if(isEmpty(loc)){
    addActor(rocket1[i], new Location(loc));
    delay(1000);
    rocket1[i].show();
    i++;}}
                     }
```
ich möchte das diese "feinde" leben bekommen

und hier:

```
public int collide(Actor actor1, Actor actor2){
      Location loc= actor2.getLocation();
      Actor rocket1=gameGrid.getOneActorAt(loc,RocketsTyp1.class);
      actor1.removeSelf();
      typ1[n]--;
      if(typ1[n]==0){
      rockets1.remove(actor2);
      actor2.removeSelf();}
      ...........
                                                }
```
soll das leben abgezogen werden


ich hoffe du hasts kapiert


----------



## the GINI the M (26. Feb 2011)

Puh. Einen Schönheitspreis verdient Dein Code nicht. Aber wer im Glashaus sitzt usw.

Steck einen int (von mir aus public) in die Klasse RocketsTyp1. Den nennst Du idealerweise "leben". Wenn ein Actor vom Typ "RocketsTyp1" eins aufn Deckel kriegt machsde 
[c]rocket1.leben--;[/c]
(Mir ist nicht klar, warum Du Dir die "rocket1" vom gameGrid mit "getOneActor..." holst, aber ich kenne GameGrid auch nicht. Müsste nicht einer der beiden actor1 oder actor2 bereits ein RocketTyp1 sein?)

Kurze Zwischenbemerkung:
Ist verd**mt schwierig, bei Deiner Objektbenamsung zu helfen. Kannst nicht Deine Objekte verständlich nennen???

Bevor ich weiterfasel, was macht "removeSelf"? Entfernt das ein Objekt vom GameGrid?


----------



## Bengaltiger (26. Feb 2011)

ja removeSelf() entfernt eine aus dem gamegrid

hmm dein vorschlag klappt net ganz da die variable nur in der klasse RocketsTyp1 gültig ist..


----------



## the GINI the M (26. Feb 2011)

doch.


----------



## Bengaltiger (26. Feb 2011)

du meinst es doch so:


```
public int collide(Actor actor1, Actor actor2){
      Location loc= actor2.getLocation();
      Actor rocket1=gameGrid.getOneActorAt(loc,RocketsTyp1.class);
      actor1.removeSelf();
      rocket1.leben--;
      if(leben==0){
      rockets1.remove(actor2);
      actor2.removeSelf();}
      ...........
                                                }
---------------------------------------------------------------------
//<---Begin class RocketsTyp1--->\\
class RocketsTyp1 extends Actor{
 public RocketsTyp1(int leben){
   super(true,"sprites/rocket2.gif");
      setVertMirror(true);
      typ1[i]=10;}
 private void shoot(){
  .............
                     }
 public void act(){
     ...........
                  }
  public int collide(Actor actor1, Actor actor2){
       ...................
  }
 
                               }
//<---End class RocketsTyp1--->\\
```


hast du msn oder icq?


----------



## the GINI the M (26. Feb 2011)

Nein, so meine ich es nicht, sondern so:


```
public int collide(Actor actor1, Actor actor2){
      if(actor1.getClass()==RocketsTyp1.class)
      {
           RocketTyp1 myRocket=(RocketTyp1)actor1;
           myRocket.leben--;
           actor2.removeSelf();
           if(myRocket.leben <= 0)
                 myRocket.removeSelf();
      }
      ...........
                                                }
---------------------------------------------------------------------
//<---Begin class RocketsTyp1--->\\
class RocketsTyp1 extends Actor{
 public int leben;
 public RocketsTyp1(){
   super(true,"sprites/rocket2.gif");
      leben=3;
      setVertMirror(true);
      typ1[i]=10;}
 private void shoot(){
  .............
                     }
 public void act(){
     ...........
                  }
  public int collide(Actor actor1, Actor actor2){
       ...................
  }
 
                               }
//<---End class RocketsTyp1--->\\
```



Nope, hab ich nicht.


----------



## Bengaltiger (26. Feb 2011)

jo danke hat geholfen aber, dadurch ist ein neues problem entstanden xD

mal sehn ob ich es selber schaff müsste gehn^^


----------



## Bengaltiger (27. Feb 2011)

hallo hab ein neues prob

möchte das ein objekt nach x sekunden sich selbst entfernt
hab es so probiert:

        long t0,t1;
        t0=System.currentTimeMillis();
        do{
            t1=System.currentTimeMillis();
        }
        while (t1-t0<1x);
        obejekt.removeSelf();

das klappt zwar aber dnn blaibt das ganze spiel stehen, aber das möchte ich nicht


----------



## Simon_Flagg (27. Feb 2011)

wie wärs mit einem eigenen thread dafür? da müsstest du aber mit der synchronisation aufpassen (das nicht zwei threads darauf zugreifen)

oder du schreibst das in eine von den methode rein, die ständig neu aufgerufen werden ...

lg


----------



## bengaltiger (27. Feb 2011)

danke für deine antwort, 
doch kann damit wenig anfangen bin ein
anfänger 

ein grober code
und eine
erläuterung wär hilfreich


----------



## Simon_Flagg (27. Feb 2011)

Java Forum @ javaCore.de :: Thema anzeigen - timer für ein objekt

in dem forum ist dir schon geantwortet worden...

lg


----------



## Bengaltiger (27. Feb 2011)

jo habs spät gesehen^^


----------



## Bengaltiger (27. Feb 2011)

hab ein mini prob bekomm ein error:
unable to create new native thread


```
//<---Begin class Shield-->\\
class Shield extends Actor{
 public Shield(){
   super("sprites/shield.gif");}
 public void act(){
      Actor shields= gameGrid.getOneActorAt(getLocation(),Shield.class);
      Actor player1= gameGrid.getOneActor(Player.class);
      shields.addCollisionActor(player1);
      shields.addActorCollisionListener(this);
      Thread ShieldTimer = new Thread(new Runnable(){
      Actor shields= gameGrid.getOneActorAt(getLocation(),Shield.class);
      public void run(){
      try{Thread.sleep(6000);
      shields.removeSelf();}
      catch (InterruptedException e){
      e.printStackTrace();}}});
      ShieldTimer.start();}
 public int collide(Actor shields, Actor rockets1){
      Location loc = rockets1.getLocation();
      shields.removeSelf();
      addActor(new ShieldActive(), new Location(loc));
      return(0);
                                                }
                       }
//<---End class Shield-->\\

//<---Begin class Shield-->\\
class ShieldActive extends Actor{
 public ShieldActive(){
   super("sprites/shieldactive.gif");}
 public void act(){
      if(gameGrid.getNumberOfActors(ShieldActive.class)!= 0){
      Actor shieldsactive= gameGrid.getOneActorAt(getLocation(),ShieldActive.class);
      Actor player1= gameGrid.getOneActor(Player.class);
      Location loc = player1.getLocation();
      shieldsactive.setLocation(loc);
      Thread ShieldActiveTimer = new Thread(new Runnable(){
      Actor shieldsactive= gameGrid.getOneActorAt(getLocation(),ShieldActive.class);
      public void run(){
      try{Thread.sleep(15000);
      shieldsactive.removeSelf();}
      catch (InterruptedException e){
      e.printStackTrace();}}});
      ShieldActiveTimer.start();}}
                       }
//<---End class Shield-->\\
```

zeile wo der"fehler" sein soll:


```
ShieldActiveTimer.start();
```


----------



## the GINI the M (27. Feb 2011)

Bengaltiger, ich rate Dir ein paar Tutorials bezüglich Objekt-orientiertem programmieren zu suchen. Nach meinem Verständnis sind Spiele so ziemlich das Herausfordernste dem sich ein Entwickler stellen kann - und da sollten zumindest ein paar der Basics sitzen.

Zu Deiner Frage: Analog wie oben "leben" machst Du jetzt ein Attribut "long Entstehung" in Deine Klasse, welches du im Konstruktor auf "System.currentTimeMillis()" setzt. zudem noch eine Prozedur (achtung: nicht statisch!) welche "Entstehung" mit der aktuellen Zeit vergleicht und einen boolean zurückgibt. Die Prozedur nennst sowas wie "lebtNoch()".
In Deinem Main-Loop rufst dann für jeden Actor "if(!Actor.lebtNoch()) Actor.removeSelf();"auf.


----------



## Bengaltiger (27. Feb 2011)

danke, hab es anders gelöst 

```
shieldsactive.setLocation(loc);
```
musste ich nach

```
ShieldActiveTimer.start();
```

setzen 


doch ich hab noch ein allgemeines Problem-.-

wenn neue actors wie Leben,Waffe oder Schild im fenster erscheinen
wird die bewegung der Feind und mir langsamer -.-"

ich habs mit setSlowdown(); (verzögert den aufruf der act-methode)
und mit setSimulationPeriod() versucht bringt nix-.-

p.s kennste ne jute tut seite???


----------



## tagedieb (28. Feb 2011)

Ich hab jetzt nicht genau alles durchgelesen aber ich fuerchte da besteht ein grundsaetzliches Verstaendnisproblem. Arbeite mal ein paar Tutorials durch. Vorzugszeise von Gamegrid oder dem Spieletutorial hier im Forum :rtfm:.

Die Methoden 
	
	
	
	





```
act()
```
und 
	
	
	
	





```
collide()
```
der Klasse 
	
	
	
	





```
Actor
```
werden in einer Schleife von Gamegrid abgearbeitet. In diesen Methoden solltest du weder 
	
	
	
	





```
Thread.sleep(..)
```
 benutzen, da dadurch das ganze Spiel pausiert wird noch solltest du neue Threads erzeugen, da du dich bereits in einer Schleife befindest und diese ca alle 20ms aufgerufen wird, startest du pro Sekunde bereits 50 Threads :autsch:. Ausserdem erledigst du initialisierungsaufgaben in einer Schleife. 
	
	
	
	





```
addCollisionActor()
```
 und 
	
	
	
	





```
addActorCollisionListener()
```
 muessen nur einmal aufgerufen werden.


Speichere den timestamp deines Actors beim Erzeugen und ueberpruefe dann in der act() Methode ob die Zeit schon abgelaufen ist.

PS. in Spielen sollte man nicht die 
	
	
	
	





```
System.currentTimeMillis()
```
 sondern die viel genauere 
	
	
	
	





```
System.nanoTime()
```
 verwenden. Ok, auf sekundenbasis spielt es keine Rolle, wohl aber wenns um ein paar millisekunden geht.


```
class Shield extends Actor{
   long timeToDie;
   public Shield(){
      super("sprites/shield.gif");
      timeToDie = System.nanoTime() + (6 * 1000 * 1000); // errechne die zeit wann der actor sterben soll

      Actor player1= gameGrid.getOneActor(Player.class); // initialisierungsaufgaben sollten im konstruktor abgehandelt werden
      addCollisionActor(player1);
      addActorCollisionListener(this);
   }
   public void act(){
      if (System.nanoTime() > timeToDie)  //pruefen ob schon 6 sekunden vergangnen sind
          removeSelf();}
      }
   }
   ...
}
```


----------



## tagedieb (28. Feb 2011)

GameGrid


----------



## Bengaltiger (28. Feb 2011)

danke, aber klappt net


```
//<---Begin class Shield-->\\
class Shield extends Actor{
long timeToDie;
   public Shield(){
      super("sprites/shield.gif");
      timeToDie = System.nanoTime() + (6 * 1000 * 1000); 
      addCollisionActor(player1);
      addActorCollisionListener(this);
   }
   public void act(){
      if (System.nanoTime() > timeToDie)
          removeSelf();}
      public int collide(Actor actor1, Actor player1){
       Location loc = player1.getLocation();
       actor1.removeSelf();
       addActor(new ShieldActive(),new Location(loc));
       return(0);}
                       }
//<---End class Shield-->\\
```

bekomme diesen error:






hab den zeit msser umgewandelt du hattes ein rechenfehler denk ich nano=10^-9 also mus 10^9 hin für ne sekunde und du hattest 10^6

```
timeToDie = System.nanoTime() + (6*Math.pow(10, 9));
```

der error kommt wegen der zeile vermut ich mal

```
addCollisionActor(player1);
```

hab jetzt so

```
//<---Begin class Shield-->\\
class Shield extends Actor{
double timeToDie;
   public Shield(){
      super("sprites/shield.gif");
      timeToDie = System.nanoTime() + (6*Math.pow(10, 9));
   }
   public void act(){
      if (System.nanoTime() > timeToDie)
          removeSelf();}
                       }
//<---End class Shield-->\\
```
die bewegungs geschwindigkeit bleibt gleich, doch mit keine collision^^

i-welche anderen lösungsansatz???


p.s ja schaue mir tuts an machen bissel was inder schule sonst kann ich erst in den ferien da viele klausren vor der tür stehen


----------



## Bengaltiger (28. Feb 2011)

habs geschafft hab player1 gleich in der hauptklasse erzeugt und und somit wurde der Fehler aufgehoben 

wenn wieder was ist melde ich mich


wär nett wenn einer mich in icq addtet^^:icq#: 635591086


----------



## Bengaltiger (2. Mrz 2011)

so hab ein neues problem

ich möchte meine "aliens" nach 3 sekunden erstellen
habs probiert aber klappt nicht-.-


```
public void Aliens(){
     double generate;
     RocketsTyp1[] rocket1 = new RocketsTyp1[anzahl];
     for(int n=0; n<5;n++){
     Location loc= new Location((int)(500*Math.random()+50),(int)(100*Math.random()+50));
     rocket1[n] = new RocketsTyp1();
     generate = System.nanoTime() + (3*Math.pow(10, 9));
     if (System.nanoTime() > generate){
     addActor(rocket1[n], new Location(loc));}
     rocket1[n].show();}}


 public static void main(String[] args){
     test galaxy = new test();
     galaxy.show();
     galaxy.Player1();
     galaxy.doRun();
     galaxy.Aliens();
                                       }
```

wenn ich so starte kommt nix
wo liegt das problem????


lg


----------



## tagedieb (3. Mrz 2011)

```
generate = System.nanoTime() + (3*Math.pow(10, 9));
     if (System.nanoTime() > generate){
```

Wenn du das so schreibst wird die Bedingung nie erfuellt werden, da eine Zeitpunkt + 3 Sekunden immer groesser ist als die aktuelle Zeit. Du musst warten bis es soweit ist.

Entweder machst du das mit 
	
	
	
	





```
delay(3000)
```
, sofern du nichts anderes intitalsieren musst. Ansonsten kannst du auch den 
	
	
	
	





```
java.util.Timer
```
 verwenden.


----------



## Bengaltiger (3. Mrz 2011)

dankööö


----------



## Bengaltiger (4. Mrz 2011)

tage dieb du scheinst dich mit gamgegrid aus zu kennen

gibt es eine Möglichkeit das Logo aus dem Fenster zu bekommen,
da ich mein Spiel veröffentlichen möchte und das kommt so unprofessionell rüber...


lg


----------



## tagedieb (4. Mrz 2011)

???:L Welches Logo meinst du?
Wenn du das Icon meinst so kannst du das mit der Swing API abaendern.



```
URL url = getClass().getClassLoader().getResource("sprites/rocket.jpg");
		if (url != null) {
			try {
				BufferedImage image = ImageIO.read(url);
				getFrame().setIconImage(image);
			} catch (IOException e)
			{
			}
		}
```


----------



## Bengaltiger (4. Mrz 2011)

jo das icon im fenster links oben..

sry dass ich frage wo komt der code hin
habs in satic void main und in dem Konstruktur rein gemacht klappt net 

natürlich hab ich import javax.swing.*;
 impotiert


----------



## tagedieb (5. Mrz 2011)

Der Code kommt in den Konstruktor. Kannst gleich nach 
	
	
	
	





```
setTitle(..);
```
 einfuegen.

Was klappt den nicht? Kompilieren oder Ausfuehren?
Ich spekuliere das du das Bild nicht laden kannst.


```
URL url = getClass().getClassLoader().getResource("sprites/rocket.jpg");
```

hast du den Pfad bei dir angepasst? Liegt der sprites ordner IN deinem source folder oder ist selber als source folder definiert oder keines von beidem? Je nachdem musst du das Bild anders laden. Ohne Code und Projektstruktur zu kennen ist schwierig zu helfen..

versuch mal den untenstehen code einzufuegen. eventuell klappt ja eine der 3 varianten


```
String imagePath = "sprites/rocket.jpg";
		
		// load image from classpath - works when not null
		URL url = getClass().getClassLoader().getResource(imagePath);
		System.out.println(url);
		// load image from classpath with leading / - works when not null
		URL url2 = getClass().getClassLoader().getResource("/" + imagePath);
		System.out.println(url2);
		// load image in relation to current location - works when true
		File file = new File(imagePath);
		System.out.println(file.exists() + " " + file.getAbsolutePath());
```


----------



## Bengaltiger (5. Mrz 2011)

klappt net URL bzw. File bzw. BuffredImage und so werden nicht erkannt

was muss ich da noch importieren ???

kontruktur:

```
public test(){
   super(600, 700,1,null,"sprites/galaxy.jpg",false);
     String bar;
     bar= String.format("RocketGun created by Imran ----> "+"Score: "+score+"   "+"Life: "+life+"   "+"Gun: "+gun+"");
     setTitle(bar);
     setSimulationPeriod(5);
     getBg().save();
     getBg().setFont(new Font("Arial", Font.CENTER_BASELINE, 16));
     getBg().drawText("Use the arrow-keys to move and spacebar to shoot.", new Point(100, 480));
     getBg().drawText("The game starts in 5 seconds!", new Point(150, 500));
                   }
```


----------



## Bengaltiger (5. Mrz 2011)

das bild wird erkannt!!!


----------



## bengal-tiger (5. Mrz 2011)

danke der erste und lange code ging nachdem ich erst das alles importiert habe:
import java.net.URL;
import java.awt.image.*;
import java.io.IOException;
import javax.imageio.ImageIO;

lg


----------

