[GELÖST] Type-variable in Funktion aufrufen?
Übersicht

CO2ehemals "SirMO"Betreff: [GELÖST] Type-variable in Funktion aufrufen? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo,
habe mal wieder ein schwer zu erklärendes Problem ![]() ![]() (Hier der Code: BlitzMax: [AUSKLAPPEN] Function UpdateStats(ProfileName:Object)) So, 1. Frage: Muss der Parameter vom Typ "String" sein? 2. Frage: Was ist, wenn ich wie oben angegeben den Parameter vom Typ "Objekt" mache (habe das iwo gesehen, ich weiß aber nicht, was das dann macht ![]() Dann der untere teil (Da wo alles in die Datei reingeschrieben wird): Kann das so funktionieren? ich hoffe ihr könnt mir helfen, mfG, CO2 |
||
mfG, CO²
Sprachen: BlitzMax, C, C++, C#, Java Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti |
- Zuletzt bearbeitet von CO2 am Do, Nov 03, 2011 1:15, insgesamt einmal bearbeitet
![]() |
ZEVS |
![]() Antworten mit Zitat ![]() |
---|---|---|
Casten vermittels [Typename](Object), also z.B.
BlitzMax: [AUSKLAPPEN] If(profile = String(ProfileName)) Damit muss es nicht Typ String sein. ZEVS |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ein Object ist jeder Type und Strings. Du kannst bei LoadImage statt einem Pfad auch eine Bank oder eine Pixmap angeben - ob das für deinen Pläne Sinn macht, musst du entscheiden. | ||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
CO2ehemals "SirMO" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Erstmal vielen Dank für die Antworten ![]() @ ZEVS: Ach, man kann auch nach "String" casten? Ich dachte das geht nur von "Int" nach "Float" und zurück ![]() Ok, damit hätte sich das Problem mit der Namenkontrolle (ziemlich weit oben im Code, nachdem die "profiles0.dat" geöffnet wird) erledigt. @ Xeres: Also ich erwarte ja als Parameter einen Objektnamen, also z.b.: Ich habe einen Type gemacht, er heißt "Profile". Darin ist alles enthalten, was in der obigen Funktion in die Datei reingeschrieben werden soll. Wenn ich jetzt ein Objekt beispiel BlitzMax: [AUSKLAPPEN] test123:Profile = New Profile vom Typ "Profile" mache, und diese Funktion aufrufe, dann erwarte ich als Parameter quasi den Objekt namen (In diesem Fall "test123"). Ist die Funktion dann so richtig? Oder von welchem Type müsste der Parameter sein, damit das geht? Also nochmal zum besseren Verständins: Im Code sollte das hinterher wie folgt aussehen (wenn man die Statistiken von "test123" in die Datei schreiben möchte): BlitzMax: [AUSKLAPPEN] UpdateStats(test123) mfG, CO2 |
||
mfG, CO²
Sprachen: BlitzMax, C, C++, C#, Java Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
"test123" ist die Bezeichnung der Variable. Wenn du die benutzen willst, musst du das Reflection Modul benutzen. Das ginge wohl einfacher und schneller, wenn die Bezeichnung schon als String vorliegt. | ||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
CO2ehemals "SirMO" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ok, danke dir, Xeres.
Ich habe mir jetzt ein wenig das Modul angeschaut, komme aber bei folgendem Beispielcode in der bbdoc nicht weiter: BlitzMax: [AUSKLAPPEN] Strict unter dem Code steht der folgende Satz: Zitat: This simple program will print "x:Int", "y:Int" and "z:Int" - the names and types of the fields within TMyType. Note that this is done without actually creating a new TMyType.
- Also exakt das, was ich brauche. Nun kommt aber das Problem: Hier wird nirgendwo der "Objektname" (in meinem obigen Post "test123") geschrieben, sondern lediglich der Type-Name ("TMyType"). Wo müsste hier der Objektname stehen? kann der überhaupt in diesem Code benutzt werden? mfG, CO2 |
||
mfG, CO²
Sprachen: BlitzMax, C, C++, C#, Java Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Mh, das Reflection Modul kennt nur die Objekte und ihre Inhalte, nicht die Variablen, in denen sie Referenziert werden.
Warum nimmst du keine Strings? Ein Field "Name" sollte doch auch kein Problem sein. |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
ZEVS |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das Reflection-Module mag ja ganz nett sein, aber man kommt auch ohne es aus.
Der Fall test123 zeugt meiner Meinung nach von schlechter Programmierung: Wieso willst du die Namen der Profile im Sourcecode angeben? Und wieso benutzt du keine Maps oder Arrays? Du kannst doch einfach alle Profile in einem Array speichern und beim Lesen/Schreiben der Datei die Array-Indizes verwenden (am besten mit dem Objekt speichern). Die Verarbeitung von Strings ist im Vergleich zur Zahlenverarbeitung eher langsam. Außerdem: Willst du mit Variablen oder Variablennamen arbeiten? Du widersprichst dir selbst: Zitat: Parameter quasi den Objekt namen (In diesem Fall "test123")
vs. Zitat: BlitzMax: [AUSKLAPPEN]
UpdateStats(test123) Letzterer Fall kommt ohne jede Reflektion aus. Zwar hat das Profil immernoch überflüssigerweise eine eigene Variable, doch sparst du dir das Suchen nach Werten, die du eigentlich schon hast. ZEVS |
||
CO2ehemals "SirMO" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke für die Antworten!
@ Xeres: Zitat: Warum nimmst du keine Strings? Ein Field "Name" sollte doch auch kein Problem sein. Ich möchte ja über angabe von dem Namen an die anderen werte im Objekt kommen. Also der Parameter der Funktion erwartet den Objektnamen und die Funktion ließt dann eigenständig alle anderen Daten aus dem betreffenden Objekt aus. So hatte ich es geplant.
@ ZEVS: Das war nur ein Beispiel. In Echt würde es wohl wie folgt aussehen: BlitzMax: [AUSKLAPPEN] Global Playername:String = "Spieler1" Aber mal eine Frage: Wie meinst du das mit dem Array? Soll ich ein Array statt einem Type anlegen, welches dann soviele Felder hat, wie ich brauche? Also als Beispiel: Ich brauche 3 Felder: Name, Zu letzt gespielte Mission und eliminierte Gegner. Soll ich dann ein Array machen, welches wie folgt aufgebaut ist? BlitzMax: [AUSKLAPPEN] Profil[2]:StringUnd was mache ich, wenn es mehrere Profile gibt (2 ober 3 oder ...) Ich weiß erlich gesagt noch nicht, was besser ist: mit Variablenname oder mit Variablenwert... Weil ich ja gewissermaßen beides in der Funktion brauche: Einmal den Variablenwert, um herauszufinden, ob das Profil überhaupt existiert und einmal den Variablennamen, um die entsprechenden Fields im Type anzusprechen... bin ein wenig ratlos... mfG, CO2 |
||
mfG, CO²
Sprachen: BlitzMax, C, C++, C#, Java Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti |
![]() |
ZEVS |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das mit dem Type ist schon in Ordnung. Nur halt nicht jedes Profil in einer eigenen Variable sondern in einem Array, einer List oder einer Map.
Zitat: Ich weiß erlich gesagt noch nicht, was besser ist: mit Variablenname oder mit Variablenwert
Variablennamen sind was für den Editor (ok, es gibt Reflection, trotzdem sollte man sich an diesen Grundsatz halten). Profilnamen sind 1. etwas für's Spiel und 2. eine unabhängige Eigenschaft des Profils. Wieso also kein Field "Name"? Um den Zugriff über Namen zu vereinfachen (falls du das brauchst), kannst du Maps benutzen. Zitat: Einmal den Variablenwert, um herauszufinden, ob das Profil überhaupt existiert und einmal den Variablennamen, um die entsprechenden Fields im Type anzusprechen...
Hoffentlich nur ein kleiner Dreher. ZEVS |
||
CO2ehemals "SirMO" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke für die Antwort
Achso, du meinst quasi sowas wie eine ID? Nur halt, das der Profilname in diesem Fall die ID ist. Oder wie? Ok, Und dann kann ich in einer If-Abfrage prüfen, ob die richtigen Werte im Type angefragt werden, oder was? Zitat: Hoffentlich nur ein kleiner Dreher.
Wieso, ist doch so richtig: Zitat: den Variablenwert, um herauszufinden, ob das Profil überhaupt existiert - Also wenn ich eine Variable BlitzMax: [AUSKLAPPEN] Global Name:String = "BlaBlaBla"habe, dann kontrolliere ich mit dem Variablenwert (in diesem Fall "BlaBlaBla"), ob das Profil bereits existiert, wärend ich mit Zitat: den Variablennamen, um die entsprechenden Fields im Type anzusprechen... (in diesem Fall "Name") den Type ansprechen möchte...
mfG, CO2 |
||
mfG, CO²
Sprachen: BlitzMax, C, C++, C#, Java Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wie verwaltest du denn deine Objekte überhaupt? Sowohl mit einer Liste als auch einer Map in der alle Objekte stehen, kannst du das passende heraussuchen... | ||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
ZEVS |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: Achso, du meinst quasi sowas wie eine ID?
Bingo! Alternativ kann man auch Ints für Profil-IDs verwenden, das ist schneller. Zitat: kontrolliere ich mit dem Variablenwert (in diesem Fall "BlaBlaBla"), ob das Profil bereits existiert
Missverständnis: Ich dachte, du redest von einem Object eines Types a là TProfile. Zitat: den Variablennamen, um die entsprechenden Fields im Type anzusprechen...
(in diesem Fall "Name") den Type ansprechen möchte Was nun, Field oder Type? Auf jeden Fall sind Variablennamen etwas für den Editor. Für den Zugriff: Variablenwert (Profilname) + Map -> Profilobjekt. Ich weiß ja nicht, was du sonst noch so geschrieben hast, aber ich denke, wir werden dir gezielter und umfassender helfen können, je mehr Code du uns spendierst. ZEVS |
||
CO2ehemals "SirMO" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wiedermal danke für die Antworten ![]() @ Xeres: Ich denke, ich werde Listen benutzen ![]() @ ZEVS: Zitat: Was nun, Field oder Type? - Field natürlich ![]() Ok, dann gebe ich mal Code: Die Funktion steht ja bereits im obigen Post, aber der Vollständigkeit halber: BlitzMax: [AUSKLAPPEN] Function UpdateStats(ProfileName:String) Und noch der Type + "Besetzungsroutine": BlitzMax: [AUSKLAPPEN] Include "core\fcn\user.bmx" 'Funktion Includieren mfG, CO2 |
||
mfG, CO²
Sprachen: BlitzMax, C, C++, C#, Java Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Außer, das Globale Liste und Funktionen alle in den Type gehören, sehe ich wirklich kein Problem.
Kannst du nicht die passenden Objekte finden, oder was ist nun die Frage? |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
CO2ehemals "SirMO" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Zitat: Kannst du nicht die passenden Objekte finden, oder was ist nun die Frage? Ich weiß nicht, wie ich die passenden Objekte Finden kann ![]() Aber wie meinst du das? Zitat: das Globale Liste und Funktionen alle in den Type gehören
mfG, CO2 |
||
mfG, CO²
Sprachen: BlitzMax, C, C++, C#, Java Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Dein Code kurz umgeschrieben:
BlitzMax: [AUSKLAPPEN] SuperStrictDie Funktion "GetByName" sucht zu einem Namen den passenden Eintrag aus der Liste. Mit sehr vielen Einträgen wäre eine Map da schneller - sollte aber so erst mal auch funktionieren. Den richtigen Scope bekommst du mit TypeName.Funktions/GlobalenName. |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
CO2ehemals "SirMO" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich danke dir.
Aber ich steh gerade trotzdem ein wenig auf dem Schlauch ![]() Also: Was muss ich denn machen, wenn ich die anderen Felder rauskriegen möchte? Also ich habe jetzt via "GetByName()" Das das Objekt mit dem Namen existiert, aber wie kriege ich von dem Objekt nun z.B.: das Feld "benutzte_Cheats" heraus? Und müsste dann die Funktion zum Statistiken - aufschreiben auch im Type stehen? mfG, CO2 |
||
mfG, CO²
Sprachen: BlitzMax, C, C++, C#, Java Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Die Felder sind dir doch bekannt? Die Frage würde sich nur stellen, wenn das Objekt nicht in jedem Fall ein TProfile-Objekt wäre. Den Wert bekommst du durch direktes zugreifen z.B. Profile_5.cheats_benutzt oder über eine Getter-Methode, wenn dir das lieber ist.
Es wäre sinnvoll die Funktion in den Type zu kapseln, gezwungen bist du nicht. |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
CO2ehemals "SirMO" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Achso, ja, jetzt fällt es mir wie schuppen von den Augen ![]() Ich danke allen, die halfen, mfG, CO2 |
||
mfG, CO²
Sprachen: BlitzMax, C, C++, C#, Java Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group