aus String eine Variablen erstellen
Übersicht

![]() |
BB-FreakBetreff: aus String eine Variablen erstellen |
![]() Antworten mit Zitat ![]() |
---|---|---|
Gibt es eine möglichkeit das hir umzusetzten ?
Ich habe einen Type mit einem Field(z.B. LOL$). Ich möchte jetzt für jeden Type eine eigene Variabele mit dem String$, der in LOL$ gespeichert ist(z.B. "XD"), anlegen. Und in dieser Variable ein Bild zu speichern. Hoffentlich klingt das jetzt nicht zu unverständlich(-> Ich weiß nicht wie ichs besser beschriben soll ![]() Freu mich schon auf eure Hilfe. mfG BB-Freak ![]() |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich hab eine dumpfe Ahnung was du möchtest, aber das solltest du wirklich besser formulieren...
Pseudocode könnte auch helfen. |
||
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) |
BBPro2 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
same, nicht den leisesten schimmer.. | ||
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
so wird das nix....
Zunächst mal die Begriffsklärung: Also ein TYPE ist eine Festlegung eines "user-definierten" Variablen-Typs. BB bringt schon den Variablen-Typ STRING oder z.b. INTEGER mit, aber Du kannst auch eigene "erschaffen". BlitzBasic: [AUSKLAPPEN] Type USER Alle daraus mit NEW erzeugten Elemente sind niemals "Typen" sondern vielleicht "Objekte" oder auch "Variablen" ähnlicher einer A$ ( die ist ein Objekt von Typ STRING) oder B% (die ist ein Objekt von Typ INTEGER) oder eben D.User (die ist ein Objekt von Typ USER). Jetzt kommen die Inhalte: "Hubert" ist der Inhalt des Objektes A$. 123 ist der Inhalt des Objektes B%. Der Inhalt von Objekt D besteht aus zwei Einträgen: Einem STRING-Objekt und einen INTEGER-Objekt. Die wiederum können Inhalte enthalten. LOGIK: Es ist in den seltensten Fällen nötig, derartig komplizierte Konstruktionen, wie Du sie erwähnst, zu erschaffen. Wenn Du einem Objekt noch ein Bild hinzufügen möchtest, dann füge einfach ein drittes Field... BlitzBasic: [AUSKLAPPEN] Field Unter_Bild% ... in den Typ ein. Lade dort das Bild rein... BlitzBasic: [AUSKLAPPEN] D\Unter_A$="XD" ... und schon gehört es fest verbunden zu dem Element des Types, zu dem z.B. auch der String "XD" gehört. Willst Du das Bild finden, dann suchst Du einfach nach dem Element mit den String... BlitzBasic: [AUSKLAPPEN] For loc.User = Each User ... und schon befindest sich das Bild in diesem Moment unter... BlitzBasic: [AUSKLAPPEN] loc\Unter_Bild |
||
![]() |
BB-Freak |
![]() Antworten mit Zitat ![]() |
---|---|---|
Vielen Dank für die schnellen Antworten ![]() Um das ganze noch einmal zu verdeutlichen : Ich hatte keine Lust mehr für jedes Bild, das ich laden möchte jedes mal eine Zeile zu schrieben. Deshalb hatte ich vor eine Function zu machen, die alle Dateien eines Ordner ausliest, überpfrüft ob sie ein Bild oder eine andere Art von Datei sind und sie dan Läd ![]() Ausdiesem Grund wollte ich wissen wie ich das mache, das für jedes "Objekt" ein Bild in eine Variable geladen wird, die genau so heißt wie das ausgelesen Bild. |
||
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Da liegst Du mit dem TYPEs schon genau richtig. Dein TYPE sollte dann Dateiname und Bild enthalten:
BlitzBasic: [AUSKLAPPEN] Type Bilder |
||
![]() |
aMulSieger des Minimalist Compo 01/13 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hier sei aber noch hinzugefügt, dass wenn du es auf die beschriebene Art und Weise löst, und dann bestimmte Bilder anhand ihres Namen zeichnen willst, und du dir nicht was ganz schlaues ausdenkst, du dann jedes mal deine Type-Liste durchgehen und die Namen der Bilder vergleichen musst. Strings vergleichen ist allerdings relativ langsam und in großer Menge nicht anzuraten.
Wenn du also bestimmte Bilder vom Namen her aufrufen willst solltest du sie irgendwo in extra dafür bestimmte variablen laden. Wenn du aber nur eine Reihe von Bildern laden und wie eine Liste oder so anzeigen möchtest, sollte das kein Problem darstellen. |
||
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans! Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver |
![]() |
BB-Freak |
![]() Antworten mit Zitat ![]() |
---|---|---|
@aMaul: Genau das wollte ich verhindern -> deswegen der Thread ![]() Heißt das es gibt keine Möglichkeit es so umzusetzten ![]() |
||
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
werde doch mal konkreter....
um wieviele Bilder geht es denn? und wozu werden die Bilder im Spiel eingesetzt? Dem compiliertem Programm ist es am Ende doch sowieso völlig egal ob eine Variable für eine bestimmtes Bild... BlitzBasic: [AUSKLAPPEN] DumpfGegner oder ... BlitzBasic: [AUSKLAPPEN] Bild(10045)
oder... BlitzBasic: [AUSKLAPPEN] &x4Fd5EA345 ...heißt. Also, was ich damit sagen will ist: Variablennamen sind sowieso nur was für den Programmierer, solange er sich noch durch den Editor wühlt. Wozu also erreichen wollen, dass die Variablen nach dem Programmstart einen best. "Namen" annehmen? Wenn Du uns mal genauer beschreibst, warum Du glaubst, dass Du das so brauchst, können wir Dir sicherlich eine Alternative aufzeigen, die schnell und trotzdem unkompliziert ist. |
||
- Zuletzt bearbeitet von Midimaster am Fr, Jul 22, 2011 7:59, insgesamt einmal bearbeitet
Hangman |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
eine weitere Möglichkeit wäre die Bilder zu nummerieren und dann in ein array zu laden...
dann könnte man noch sowas zur Hilfe machen: BlitzBasic: [AUSKLAPPEN]
wäre zwar auch eine Zeile pro Bild aber die Zeile wäre kürzer... weiß nicht ob dir das lieber ist^^ Tatsache ist nur, dass Variablennamen nicht so dynamisch verteilt werden können wie du es möchtest. |
||
Ich habe Berthold gebrochen. |
![]() |
BB-Freak |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also, ich wollte mir eine Function schreiben, die für egal welches Spiel geeignet ist.
D.h. eine Function, die automatisch alle Bilder(oder andere Dateien) in einem Ordner ins Spiel läd und als Variable direckt den Namen nimmt den die Datei eh schon hatte so kann man ohne für jedes Bild eine extra Zeile zu schreiben einfach die Function rein setzten und die benötigten Bilder werden automatisch geladen. Und man kann sie wie gewohn im Prog. benutzen. |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Lös Dich doch von der Fixen idee mit den namen, denn das ist in BB nicht möglich, und sinnvoll ist es auch nicht, denn woher willst Du während deines Programmes denn wissen welche Bilder du unter welchen Namen geladen hast, sprich Du müsstest ja beim Programmieren ja schon wissen auf welche Namen du später zugreifen musst.
Was selbstredend geht ist alle Bilddateien in ein Array zu laden und das zu verwenden, was auch sinnvoll ist wenn es um eine erweiterbare Anzahl Mediadateien geht die anhand einer Karte o.ä. angezeigt werden. |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Im Grunde könnte man Deine Idee mit einer Art Pre-Prozessor vergleichen. Dann macht der Gedanke Sinn.
Grundsätzliches: Variablen-Namen sind was für den Editor. Nur der Leser braucht sie! Zur Laufzeit, also wenn das Programm mit F5 gestartet wurde existieren keine Variablennamen mehr. Es macht also wenig Sinn eine Funktion zu schreiben, die sich nach dem Programmstart irgendwelche Variablennamen ausdenkt. Beispiel: Im Code heißt eine Deiner Variablen GegnerBild. Mit ihrer Hilfe machtst Du die Vorgänge im Computer für Dich begreifbar. z.b. scheint es so, als ob Du ein Bild in sie "hineinlädst". In Wirklichkeit sieht der Computer nach dem compilieren nur eine Speicherstelle z.b. die Adresse: 453427435. Dort befindet sich das Bild. Alle Stellen, wo im Code GegnerBild[ stand sind beim compilieren durch 453427435 ersetzt worden. Nichts deutet mehr auf den urspünglichen Namen hin. Nun lädst Du während mit deiner "Wunder-Funktion" ein Bild "SoUndSo" in den Speicher. An welchen Speicher? Woher sollte der Computer nun wissen, welche der Speicherstellen die richtige ist? Die einzige Möglichkeit wäre, der Computer wüßte bereits vor dem Compilieren, dass Datei "SoUndSo" etwas mit 453427435 zu tun hat, was normalerweise eben durch die Zeile festgelegt wird: GegnerBild = LoadImage("SoUndSo"). Pre-Prozessor Was vielleicht in Deinem Fall Sinn machen würde, ist ein Programm zu schreiben, das vor dem Compilieren Code-Zeilen automatisch erstellt und Dir so Schreibarbeit abnimmt. Der Pre-Prozessor scannt das Bilderverzeichnis durch und erstellt für jedes gefundene Bild "SoUndSo"diese Zeile: BlitzBasic: [AUSKLAPPEN] SoUndSo = LoadImage("SoUndSo") Diese Zeilen könnten mit WriteLine eine neue "*.BB" Datei erzeugen, die dann in den Hauptcode eingebunden wird. Array Ich bin mir nicht sicher, ob die Array-Idee von Hangman in Kombination mit dem autom. Einlesen des Verzeichnis Dir wirklich weiter hilft. Schließlich ist ja nicht sichergestellt, in welcher Reihenfolge die Dateien gefunden werden. So könnte es vorkommen, dass nach einem Kopieren der Bilder zum User plötzlich ein anderes Bild in Bild(BildGegner) geladen wird als bei Dir. |
||
- Zuletzt bearbeitet von Midimaster am Fr, Jul 22, 2011 10:03, insgesamt einmal bearbeitet
Hangman |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Zitat: eine weitere Möglichkeit wäre die Bilder zu nummerieren und dann in ein array zu laden...
Ich dachte an eine Nummerierung im Dateinamen der Bilder ![]() 1.png 2.png 3.png oder 1_Gegner.png etc... also wäre das schon sichergestellt, dass immer das gleiche Bild in Bild_Gegner ist aber wie gesagt auch dabei müsste man ein bisschen schreiben ![]() ![]() |
||
Ich habe Berthold gebrochen. |
![]() |
BB-Freak |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich glaub ich werde es so machen, dass wie folgt alle Dateien in ein Objekt geladen werden.
Ich mach mir dann nochmal eine zusätzliche Function: Code: [AUSKLAPPEN] Function Bild(Name$) For Datei.Datein = Each Datein If Datei\Name$=Name$ Then Return Datei\Image$ Endif Next End Function Ist das Sinnvoll ? ![]() |
||
- Zuletzt bearbeitet von BB-Freak am Fr, Jul 22, 2011 14:55, insgesamt einmal bearbeitet
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Abgesehen davon, das die Datentypen widersprüchlich sind, bleibt halt das Problem, dass für jeden Aufruf schlimmstenfalls alle Einträge durchgegangen werden müssen...
Vielleicht solltest du lieber ein Programm schreiben, das BlitzBasic Code ausgibt. Den könntest du einmal include ![]() |
||
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) |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
nun schreib doch mal endlich für wieviele Bilder das sein soll....
10? 100? 1.000? 10.000? Bei 10 ist nämlich das Verfahren sicherlich nicht "zu langsam", bei 10.000 kannst du es vergessen.... mehr input! |
||
![]() |
BB-Freak |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wie schon gesagt ich wollte die Function eigentlich für alle meine Projekte verwenden, das heißt 10-10.000 Bilder . | ||
![]() |
aMulSieger des Minimalist Compo 01/13 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wie Midimaster sagte ist das dann zu langsam. Du musst die dann ja bei jedem DrawImage() neu nachfragen, was ganz klar zu langsam ist. Du macht DrawImage() damit im schlimmsten Falle einige Tausend mal langsamer. Damit kannst du dann Echtzeit-Grafik vergessen.
Stattdessen tue lieber was dir schon angeraten wurde: Schreibe dir einen kleinen Code, der ein Verzeichnis durchgeht und für jede Datei darin eine BB-Ladezeile erstellt. Für ein Verzeichnis mit den Dateien "Bild1.png", "UltraBossGegner.png" und "Hintergrund.jpg" könnte der erstelle Code zum Beispiel so aussehen: BlitzBasic: [AUSKLAPPEN] Const PFAD$ = "bilder\" Den Code müsstest du dann nur noch per Include einbinden, oder direkt kopieren und schon kannst du deine Variablen benutzten. |
||
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans! Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group