DrawImage Problem

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Myn

Betreff: DrawImage Problem

BeitragDi, März 01, 2011 18:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Guten Tag Community,

das Problem was ich habe ist ehr eine Frage...

Ich möchte mit DrawImage ein Bild zeichnen, und der Bildname steht in einen string.
Also z.B.

string$ = "haus"

DrawImage string$ ,0 ,0


Beim mir kommt dann immer die Meldung dass das Bild nicht existiert... wenn ich direkt den Namen eingebe funktioniert es perfekt.

Geht das überhaupt so?
 

PacMani

BeitragDi, März 01, 2011 18:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie willst du denn einen String zeichnen? Du musst ein Image erst laden mit LoadImage und darin dann den Dateinamen zum Haus angeben.

Also

Code: [AUSKLAPPEN]
Local BildVomHaus = LoadImage("haus.png")
DrawImage BildVomHaus


Aber ich glaube ich sehe jetzt, was du meinst. Du hast also in die Variable "haus" ein Bild geladen und möchtest diesen Variablennamen in eine Stringvariable speichern.

Das geht leider nicht. Der Compiler hat ja im entstehenden Programm nicht die Namen vermerkt, wie sie im Programmcode stehen sondern merkt sich nur Speicherbereiche.

darth

BeitragDi, März 01, 2011 18:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

normalerweise lädt man ein Bild ausserhalb der Hauptschleife und verwendet es dann über das Handle, also so:

BlitzBasic: [AUSKLAPPEN]
Local path$ = "haus.jpg"
Local image = LoadImage(path)
; oder direkt: image = LoadImage("haus.jpg")


danach kannst du das Bild über den Variabelnamen image ansprechen.

BlitzBasic: [AUSKLAPPEN]
DrawImage image, 0, 0


Ich bin mir gar nicht sicher, ob du das Bild direkt beim Zeichnen laden könntest. Aber selbst wenn es ginge, solltest du es nicht machen, weil das Bild sonst stets neu geladen werden müsste, was unheimlich langsam ist. Daten laden dauert Zeit, man sollte es nur einmal am Anfang machen müssen, und nicht während einer kontinuierlichen Schleife.
(Anders natürlich wenn man riesige Welten ohne Ladezeit begehen will, dann muss man das irgendwie streamen. Aber damit kenn ich mich nicht wirklich aus :>)

MfG,
Darth
Diese Signatur ist leer.
 

Myn

BeitragDi, März 01, 2011 18:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Geladen wird es natürlich voher.

Ich möchte nur das er das Bild zeichnet, so wie der String heißt...

Das geht nicht?
 

PacMani

BeitragDi, März 01, 2011 19:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Eigentlich sollte das eher so gehen:
Code: [AUSKLAPPEN]

Local Bild1 = LoadImage("bla.png")
Local Bild2 = LoadImage("dings.png")
Local ZuZeichnendesBild = Bild1
DrawImage(ZuZeichnendesBild, ...)

Midimaster

BeitragDi, März 01, 2011 19:09
Antworten mit Zitat
Benutzer-Profile anzeigen
wie lautet denn die Zeile, in der Du das Bild geladen hast?

Eingeproggt

BeitragDi, März 01, 2011 19:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Also mal angenommen, dass du das mitn Laden schon richtig hast und dir die Sache mitn String "mit einbeziehen" Probleme macht so würd ich fürs erste mal zu If oder Select raten, etwa so:

BlitzBasic: [AUSKLAPPEN]
If String$="haus" Then
img=haus
EndIf
;....
DrawImage img,0,0


Elegantere Lösungen gibts zwar, aber fürn Anfang reicht das ja.

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

Myn

BeitragDi, März 01, 2011 19:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Das wollte ich ja gerade nicht, für jedes Bild eine Zeile.. sondern einfach das Bild zeichen das so heißt wie das
string... geladen wird es ja richtig...

Midimaster

BeitragDi, März 01, 2011 20:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Nun schreib uns doch mal bitte die Zeile, wo das Bild geladen wird....

Ich muss die sehen, um Dir helfen zu können!
 

Myn

BeitragDi, März 01, 2011 20:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Z.B.


;Holz
i1H = LoadImage ("media/iv/Rohstoffe/i1h.jpg")
;Getreide
i1G = LoadImage ("media/iv/Rohstoffe/i1g.jpg")
;Mehl
i1M = LoadImage ("media/iv/Rohstoffe/i1m.jpg")
;Fleisch
i1F = LoadImage ("media/iv/Rohstoffe/i1f.jpg")
;Knolle
i1kn = LoadImage ("media/iv/Rohstoffe/i1kn.jpg")
;Wiesenkraut
i1wk= LoadImage ("media/iv/Rohstoffe/i1wk.jpg")
;Kräuter
i1K = LoadImage ("media/iv/Rohstoffe/i1k.jpg")
;Fisch
i1FF = LoadImage ("media/iv/Rohstoffe/i1ff.jpg")




Habe die Bilder doch auch ohne String voher benutz... aber so würde es zeilen sparen..

Holzchopf

Meisterpacker

BeitragDi, März 01, 2011 20:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Was du vorhast geht so nicht. Variablen über ihren Namen anzusprechen ist vielleicht in einigen Scriptsprachen möglich, aber nicht in BlitzBasic. Du könntest es aber auch so lösen:

Mach ein Type mit den Feldern name$ und img, eine Funktion, der du den Namen (als String) und den Pfad übergibst und die dann eine neue Type-Instanz mit den Feldern anlegt, und eine Funktion, der du einen Namen (als String) übergibst, dir in allen Type-Instanzen die gleichnamige raus sucht und dir das entsprechende Bild-Handle zurückgibt.

mfG
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

Xeres

Moderator

BeitragDi, März 01, 2011 20:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Das müsstest du mit Types lösen können... Name & Bild in einem Eintrag zuweisen und das passende heraussuchen. Ist aber nicht unbedingt zu empfehlen, da das mit zunehmender Bilderzahl langsamer wird.
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)
 

Sterbendes Lüftlein

BeitragDi, März 01, 2011 20:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Text entfernt
 

Myn

BeitragDi, März 01, 2011 22:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab auf dem Gebiet Types nur wenig Erfahrung... könnt ihr mir das mal konkret zu meinem
Problem da zeigen?

Wäre nett da ich eigentlich nicht voher weiter machen kann^^

Sir Gauss der III

BeitragDi, März 01, 2011 23:21
Antworten mit Zitat
Benutzer-Profile anzeigen
ich würd mal sagen dass du am besten ein BlitzBasic: [AUSKLAPPEN]
Dim
feld machst.

bei deinen Rohstoffen könntest du sie alle so laden und zeichnen:

Zitat:
Dim rohstoffbild(100)

....

For i=1 To anzahlderrohstoffe
rohstoffbild(i)=LoadImage("Ordner\bild"+i+".bmp")
Next


....

For i=1 To anzahlderrohstoffe
DrawImage rohstoffbild(i),x,y
Next

...



wenn du dir merkst was welcher Rohstoff ist, evtl in ner .TXT datei notizen dazu machst ist das der einfachste weg, denk ich mal.

Gruß Sir Gauss
 

Myn

BeitragDi, März 01, 2011 23:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Versuch ich morgen mal was mit zu machen...

Xeres

Moderator

BeitragMi, März 02, 2011 1:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würde eine solche Struktur vorschlagen:
BlitzBasic: [AUSKLAPPEN]
Type TBild
Field Bild
Field Name$
End Type

Function LadeBild(Name$, Pfad$)
;* Neues Bild-Objekt erstellen (New) + Loadimage
End Function

Function FindeBild.TBild(Name$)
;* For...Each Schleife + If + Return
End Function

Function ZeichneBild(Name$, x%, y%)
;* FindeBild + Drawimage
End Function
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)

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group