Attempt to access field or method of Null Object

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

Klip

Betreff: Attempt to access field or method of Null Object

BeitragFr, Nov 18, 2005 11:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich probiere im Moment, einen Mapmanager zu schreiben, der den Wechsel der Levelgrafiken erleichtert. Leider gibt es dabei eine Fehlermeldung und ich weiß nicht, wieso.

Zum Verständnis ein wenig Code:

BlitzMax: [AUSKLAPPEN]

' Vor der Hauptschleife:
Global MAPMANAGER:TMapManager = New TMapManager
MAPMANAGER.init() ' initialize Mapmanager.

' Im Type selbst:
Method init()
Self.SetBackground(1)
mapnumber = 0
Self.NextMap()
EndMethod

Method SetBackground(BGnumber:Int)
BGname:String = \"bg\"+BGnumber+\".png\"
BG_image:TImage = LoadImage(\"incbin::\"+BGname)
?Debug
Print(\"## changed background to: \"+\"'\"+BGname+\"'\") ' Bis hierhin klappt es, die Meldung wird nämlich im Output ausgegeben.
?
EndMethod

Method DrawBackground(BG_image:TImage,BG_x:Int,BG_y:Int)
DrawImage(BG_image,BG_x,BG_y) ' Hier gibt es die Fehlermeldung.
EndMethod

' ----------------------------------------
' Aufruf von DrawBackground() in der Hauptschleife:

MAPMANAGER.DrawBackground(BG_image:TImage,BG_x:Int,BG_y:Int)


Ich behandle meine Methoden zum zeichnen der Karte selbst (DrawMap, SetMap, NextMap, usw.) gleich (zumindest habe ich keinen Unterschied gefunden) und trotzdem kommt dort kein Fehler.

Woran könnte es liegen?

Anbei noch eine kleine Frage: Habe nicht den Befehl gefunden, der in BlitzBasic vorher FreeImage hieß, weiß den einer zufällig?

bruZard

BeitragFr, Nov 18, 2005 11:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Hast Du ein "Graphics" gesetzt? Hast Du den BRL.PNGLoader importiert?

Ein "FreeImage" gibt es nicht. Gewöhne Dich daran zu wissen über welche Laufzeit das Image benötigt wird, verwende es dort lokal und der GC entfernt das Image selbstständig aus dem Speicher. Zusätzlich, falls Du abends auch immer alle Türen zuhause zuschliesst, kannst Du auch noch ein "image:TImage = null" einfügen.
PIV 2,4GHz - 1GB DDR 333 - ATI Radeon9600 - WinXP - DX9.0c - BMax 1.14 - B3D 1.91 - 1280x1024x32

User posted image
 

klepto2

BeitragFr, Nov 18, 2005 11:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Hast du BG_Image vorher Global deklariert?

Ansonsten probier es mal so:

Code: [AUSKLAPPEN]

   Method SetBackground:TImage(BGnumber:Int)
                BGname:string         = "bg"+BGnumber+".png"
                BG_image:TImage = LoadImage("incbin::"+BGname)
                ?Debug
                Print("## changed background to: "+"'"+BGname+"'")  ' Bis hierhin klappt es, die Meldung wird nämlich im Output ausgegeben.
                ?
                Return BG_Image
        EndMethod

        Method DrawBackground(BG_image:TImage,BG_x:Int,BG_y:Int)
                DrawImage(BG_image,BG_x,BG_y)  ' Hier gibt es die Fehlermeldung.
        EndMethod

' ----------------------------------------
' Aufruf von DrawBackground() in der Hauptschleife:

Local BG_Image:TImage  = SetBackGround(BGnumber)
MAPMANAGER.DrawBackground(BG_image:TImage,BG_x:Int,BG_y:Int)
Matrix Screensaver
Console Modul für BlitzMax
KLPacker Modul für BlitzMax

HomePage : http://www.brsoftware.de.vu
 

Dreamora

BeitragFr, Nov 18, 2005 16:22
Antworten mit Zitat
Benutzer-Profile anzeigen
gibt mal beim Debug Output auch den Image Handle aus. Falls das laden des Image fehl schlug, müsste das dann da sichtbar sein.

Strict am Anfang des Programmes (oder besser SuperStrict) setze ich ma voraus, um falsche Variablennamen ausschliessen zu können
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group