Problem mit DrawImage in einer Function

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

SenSix

Betreff: Problem mit DrawImage in einer Function

BeitragMi, Nov 09, 2005 16:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
Graphics 640, 480, 16, 1
SetBuffer BackBuffer()

kreuz = LoadImage("zielkreuz.bmp")
gegner = LoadImage("gegner.bmp")

MaskImage kreuz, 255, 0, 255
MaskImage gegner, 255, 0, 255

Global lebt
Global posX
Global posY

Repeat
; PROGRAMM START
Cls
If lebt = 0 Then gegner_erschaffen()
DrawImage kreuz, MouseX(), MouseY()
Flip

If KeyDown(1) Then End

; PROGRAMM ENDE
Forever

Function gegner_erschaffen()
DrawImage gegner, Rnd(200, 600), Rnd(200, 400)
lebt = 1
End Function


Kurz und buendig: Wenn ich das Programm starte kommt eine Fehlermeldung mit 'Image does not exist' und das DrawImage in der Function wird vom Debugger markiert. Das Bild existiert jedoch, und den Namen habe ich aus Verzweifelung sogar kopiert. Wenn ich das DrawImage gegner weglasse dann funktioniert das Programm einwandfrei.

Danke im Voraus, SenSix
 

ZhangHe2

BeitragMi, Nov 09, 2005 16:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Gegner muss global sein!

skey-z

BeitragMi, Nov 09, 2005 16:05
Antworten mit Zitat
Benutzer-Profile anzeigen
du musst die varaible gegner entweder global deklarieren oder der funktion übergeben

also:
Code: [AUSKLAPPEN]

...
global gegner=loadimage(...)
...

function gegner_erschaffen()
drawimage gegner, x, y
...


oder

Code: [AUSKLAPPEN]

...
gegner=loadimage(...)
...
gegner_erschaffen(gegner)

function gegner_erschaffen(bild)
drawimage bild, x,y
...
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz
BAC#57: 2. Platz
Twitter

Lunatix

BeitragMi, Nov 09, 2005 16:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Genau !

Global Gegner und Global lebt, denn sonst lebt der gegner für die function neimals, weil lebt immer 0 ist. siehe auch
BlitzBasic: [AUSKLAPPEN]

Global
Local
[size=9]Pro|gram|mier|er: Ein Organismus, der Koffein in Software umwandelt.
Geben Sie eine beliebige 11-stellige Primzahl ein, um fortzusetzen...

SenSix

BeitragMi, Nov 09, 2005 16:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielen Dank. Jetzt wird es wohl funktionieren. (Und ich haenge 20 Minuten an dem Problem ohne diese Dummheit zu bemerken x_X)

Lunatix

BeitragMi, Nov 09, 2005 16:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Was meinst du an welchen problemen ich manchmal so hänge?
Manchmal passiert sowas sogar mir(und bestimmt auch allen anderen [die jetz denken von wegen - gebts ruhig zu;-)])

Net entmutigen lassen - auch icke hab mal klein angefangen(wenn ich die codes von damals sehe könnt ich immer verrückt wern;-)
[size=9]Pro|gram|mier|er: Ein Organismus, der Koffein in Software umwandelt.
Geben Sie eine beliebige 11-stellige Primzahl ein, um fortzusetzen...

SenSix

BeitragMi, Nov 09, 2005 16:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Kann ich mir vorstellen ^^

Nun, mal wieder ein anderes Problemchen:
Ich habe jetzt eine Animation eingebaut. Schoen und gut, doch die Animation laeuft zu schnell ab. Ein delay einzufuegen habe ich garnicht erst versucht, denn ich weiss dass dies das Programm aufhaelt. Wie kann man das delay also ersetzen, bzw. wie kann man das anders loesen?

Hubsi

BeitragMi, Nov 09, 2005 16:45
Antworten mit Zitat
Benutzer-Profile anzeigen
ql:MilliSecs ist hier Mittel der Wahl. Den Wert speichern und wenn er dann wider größer ist als der gespeicherte + die gewünschte Zeitspanne die Variable die den Frame angibt erhöhen Very Happy
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

SenSix

BeitragMi, Nov 09, 2005 17:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Hubsi hat Folgendes geschrieben:
<a href="http://www.blitzbase.de/befehle2d/millisecs.htm" class="postlink" target="_blank">MilliSecs<img src="/images/quicklink.gif" width="13" height="11" alt="" title="Begriff nachschlagen" border="0"></a> ist hier Mittel der Wahl. Den Wert speichern und wenn er dann wider größer ist als der gespeicherte + die gewünschte Zeitspanne die Variable die den Frame angibt erhöhen Very Happy


Mh, dann dachte ich anfangs richtig. Aber in der Beschreibung da steht doch, dass dies die Zeit nach dem Start von Windows ist. Egal, ich probier es einfach mal aus, danke.

Edit:

BlitzBasic: [AUSKLAPPEN]
zeit = MilliSecs()

If MilliSecs() = zeit + 500
frame = frame + 1
If frame = 3 Then frame = 0
EndIf


BlitzBasic: [AUSKLAPPEN]
DrawImage kreuz, MouseX(), MouseY(), frame


Funzt nicht. Ich hab nen Befehl gemacht, der die Variable Frame anzeigt. Sie bleibt staendig auf 0 stehen.

sirokuhl

BeitragMi, Nov 09, 2005 17:44
Antworten mit Zitat
Benutzer-Profile anzeigen
BlitzBasic: [AUSKLAPPEN]
If zeit + 50 < MilliSecs() Then
frame = frame + 1
If frame = 3 Then frame = 0
zeit = MilliSecs()
EndIf

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group