hallo leute ich bin also dabei das spiele Tutorial 2 von quaxli zu erweitern nun bin ich aber auf etwas gestoßen, was mir ???:L bereitet.
Nun ich habe eine Gegner Klasse(Grandma), die dazugehörige factory Klasse(FactoryGrandma) und eine Level01 klasse. Nun möchte ich in der Level Klasse sowohl das Mapdisplay als auch die Gegner laden.
Wird also die doInitialisations Methode der ScrollGame Klasse aufgerufen, wird das Level01 Objekt erstellt und damit auch das MapDisplay und die Gegner..
soweit so gut.. werfen wir nun einen Blick auf die Level01 Klasse:
in der doIni() methode(zeile 29) soll also nun durch die Factory alle gegner in ein Array geladen werden..Compilieren tut er, schmeißt aber eine Null pointer exeption z.b an der stelle G1.dologic(delta)(zeile 35). Darum vermute ich, dass die Factory Klasse dem Array keine Objekte übergibt, versteh nur nich warum da ich das auch schon so in anderen Projekten(weniger komplexen) verwendet habe..
Hier noch die Faktory Klasse:
Nun ich habe eine Gegner Klasse(Grandma), die dazugehörige factory Klasse(FactoryGrandma) und eine Level01 klasse. Nun möchte ich in der Level Klasse sowohl das Mapdisplay als auch die Gegner laden.
Wird also die doInitialisations Methode der ScrollGame Klasse aufgerufen, wird das Level01 Objekt erstellt und damit auch das MapDisplay und die Gegner..
Java:
protected void doInitializations() {
setLib(SpriteLib.getInstance());
startscreen = getLib().getSprite("pics/startscreen.gif");
car = new Car(getLib().getSprite("pics/Airplane.gif",3, 1),400,300,200,this);
W = new Weapon(getLib().getSprite("pics/W1.gif",1,1),200,200,200,this,50,6);
L01=new Level01(this);
L01.doIni();
}
Java:
package LevelC;
import java.awt.Graphics;
import java.awt.geom.Rectangle2D;
import main.ScrollGame;
import tutorial.map.MapDisplay;
import Enemy.FactoryEnemySprite;
import Enemy.FactoryGrandma;
import Enemy.Grandma;
public class Level01 extends LevelI {
private FactoryGrandma G1Factory;
Grandma G1[];
public MapDisplay map;
FactoryEnemySprite Enemy1Fac;
private boolean isStarted;
public Level01(ScrollGame p){
super(p);
this.setStarted(true);
this.map = new MapDisplay("level/newlevel.txt","pics/stars.gif","pics/shadow2.gif",1,1,parent,5,5);
this.getMap().setVisibleRectangle(new Rectangle2D.Double(50,map.getHeight()-map.getHeight(),
map.getWidth(),map.getHeight()));
this.G1Factory = new FactoryGrandma(parent);
G1 = new Grandma[20];
}
public void doIni(){
G1 = G1Factory.Create(20, 100, 50);
}
public void doLogic(long delta){
getMap().doLogic(delta);
for(int i = 0;i<G1.length;i++){
G1[i].doLogic(delta);
}
}
public void drawLvl(Graphics g){
if(isStarted()){
g.draw3DRect(0, 0, 800, 600,false);
getMap().drawVisibleMap(g);
for(int i = 0;i<G1.length;i++){
G1[i].drawObjects(g);
}
}
}
void setStarted(boolean isStarted) {
this.isStarted = isStarted;
}
boolean isStarted() {
return isStarted;
}
void setMap(MapDisplay map) {
this.map = map;
}
public MapDisplay getMap() {
return map;
}
Hier noch die Faktory Klasse:
Java:
package Enemy;
import main.ScrollGame;
public class FactoryGrandma {
protected ScrollGame parent;
public FactoryGrandma(ScrollGame p){
this.parent= p;
}
public Grandma[] Create(int anzahl,int x, int firstPos)
{
Grandma[] Grandmas = new Grandma[anzahl];
for (int i=0 ; i<Grandmas.length ; i++)
{
Grandmas[i]= new Grandma(parent.getLib().getSprite("pics/Grandma.gif",6,1),200,200,200,parent,x,firstPos);
firstPos += 50;
}
return Grandmas;
}
Zuletzt bearbeitet von einem Moderator: