Spieleprogrammierung

  • Ich hab Probleme mit der Programmierung des OnKlickListeners.
    Könnt Ihr mir weiterhelfen?
    Es soll auf den Käfer geklickt werden damit er dann losrennt. Sobald er nochmal angeklickt wird, soll er wieder stehen bleiben.
    Könnt ihr mir weiterhelfen?



  • naja die fehlermeldung weist darauf hin das ein objekt noch nicht initialisiert ist, auf das du zugreifen willst.
    du solltest also schauen wo die exception in deiner Activity fliegt.


    Tipp: es steht schon in der Fehlermeldung;
    com.example.flava.kaefertest/com.example.flava.kaefertest.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference

  • Erstmal Danke Ihr zwei,


    ich bekomm es leider nicht hin.
    Hab jetzt die Anzeige2 in der GameView Klasse initialisiert.
    Allerdings kommt immernoch eine NullPointerException.
    Ist es so einfach möglich einen OnTouchListener über eine 2. Klasse aufzurufen?
    Oder was mach ich falsch >.<


  • du machst drei Fehler.


    1. Du greifst auf eine variable zu, die in einem objekt steckt. Das macht man nicht.
    Du solltest dann lieber in deinem Objekt eine Methode schreiben die vielleicht setTouchListener heißt und dort dann den listener reingeben.


    2. Klassenvariablen sollten immer private sein.


    3. in deinem Objekt steckt die Variable Anzeige2, die ist nicht initialisiert und deswegen fliegt die Nullpointerexception

  • Ich bin der Meinung ich habe jetzt deine 3 genannten Fehler behoben.
    Dazu habe ich noch eine weitere Klasse erstellt.
    Ich bekomme aber immer noch die NullPointerExpection ;(
    Ich verzweifel hier echt noch :(
    Tut mir echt leid, dass ich mich so doof anstelle :S






  • Das macht er doch schon Facebamm. Die Gameview bekommt die mainactivity als context mit.


    Was ich aber nicht verstehe ist, warum der Task eine eigene Activity ist.


    1. Entferne die vererbung in deinem Task, die hat da nix zusuchen
    2. in deiner Gameview machst du mal nicth findViewByID sondern context.findViewByID.


    Dein Problem tritt auf weil du in deinem Task eine neue instanz der GameView erstellst und dort dann eine nicht durch Android gestartete Activity als Context übergibst. Das macht auch absolut garkeinen sinn, das du es tust.


    Der Task ist einfach ein Task, der soll nichts anzeigen sondern nur manipulieren.

  • Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference

    Context.getResources() <- bedeutet es nicht, das er nicht auf die getResources() zugreifen kann ?


    denn wenn er jetzte


    Sollte es eig Klappen

  • Code
    public GameView(Context context) {
            super(context);
            Main = new MainActivity();
            Anzeige1 = (ImageView) ((MainActivity)this.getContext()).findViewById(R.id.background);
            Anzeige2 = (ImageView) ((MainActivity)this.getContext()).findViewById(R.id.buggy);
        }

    So startet die App endlich mal :DDas Problem ist nur, ich weiß net ganz was ich da gemacht habe :(Könntest du mir das versuchen zu erklären?

  • Anzeige1 = (ImageView) ctx.findViewById(R.id.background); //Edit
    Anzeige2 = (ImageView) ctx.findViewById(R.id.buggy); //Edit

    Wenn ich das so schreibe, kommt eine Fehlermeldung:
    Cannot resolve the methode "findViewById(int)".


    Wenn ich jetzt auf Anzeige2 klicke, stürzt es wieder ab:


    Was ist denn an dem moveObject nicht in Ordnung?

  • lest ihr manchmal auch den code den ihr schreibt?


    Code
    public GameView(Context context) {
            super(context);
            Main = new MainActivity();
            Anzeige1 = (ImageView) ((MainActivity)this.getContext()).findViewById(R.id.background);
            Anzeige2 = (ImageView) ((MainActivity)this.getContext()).findViewById(R.id.buggy);
        }

    hergott.
    warum? Du gibst im Konstruktor einen Context rein, warum zum teufel castest du den Context einer View zu MainActivity nur um deren Contextmethode "findViewById" nutzen zu können? Der Context der View wird doch in dem aufgerufenen Superkonstruktor gesetzt.


    Auf Deutsch heißt das, die "context" Variable die du in deinen Konstruktor reingibst ist das selbe wie "((MainActivity)this.getContext())"


    und ich habe oben bereits geschrieben "nutze doch einfach context.findViewById". Ich schreibe sowas doch nicht aus spaß.
    Da geb ich schon direkt vor was zutun ist, und keiner tuts. ._.


    Context.getResources() <- bedeutet es nicht, das er nicht auf die getResources() zugreifen kann ?

    Ja genau das bedeutet es, das liegt eben daran dass er dort irgendwas krudes geschrieben hat, anstatt den context zu nutzen den er im konstruktor der GameView hineingibt.

  • 2. in deiner Gameview machst du mal nicth findViewByID sondern context.findViewByID.

    und ich habe oben bereits geschrieben "nutze doch einfach context.findViewById". Ich schreibe sowas doch nicht aus spaß.
    Da geb ich schon direkt vor was zutun ist, und keiner tuts. ._.

    Ich habs gelesen und auch versucht, kommt aber selbe Fehlermeldung:
    Cannot resolve the methode "findViewById(int)".



    Nimm nen Handle dazu

    Ohje, damit hab ich noch nie gearbeitet. Ich werde es mal versuchen :D

  • dann gibst du in den konstruktor den falschen Context rein. An der angegebenen Stelle musst du aber nunmal den Context deiner MainActivity benutzen.


    Dein Fehler fliegt auch nicht, bei deiner normalen GameView die in der MainActivity, sondern bei dem kruden Konstrukt in deinem Task. Du gibst dort deinen Task als Activity aus, was er aber eigentlich nicht ist, und dann versuchst du damit eine view zu erstellen. Wölltest du in dem Task eine View instaniieren, müsstest du den Context deiner MainActivity in den Task geben und ihn dort dann an die View übergeben.


    ABER: sowas macht man nicht!
    Views werden in Activities oder Fragments erstellt. Der Task wird in der Activity erstellt, tut irgendwas und meldet dann an die Activity oder das Fragment zurück was getan werden soll. Eine Möglichkeit, je nach implementierung, ist die Nutzung eines Handlers.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!