Objekt der Klasse A in der Klasse B verwenden und manipulieren

HiTTi

Mitglied
Hallo zusammen,

ich möchte gerne auf einer Engine ein kleinen und einfaches Minigame schreiben. Dies ist auch soweit fertig, bis auf die "Go" Aktion. Meine Go Akiton soll eine Art Angelhaken werden der beim Überlappen von Sprites Punkte gibt.

Nun habe ich in Klasse A meine Sprites angelegt.
Java:
public class MyMiniGame extends MiniGame
{
    
     
    protected boolean overlap= false;
    
    
    private int goaktions;
    
    private Boolean currentGamerP = false;
    private Boolean currentGamerG = false;
    
    private int gscore;
    
    public int getGscore() {
        return gscore;
    }


    public void setGscore(int gscore) {
        this.gscore = gscore;
    }


    
    
    private int pscore;
    
    public int getPscore() {
        return pscore;
    }


    public void setPscore(int pscore) {
        this.pscore = pscore;
    }
    
    MyFish hai    = new MyFish(100,100,this);
    MyFish fisch1 = new MyFish(100, 100, this);
    
    MyFish fisch2 = new MyFish(100, 100, this);
    MyFish fisch3 = new MyFish(100, 100, this);
    Sprite steg = new Sprite(650, 250, this);
    
    
    
    
    Sprite fischfilet = new Sprite(50, 50, this);
    MyFishman gamer = new MyFishman(100, 100, this);
    MyFishman pc = new MyFishman(100, 100, this);

Ich habe mir dann für alle wichtigen Variablen wie dem Playerscore und ComputerScore getter und Setter geschrieben. Sowie ein Boolean für die Flag, welche gesetzt wird, wenn der eine oder andere Spieler gerade die Go Aktion aufruft.

Meine Klasse B verarbeitet dann die Go Aktionen und dort habe ich auch die Hakensprite angelegt.
Java:
public abstract class MySprite extends Sprite {

    public MySprite(int size_x, int size_y, MiniGame theGame) {
        super(size_x, size_y, theGame);
        MySprite.mg = theGame;
        
    }
    
    protected static final int BASE_SPEED = 200;
    protected int speedFactor = 1;
    static MiniGame mg;
    static MyMiniGame mmg;
    
    int pscore,gscore;
    
    Sprite haken = new Sprite(45,400, mg);
    Timer timer = new Timer();
    
    
    public void actionPerformed(Action action) {

        
        int speed = BASE_SPEED * speedFactor;
        switch (action) {
        case UP:
            animate(0, -speed);
            
            break;
        case DOWN:
            animate(0, speed);
            
            break;
        case LEFT:
            animate(-speed, 0);
            
            break;
        case RIGHT:
            animate(speed, 0);
            
            break;
        case GO:
            haken.paintImage("haken.png");
            haken.setPosition(getXPosition() ,getYPosition()-haken.getHeight());
            
            timer.schedule(new TimerTask() {
                  @Override
                  public void run() {
                    haken.dontShow();
                  }
                }, 200);
            
            // Abfrage wenn Fisch getroffen wird
            if(haken.overlapsSprite(mmg.getFisch1())||haken.overlapsSprite(mmg.getFisch2())||haken.overlapsSprite(mmg.getFisch3())){
                gscore= mmg.getGscore();
                pscore= mmg.getPscore();
                if(mmg.getCurrentGamerG()==true)
                {
                    gscore++;
                    mmg.setGscore(gscore);
                }
                if( mmg.getCurrentGamerP()==true)
                {
                    pscore++;
                    mmg.setGscore(pscore);
                }
                
            }
            
            
            
            
            break;
        default:
            break;
        }
    }
}
Das Problem ist, bis jetzt bekomme ich zwar die Hakensprite immer kurz angezeigt aber es gibt auch eine java.lang.NullPointerExecption.
Zudem weiß ich nicht richtig, wie ich das Verfahren anspassen soll.
Die Schwierigkeit liegt bei mir darin, wie weiß ich, welcher Spieler gerade die Go Aktion ausführt und wie kann ich auf die Objekte der Klasse A zugreifen und in Klasse B mit verarbeiten. Denn der Haken soll einen Fisch treffen und dann 5 Punkte auf den jeweiligen Score addieren.

Ich hoffe ich hab es einigermaßen verständlich erklärt.

Mein Versuch war es mit einer Referenz auf die Klasse und Settern/Gettern auf die benötigten Objekte/Variablen
zuzugreifen.
Es wird wohl ein anderer Weg benötigt.

Hoffentlich kann mir einer von euch helfen :)

Schönen Sonntagabend,
HiTTi
 

Harry Kane

Top Contributor
Wenn irgendwo eine Exception fliegt, poste bitte den stack trace und den Code, der sie hervorruft.
Ehrlich gesagt, kann ich deinen Äußerungen so nur schwer folgen.
 

HiTTi

Mitglied
Hallo Harry Kane,

Danke für deine Antwort.

Leider kann ich nur die Exception posten
2015-06-22 09:02:44 ERROR [Timer-0] MiniGame:583 - java.lang.NullPointerException
Ich komme an die MiniGame nicht ran.

Die Engine habe ich importiert und dann meine Klassen erstellt. Es läuft ja auch alles.
Ich habe halt nur bei dem letzten kleinen Teil Problemen, weil ich von meiner Klasse A nicht auf ein Objekt der Klasse B zugreifen kann.

Das ist ein Auszug aus meiner Klasse B(MySprite):
Java:
public abstract class MySprite extends Sprite {

    public MySprite(int size_x, int size_y, MiniGame theGame) {
        super(size_x, size_y, theGame);
        MySprite.mg = theGame;
        
    }
    
    protected static final int BASE_SPEED = 200;
    protected int speedFactor = 1;
    static MiniGame mg;
    
    
    
    
    Sprite haken = new Sprite(45,400, mg);
    public Sprite getHaken() {
        return haken;
    }


    public void setHaken(Sprite haken) {
        this.haken = haken;
    }

Auf dieses Sprite Haken muss ich in der Klasse A (MyMiniGame) zugreifen und versuche dies in Klasse A über static MySprite ms;

Dann wollte ich den Haken über ms.haken in der Klasse A weiter bearbeiten. Z.B welche Aktion beim Überlappen mit anderen Sprites passieren.

Ich hoffe es ist etwas deutlicher geworden.

LG HiTTi
 

Harry Kane

Top Contributor
MyMiniGame hat kein static MySprite ms.
In MyMiniGame legst du ja verschiedenen Sprites an. Warum nicht auch einen für den Haken? Und warum sollte der Haken-Sprite wie von dir angedeutet, static sein?
 

HiTTi

Mitglied
In der Klasse MySprites verarbeite ich die Aktionen, welche der Computer und der Spieler machen. Dort brauche ich dann bei der Go Aktion die Haken Sprite. Ich könnte natürlich die haken Sprite auch in MyMiniGame anlegen, dann hätte ich aber das selbe Problem, dass ich dann in der anderen Klasse auf das Hakensprite zugreifen muss. Denn bei Go soll er den Haken ja zeichnen. Evtl. habe ich Static noch nicht richtig verstanden, aber ich wollte damit erreichen, dass es keine NullPointer Exception gibt. Denn das Objekt auf welches ich in MyMiniGame zugreifen will, muss ja bereits erstellt worden sein, sonst gibt es ja kein Objekt auf welches ich zugreifen kann.
 

Harry Kane

Top Contributor
In deiner MySprite-Klasse hast du 2 statische Variablen mg und mmg. mmg wird soweit ich das sehen kann, nie initialisiert (das würde ich ändern), mg nur wenn der Konstruktor von MySprite aufgerufen wird. Da MySprite Sprite erweitert und du einige Sprite-Objekte anlegst, ist davon auszugehen, dass mg initialisiert ist.
Die Variable Haken von MySprite wird möglicherwiese bereits initialisiert, bevor mg initialisiert ist, und bekommt deshalb einen NullPointer.
Ausserdem vestehe ich nach wie deine grundlegende Programmlogik nicht. Es gibt eine nicht-abstrakte Klasse Sprite, die du mit einer abstrakten Klasse MySprites erweiterst. Das kommt mir schon komisch vor.
Ausserdem verstehe ich nicht, wieso du die Aktionen in MySprites verarbeiten willst und nicht in MyMiniGame. Ganz grob würde ich mir den Aufbau ungefähr so vorstellen:
1. MyMiniGame hält Referenzen auf alle Sprites.
2. MyMiniGame ist für die Ereignisverwaltung zuständig und implementiert dazu die actionPerformed-methode die aktuell noch in MySprite liegt.
3. Bei einer entsprechenden Aktion manipuliert oder untersucht MyMiniGame die passen Sprites, d. h. zeigt/versteckt den Haken oder überprüft, ob die Koordinaten des Hakens mit den Koordinaten eines Fisches übereinstimmen.
 

HiTTi

Mitglied
Hallo Harry Kane,

ok, das probiere ich mal. MySprite habe ich nur angelegt um etwas übersichtlicher arbeiten zukönnen. Ich werde mal alles in die MyMiniGame integrieren und dann nochmal testen. Dann sollte es ja funktionieren.

Danke nochmal!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Arif Maus-Objekt im Player Klasse implementieren !? Spiele- und Multimedia-Programmierung 2
B String zu Objekt einer eigenen Klasse casten Spiele- und Multimedia-Programmierung 13
pcfreak9000 Objekt-Vorlagen Spiele- und Multimedia-Programmierung 0
M [JOGL] Maus über einem gezeichnetem Objekt abfragen? Spiele- und Multimedia-Programmierung 5
U Kann nur ein Objekt mit LWJGL rendern Spiele- und Multimedia-Programmierung 2
kaoZ Graphics Objekt liefert null Spiele- und Multimedia-Programmierung 14
E Java3D Objekt skalieren per JSlider/JButton Spiele- und Multimedia-Programmierung 10
D Probleme mit objekt initializirung mit Mouselistener Spiele- und Multimedia-Programmierung 10
S Java3D: Primitives zu einem Objekt kombinieren Spiele- und Multimedia-Programmierung 7
T LWJGL 3D Objekt Collision: Wie? Spiele- und Multimedia-Programmierung 11
S Wie erkennt ein Objekt ein anderes? Spiele- und Multimedia-Programmierung 7
B j3d mehr als ein Objekt rotieren Spiele- und Multimedia-Programmierung 18
G Hindernis vor Objekt erkennen Spiele- und Multimedia-Programmierung 6
W Java3D: Kanten die hinter einem Objekt liegen werden gezeigt Spiele- und Multimedia-Programmierung 2
S Graphics Objekt weiterreichen? Spiele- und Multimedia-Programmierung 4
H Eigenes 3D Objekt Spiele- und Multimedia-Programmierung 20
D 2D Objekt fragmentieren Spiele- und Multimedia-Programmierung 3
V Jogl: Objekt trotz Rotation immer in gleiche Richtung bewegen Spiele- und Multimedia-Programmierung 5
M [J3D]Dynamische Erzeugung vom Objekt Box Spiele- und Multimedia-Programmierung 5
Kr0e OpenGL .. Pixel Buffer Objekt oder Frame Buffer Object? Spiele- und Multimedia-Programmierung 2
N Objekt entgegengesetzt bewegen Spiele- und Multimedia-Programmierung 8
M BoundingBox ist nicht bündig am Objekt Spiele- und Multimedia-Programmierung 5
K Kanten anzeigen lassen in einem Shape3D-Objekt Spiele- und Multimedia-Programmierung 4
S geladenes Objekt -> Material Zuweisen. Spiele- und Multimedia-Programmierung 4
J Picking Selection auf ein Objekt begrenzen ! Spiele- und Multimedia-Programmierung 6
C Objekt bei Buttonklick zeichnen Spiele- und Multimedia-Programmierung 16
G JOGL: per Mausbewegung Objekt verschieben Spiele- und Multimedia-Programmierung 2
C Objekt zwischen 2 Geraden? Spiele- und Multimedia-Programmierung 3
D 3D Objekt entlang Geraden Spiele- und Multimedia-Programmierung 4
Quaxli Picking: Vom Shape3D zum eigentlichen Objekt Spiele- und Multimedia-Programmierung 2
G Objekt nicht ins negative oder null skalieren Spiele- und Multimedia-Programmierung 2
G Objekt verschieben Spiele- und Multimedia-Programmierung 6
G Textur laden auf ein eingelesenes 3D Objekt Spiele- und Multimedia-Programmierung 4
I ScaleInterpolator verschiebt Objekt immer in den Ursprung. Spiele- und Multimedia-Programmierung 2
V Objekt per Tastendruck anzeigen/verschwinden lassen? Spiele- und Multimedia-Programmierung 4
R Objekt mit cos/sin verschieben Spiele- und Multimedia-Programmierung 27
G Kein Licht in Box-Objekt Spiele- und Multimedia-Programmierung 2
K Ein 3D-Objekt mit Maus auswählen Spiele- und Multimedia-Programmierung 5
D Alpha Objekt Spiele- und Multimedia-Programmierung 8
H Kompliziertes 3D-Objekt Spiele- und Multimedia-Programmierung 16
G Einen gif oder jpg Datei aus einem Graphics Objekt o. JFrame Spiele- und Multimedia-Programmierung 2
C Wie kann ich ein Objekt auf Tastendruck vor & zurück bew Spiele- und Multimedia-Programmierung 3
M Position der ViewingPlatform als Point3d-Objekt? Spiele- und Multimedia-Programmierung 12
S 3D Objekt erstellen und darstellen Spiele- und Multimedia-Programmierung 4
G RotationInterp. setzt Objekt an Ursprungsposition zurück Spiele- und Multimedia-Programmierung 2
N Shape3D Objekt auf dem Bildschirm zentrieren Spiele- und Multimedia-Programmierung 2
T MouseMotionListener aus anderer Klasse verwenden. Spiele- und Multimedia-Programmierung 1
J Fertigungstechnik.. PLS HALP.. Quellcode vom Text in java-Klasse speichern Spiele- und Multimedia-Programmierung 2
H Zugreifen/Benutzen anderer Variable aus anderer Klasse Spiele- und Multimedia-Programmierung 1
C Java aus Klasse rausgehen Spiele- und Multimedia-Programmierung 2
S Eigene Klasse vec_t - 3 oder 4 Einheiten für x, y, z und w Spiele- und Multimedia-Programmierung 11
T Alle Referenzen zu einer Klasse aus Java Bytecode ersetzt, JVM sucht trotzdem diese Klasse Spiele- und Multimedia-Programmierung 1
K Klasse schließen & Kugelposition Spiele- und Multimedia-Programmierung 2
R Savegame als Datei, welche API-Klasse benutzen Spiele- und Multimedia-Programmierung 8
M Variable die eine Klasse enthält ändern Problem Spiele- und Multimedia-Programmierung 16
T Java-Klasse für Spielfeld? Spiele- und Multimedia-Programmierung 2
P Graphics Klasse Spiele- und Multimedia-Programmierung 3
G Was bewirkt die Klasse AxisAngle4d genau? Spiele- und Multimedia-Programmierung 12
G Polygon mittels der Klasse PathIterator Koordinateneckpunkte Spiele- und Multimedia-Programmierung 1
S Zur Laufzeit auf die Methode einer anderen Klasse zugreifen Spiele- und Multimedia-Programmierung 5
B Keine Graphics2D Klasse unter J# .Net??? Spiele- und Multimedia-Programmierung 6

Ähnliche Java Themen

Neue Themen


Oben