TImage um eigene Fields erweitern - ohne extends?
Übersicht

Gray FoxBetreff: TImage um eigene Fields erweitern - ohne extends? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo,
ich habe ein kleines Problem mit TImage. Ich würde gerne diese Klasse um mehrere Eigenschaften erweitern, aber wenn ich mit extends eine neue Klasse kreiere, dann funktionieren die eingebauten DrawImage-Befehle nicht mehr, weil sie ja ein Image vom Typ TImage erwarten. Zum Hintegrund: Ich möchte u.a. die Eigenschaften currentFrame:int und currentTime:int implementieren. Gibt es dafür einen Workaround oder müsste ich dann eigene DrawImage- / DrawAnimImage-Funktionen schreiben? |
||
Gray Fox |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wohl was gefunden -> https://www.blitzforum.de/foru...ght=timage
hmm.. |
||
![]() |
DaysShadow |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du kannst das Modul brl.max2d bzw. die darin liegende image.bmx verändern.
In der image.bmx liegt TImage und da kannst du ja die benötigten Fields hinzufügen -> Modul neu erstellen, fertig. btw, ein Edit hätte gereicht, pushen ist hier nicht, weißt du doch sicherlich. |
||
Blessed is the mind too small for doubt |
Gray Fox |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Kann ich die Datei so verändern bzw. einbinden, dass sich die Änderung nicht auf BMAX selbst, sondern nur auf das spezielle Projekt auswirkt? | ||
![]() |
DaysShadow |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wo ist das Problem? Es wirkt sich ja in keiner Weise auf bestehende Projekte aus, ob da nun ein Field in TImage ist das nicht genutzt wird oder nicht, ist an sich ja egal.
Die Programme werden dann minimal ein paar Bytes mehr im Speicher benötigen, aber sonst sollten da keine Bedenken sein. Mir fällt aber auch keine gescheite Lösung ein. Das selbe Modul kopieren und einfach z.B. als brl.max2d2 zu erstellen würde zwar funktionieren, allerdings wäre dann wohl das Zusammenspiel mit den anderen Modulen hin. |
||
Blessed is the mind too small for doubt |
Gray Fox |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Eigentlich gibt es kein Problem. ![]() Ich werde es mal ausprobieren! Wäre natürlich schön, wenn es so einfach gehen würde. EDIT: War eigentlich nicht als Push gedacht. ![]() EDIT² -> Funktioniert doch nicht so einfach. Ich habe BlitMax/mod/brl.mod/max2d.mod/image.bmx -> Type TImage um folgenden Code erweitert: BlitzMax: [AUSKLAPPEN] Field curFrame:Int Dann habe ich die Datei gespeichert und BLIde neu gestartet, aber leider sehe ich von der Änderung nicht viel. Auch beim Start bemängelt das System, dasss es die Eigenschaften nicht gibt... Muss ich das Modul eventuell neu "kompilieren"? |
||
![]() |
NoobodyBetreff: Re: TImage um eigene Fields erweitern - ohne extends? |
![]() Antworten mit Zitat ![]() |
---|---|---|
Gray Fox hat Folgendes geschrieben: Ich würde gerne diese Klasse um mehrere Eigenschaften erweitern, aber wenn ich mit extends eine neue Klasse kreiere, dann funktionieren die eingebauten DrawImage-Befehle nicht mehr, weil sie ja ein Image vom Typ TImage erwarten.
Der ganze Witz von Extends ist ja gerade, dass du das tun kannst. Ein Type kann sich immer als die Klasse ausgeben, von der er erbt, sozusagen. So etwas zum Beispiel kompiliert (wird natürlich abstürzen, da das Bild nicht korrekt initialisiert wurde, aber es kompiliert auf jeden Fall): BlitzMax: [AUSKLAPPEN] Type TExtendedImage Extends TImage |
||
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun |
Gray Fox |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich habe zum Test folgendes in mein Projekt eingefügt:
BlitzMax: [AUSKLAPPEN]
Beim Start stürzt das Programm mit folgender Fehlermeldung ab: BlitzMax: [AUSKLAPPEN] Unhandled Exception:Attempt To access Field Or Method of Null Object Wenn ich cImage in TImage ändere, wird das Bild korrekt angezeigt. |
||
![]() |
DaysShadow |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du musst natürlich das Modul neu kompilieren, wenn du Änderungen an einem Bestandteil dessen vorgenommen hast, habe ich aber doch auch geschrieben, es sei denn du verstehst unter "erstellen" irgendetwas anderes ![]() |
||
Blessed is the mind too small for doubt |
Gray Fox |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ja, habe es anders aufgefasst, aber ok ![]() Kannst du mir einen Tip geben, wie ich das bewerkstelligen könnte? |
||
![]() |
skey-z |
![]() Antworten mit Zitat ![]() |
---|---|---|
STRG+D
wenn es nicht klappt MinGW installieren, die Anleitung dazu findest du hier im Forum |
||
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz BAC#57: 2. Platz |
Gray Fox |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich werde es mit MinGW mal ausprobieren ![]() EDIT: Mit MinGW funktioniert es nun, ich wundere mich aber, dass Noobody Vorschlag nicht funktioniert(e). |
||
Gray FoxBetreff: Re: TImage um eigene Fields erweitern - ohne extends? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Noobody hat Folgendes geschrieben: Der ganze Witz von Extends ist ja gerade, dass du das tun kannst. Ein Type kann sich immer als die Klasse ausgeben, von der er erbt, sozusagen.
So etwas zum Beispiel kompiliert (wird natürlich abstürzen, da das Bild nicht korrekt initialisiert wurde, aber es kompiliert auf jeden Fall): BlitzMax: [AUSKLAPPEN] Type TExtendedImage Extends TImage Ich habe mich gerade noch einmal an diesem "Konstrukt" versucht, aber es will nicht funktionieren. So sieht der erweiterte Type aus: BlitzMax: [AUSKLAPPEN]
So sieht die Ladeprozedur aus: BlitzMax: [AUSKLAPPEN]
Es wird immer null zurückgegeben, obwohl die Datei, die mit path angegeben wird, existiert. Wenn ich alles auf TImage umändere, dann klappt es. Hat jemand eine Idee, wo mein Fehler liegen könnte? |
||
- Zuletzt bearbeitet von Gray Fox am Mo, Jun 13, 2011 15:31, insgesamt einmal bearbeitet
Gray FoxBetreff: Re: TImage um eigene Fields erweitern - ohne extends? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Sorry, doppelpost.. | ||
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
LoadImage gibt auch ein TImage-Objekt zurück. (keines einer davon erbenden Klasse)
Da TImage kein TExtendedImage ist, lässt sich die Referenz nicht umcasten; das Ergebnis ist Null. Stattdessen kannst du den Inhalt des TImage-Objektes in ein neues TExtendedImage-Objekt kopieren und dieses zurückgeben. mfG mpmxyz PS: Zu Noobodys Beispielcode und deinem Beitrag vom Sa, Mai 21, 2011 22:31: Noobody hat Folgendes geschrieben: (wird natürlich abstürzen, da das Bild nicht korrekt initialisiert wurde, aber es kompiliert auf jeden Fall)
|
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
Gray Fox |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
mpmxyz hat Folgendes geschrieben: Stattdessen kannst du den Inhalt des TImage-Objektes in ein neues TExtendedImage-Objekt kopieren und dieses zurückgeben. Wie muss man sich das vorstellen bzw. wie würde das in BMax speziell aussehen? |
||
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
BlitzMax: [AUSKLAPPEN] Local orgImage:TImage=LoadImage(file) Es gibt auch die Möglichkeit, das Reflection-Modul zu nutzen. (brl.Reflection) Das hat den Vorteil, dass du dich nicht darum kümmern musst, welche Eigenschaften es gibt: BlitzMax: [AUSKLAPPEN] Local orgImage:TImage=LoadImage(file) Falls dir an dieser Stelle Fragen aufkommen, was "Reflection" ist: BlitzMax speichert wie viele andere Sprachen auch zusätzlich zum eigentlichen Programm Daten, welche den Aufbau der einzelnen Klassen beschreiben. Über Reflection kann man auf diese Daten zugreifen und zum Beispiel herausfinden welche Eigenschaften und Methoden diese hat. (weitere Möglichkeiten: Ändern und Bestimmen von Eigenschaften, Aufrufen von Methoden, Erstellen von Objekten und Abrufen von "Metadaten") Damit kann man dann Kopierroutinen, wie diese, oder automatische Lade-/Speicherfunktionen programmieren. mfG mpmxyz |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
Gray Fox |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ah, ok, jetzt verstehe ich, was du mit dem Kopieren gemeint hast ![]() Darauf bin ich im ersten Moment gar nicht gekommen. Das zweite Beispiel werde ich mir auch mal näher anschauen. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group