objekt in string umwandeln

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

bjh

Betreff: objekt in string umwandeln

BeitragMi, Dez 07, 2011 17:54
Antworten mit Zitat
Benutzer-Profile anzeigen
hallo,

einem objekt wird in bb3d ja ein bestimmter wert zugewiesen:
xyz=createcube()
jetzt hat xyz irgendeinen integerwert.
kann ich jetzt durch diesen integerwert irgendwie herausfinden, wie das objekt heißt? also den string, der xyz beinhaltet also keine zahlen.

Xeres

Moderator

BeitragMi, Dez 07, 2011 18:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Das hieße Reflection und nein, BlitzBasic kennt nicht seinen eigenen Quellcode.
Da musst du dir was einfallen lassen. Für 3D Objekte gäbe es NameEntity - kommt darauf an, was du anstellen möchtest.
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
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

bjh

BeitragMi, Dez 07, 2011 18:12
Antworten mit Zitat
Benutzer-Profile anzeigen
funktioniert leider nicht.

ich hab mir eine funktion gebastelt:
create_mesh(xyz,"xyz")
der erste parameter ist das objekt, der zweite ist der dateiname.
weil beides eigentlich das selbe ist, dachte ich, dass das vielleicht auch anderst funktionieren würde.
auch egal nicht so schlimm.

danke für deine hilfe

Dottakopf

BeitragMi, Dez 07, 2011 19:00
Antworten mit Zitat
Benutzer-Profile anzeigen
du kannst deinem Objekt/Mesh nur einen namen zuteilen.
Das handle bleibt immer eine Zahl!
Die speicheradresse in deinem Speicher besteht ja auch nicht aus wörtern....

Wenn du ein Objekt manipulieren willst, dann sprichst du es ja auch mit seinem Hanlde/dem Varriablennamen an. Sind die sinnvoll bezeichnet dann gibt es doch da keine Probleme.

Für tolle ausgaben kann man noch den entityname befehl hinzufügen... Prüf doch mal deine Create_cube() funktion.


Code: [AUSKLAPPEN]

cube = CreateCube()
PositionEntity cube, 0, 0, 5
NameEntity cube, "Würfel"


Gruß
Dottakopf
Rechtschreibfehler gelten der allgemeinen Belustigung!

skey-z

BeitragMi, Dez 07, 2011 21:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Was du machen könntest, erstelle jedes Objekt in einem Type, mit den Feldern objekt%, name$ und welche du sonst noch brauchst.

Wenn du jetzt ein Objekt nach Namen suchen möchtest, schreib dir eine Funktion

Pseudocode
BlitzBasic: [AUSKLAPPEN]

Function GetObject(name$)
For obj.TObject = Each TObject
If obj\name = name Then Return obj\objekt
Next
End Function


Somit bekommst du das gesuchte Objekt
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz
BAC#57: 2. Platz
Twitter
 

bjh

BeitragMi, Dez 07, 2011 22:00
Antworten mit Zitat
Benutzer-Profile anzeigen
danke für die vielen antworten, aber ich brauch das nicht Very Happy
ich muss bei meiner lösung dann einfach den objektnamen 2mal reinschreiben.
einmal als objekt und einmal als string in anführungszeichen:
BlitzBasic: [AUSKLAPPEN]
create_mesh(cube,"cube")

Eingeproggt

BeitragMi, Dez 07, 2011 22:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich bin mir jetzt nicht ganz sicher ob du den Tipp von Xeres schonmal genauer verfolgt hast?
NameEntity benennt ein Objekt, sprich es legt nen String fest.
EntityName gibt dir genau diesen Namen / String wieder.
Also damit würds auf jeden Fall gehn und es wäre kein Mehraufwand mit Types nötig. Was natürlich nicht heißt dass Types schlecht wären, aber wenn du sie aktuell nicht brauchst würd ich sie deswegen auch nicht einführen.

mfG, Christoph.
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9
 

bjh

BeitragDo, Dez 08, 2011 1:07
Antworten mit Zitat
Benutzer-Profile anzeigen
xeres hat meine frage ja schon beantwortet.
ich dachte nur, dass ich mir was klitzikleines sparen könnte.
z.b.:
BlitzBasic: [AUSKLAPPEN]
cube=CreateCube()
create_mesh(cube)

Function create_mesh(mesh)
surface=CreateSurface(mesh)
stream=ReadFile(in_string_umwandel_funktion(mesh)+".txt")
End Function


aber das funktioniert nicht, weil in blitzbasic keine reflection (siehe xeres) möglich ist.

deshalb mach ich es so:
BlitzBasic: [AUSKLAPPEN]
cube=CreateCube()
create_mesh(cube,"cube")

Function create_mesh(mesh,meshname$)
surface=CreateSurface(mesh)
stream=ReadFile(meshname+".txt")
End Function

Eingeproggt

BeitragDo, Dez 08, 2011 1:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Shocked
ok, das heißt dein Problem wäre ja gelöst... aber wenn das deine ganze create_mesh-Funktion ist dann hab ich so das lästige Gefühl dass du noch viel mehr Probleme kriegen wirst?

Wozu in einem Cube ein Surface erstellen?
Und wenn du eine Datei öffnest und dann nix weiter machst, müsste "stream" eine globale Variable sein... was wieder Probleme macht sobald du 2 Meshes hast, da das zuletzt geladene deine globale Var überschreibt.

Vielleicht doch Types? Oder erklär mal was da noch so alles folgt... der Code so wie er da steht mag ja kompilierfähig sein, hat aber keinen für mich erkennbaren Sinn?

mfG, Christoph.
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9
 

bjh

BeitragDo, Dez 08, 2011 2:40
Antworten mit Zitat
Benutzer-Profile anzeigen
keine angst.
das ist die ganze funktion:
BlitzBasic: [AUSKLAPPEN]
Function create_mesh(m,n$)
s=CreateSurface(m)
stream=ReadFile("data/"+n+".m")
v=ReadByte(stream)
t=ReadByte(stream)
Dim mesh(v)
For i=1 To v
mesh(i)=AddVertex(s,ReadByte(stream),ReadByte(stream),ReadByte(stream),ReadByte(stream),ReadByte(stream))
Next
For i=1 To t
AddTriangle s,mesh(ReadByte(stream)),mesh(ReadByte(stream)),mesh(ReadByte(stream))
Next
UpdateNormals m
Dim mesh(0)
CloseFile stream
End Function


jetzt kommt sicherlich, ich sollte mehr platz dazwischen freilassen und ausführlicher schreiben, aber das ist mein schreibstil Wink

Eingeproggt

BeitragDo, Dez 08, 2011 10:28
Antworten mit Zitat
Benutzer-Profile anzeigen
ok, sieht schon besser aus, ich bin ruhig Wink
aber ein letzter Klugschiss sei mir noch gestattet:
bei der Zeile (und auch der mitn AddVertex)
Code: [AUSKLAPPEN]
AddTriangle s,mesh(ReadByte(stream)),mesh(ReadByte(stream)),mesh(ReadByte(stream))

Musst du bedenken dass das "letzte" ReadByte (also das für z) zuerst aus der Datei ausgelesen wird. Ist halt so ne BB-Eigenart über die schon der eine oder andere gestolpert is.

mfG, Christoph.
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9
 

bjh

BeitragDo, Dez 08, 2011 15:48
Antworten mit Zitat
Benutzer-Profile anzeigen
das hab ich auch schon gemerkt Wink
da hab ich sogar einen thread gemacht.
hab ich dann aber selber rausgefunden.
danke für deine hilfe Very Happy

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group