Addition auf (Mathe)Klassen anwenden?

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

M0rgenstern

Betreff: Addition auf (Mathe)Klassen anwenden?

BeitragMo, Nov 01, 2010 13:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Leute.
Ich weiß der Titel scheint im ersten Moment verwirrend und wahrscheinlich auch im zweiten.
Ich erklärs ganz schnell: Ich habe gemerkt, dass man mit Vektoren für die Position von Objekten im Spiel besser fährt als mit X und Y Attributen.
Deshalb bin ich dabei mir eine Vektoren Klasse zu schreiben (Ja die soll später auch so gut wie alles können).
Jetzt bin ich auch ein Problem gestoßen: Bei C# gibt es diese Klasse schon und da kann man ganz einfach Vector1 + Vector2 schreiben.
Meine Klasse sieht also (zum Teil) bisher so aus:

BlitzMax: [AUSKLAPPEN]
Type TVector2D
Field _fX:Float
Field _fY:Float
End Type


Wenn ich dann später schreibe MyVec1 + MyVec2 soll er einfach die entsprechenden Komponenten addieren. Geht das irgendwie oder muss ich dem ganzen eine "add" Methode spendieren?
So etwa:
BlitzMax: [AUSKLAPPEN]
Function Add:TVector2D(pVector:TVector2D)
Local x: Float, y:Float
x = this.x + pVector2.x
y = this.y + pVector2.y
Local tmpVec = TVector2D.Create(x,y)
Return tmpVec
End Function


Noch eine kurze Frage: Kommt BMax mit Überladungen klar?

lg, M0rgenstern

Thunder

BeitragMo, Nov 01, 2010 13:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Also das mit Vector1+Vector2 geht soweit ich weiß nicht. BlitzMax hat zwar auch Strings, und mit denen kann man auch so arbeiten, aber ich bezweifle, dass sich so ein Status auf Userdefined Types übertragen lässt.

Überladung kann BlitzMax afaik auch nicht. Allerdings kann da der Datentyp Object aushelfen.

mfg Thunder
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit

DaysShadow

BeitragMo, Nov 01, 2010 14:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Methoden- oder Funktionsüberladung und Operatoren für Types definieren ist bei BlitzMax leider nicht drin, du wirst bei der Add Methode bleiben müssen.
Blessed is the mind too small for doubt

M0rgenstern

BeitragMo, Nov 01, 2010 16:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Hm.
Okay schade.

Wie siehts mit der Überladung aus?

Thunder: Wie soll OBject da helfen? Sorry, aber ich weiß nicht wie du das meinst.

Lg, M0rgenstern

DaysShadow

BeitragMo, Nov 01, 2010 16:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Es gibt keine Überladung, liest du richtig? Wink

BlitzMax: [AUSKLAPPEN]
Method Add:TVector2i( pVector:TVector2i )
Method Add:TVector2f( pVector:TVector2f )


So etwas in einem Type ist nicht möglich, das meintest du doch oder?
Blessed is the mind too small for doubt

M0rgenstern

BeitragMo, Nov 01, 2010 19:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja DaysShadow, so etwas meinte ich.
Schade eigentlich das wär wirklich super.
Ich habe das schon gelesen, aber Zitat:
Allerdings kann da der Datentyp Object aushelfen.

Darauf wollte ich hinaus, also wie er das meinte.
Was er damit meint interessiert mich übrigens immernoch^^

Lg, M0rgenstern

Thunder

BeitragDi, Nov 02, 2010 12:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich meinte damit, dass sich Instanzen aus Userdefined Types und Stringobjekte nach Object casten lassen. Dadurch könntest du eine "Überladung" simulieren:

BlitzMax: [AUSKLAPPEN]
Function f(o:Object)
If t(o) Then
WriteStdout t(o).s
ElseIf String(o) Then
WriteStdout String(o).s
EndIf
EndFunction

Type t
Field s$="Hallo"
EndType

f(New t)
f(" Welt")


Funktioniert natürlich nicht für primitive Datentypen.
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group