Meldung: "Image does not exist" ????

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

kevin89

Betreff: Meldung: "Image does not exist" ????

BeitragDo, Jul 10, 2008 2:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Leute bin blutiger Anfänger in Blitz Basic also habt bitte verständnis mit mir Wink

Naja ich habe bisher ein paar ganz einfache spiele erstellt (zwei kugeln, eine rot, eine grün, die grüne bewegt sich und die rote kann man steuern, mit ihr muss man an der grünen vorbei ins ziel ohne sie zu berühren. Das hat auch ganz gut geklappt. Jetzt würde ich aber gerne eine Kugel, die auf dem Boden aufliegt und wenn man auf die Leertaste drückt, soll sie springen (nicht zu hoch, nach oben hin soll sie dann langsamer werden und nach unten hin wieder schneller). Also habe ich irgendwas improvisiert Very Happy

Ich dachte, eine Funktion zum springen sei das beste. Es klappt eigentlich auch ganz gut, nur wenn ich die Funktion durch drücken der Leertaste aufrufe, bekomme ich die Fehlermeldung "Image does not exist.", "Runtime error". Beim starten habe ich die Figur aber bereits gezeichnet, ich kann sie deutlich sehen, nur wenn ich dann durch drücken der Leertaste die Funktion aufrufe sagt der mir das. Ich habe keine Ahnung wieso, kann mir jemand sagen, was ich falsch mache? Ich habe noch mal nachgeguckt und keine Fehler entdecken können.

Also, in meinem Quelltext gibt es folgendes:

1 Spielfigur, Name ist "ball", Spielfigur ist gespeichert unter "ball.jpg"
2 Variablen, Name ist "x" (für die X-Position der Spielfigur) und "y" (für die Y-Position)
1 Funktion (jump)


Das ganze ist sehr einfach geschrieben, ich wollte das der Ball, wenn ich die Leertaste drücke mit der Geschwindigkeit von 0.2 nach oben fliegt und wenn er relativ weit oben ist, mit der Geschwindigkeit von 0.1 weiterfliegt bis er dann stehen bleibt, mit 0.2 wieder runterfliegt und kurz vor dem aufkommen wieder mit 0.1 fliegt. Dann soll er halt wieder zum stehen kommen.

Quelltext:

Code: [AUSKLAPPEN]


Graphics 1280, 800, 32, 1
SetBuffer BackBuffer()

x="400"
y="400"


ball=LoadImage("ball.jpg")
DrawImage ball, x, y
Flip

Function jump()
Flip
Cls

DrawImage ball, x, y

If y="200" Then
y=y-0.1
ElseIf y="180" Then
y=y+0.2
ElseIf y="380" Then
y=y+0.1
ElseIf y="400" Then
y=y
Else
y=y-0.2
End If

Flip
End Function





Repeat
If KeyDown("57") Then
jump()
Else
End If

Until KeyHit("1")
End




Bei der Fehlermeldung markiert er mir den Bereich in der Funktion "jump":

Code: [AUSKLAPPEN]

DrawImage ball, x, y


Ich hoffe ihr könnt mir bei meinem kleinen Problem helfen. Danke!
kevin89 Wink

The Shark

BeitragDo, Jul 10, 2008 2:37
Antworten mit Zitat
Benutzer-Profile anzeigen
1. ball global machen
2. Ich würde die function anderst machen. es bringt nur kaos, wenn man in functions flip benutzt
 

kevin89

BeitragDo, Jul 10, 2008 2:43
Antworten mit Zitat
Benutzer-Profile anzeigen
The Shark hat Folgendes geschrieben:
1. ball global machen
2. Ich würde die function anderst machen. es bringt nur kaos, wenn man in functions flip benutzt


Global? Sorry ich habe keine Ahnung was du meinst Wink
Kannst du mir das vielleicht erklären?

Und das mit der Funktion & dem Flip: Geht das dann gar nicht? Oder geht es und ist nur ein bisschen komisch?
kevin89 Wink

Silver_Knee

BeitragDo, Jul 10, 2008 3:07
Antworten mit Zitat
Benutzer-Profile anzeigen
die Idee einer Funktion ist einerseits den Code in Bestandteile zu zerlegen aber auch diesem Bestandteil einen eigenen Satz Variablen zu verpassen. Das spart Speicher weil man diesen Satz Variablen nur dann in den Arbeitsspeicher lädt, wenn die Funktion tatsächlich ausgeführt wird. Für deine Zwecke ist das natürlich hinderlich. Schließlich soll deine Funktion Variablen aus dem Hauptprogramm nehmen.

Damit das funktioniert gibt es 2 Wege:
- Du nutzt den Befehl Global und stellt somit eine spezielle variable allen Funktionen zur Verfügung.
- Du gibtst eine Kopie des wertes als Parameter deiner Funktion
Beispiel-Code: [AUSKLAPPEN]
hans$="Hans"
Print "Am Anfang hieß ich "+hans
Hallo(hans)
Print "Ich heiße immernoch "+hans

Function Hallo(person$);<< der wert der ankommt wird der variable person gegeben
  Print "Hallo, "+person
  ;zum Test - Das ganze funktioniert nicht Rückwärts. Die beiden Werte gelten nur für die Funktion
  hans$="Otto"
  person$="Otto"
End Function


Da x und y von der funktion verändert werden soll und das wieder zurück auch das hauptprogramm wirken soll müssen das Globale sein. Bei bild ist das egal, da die variable nicht verändert wird. Denkbar wäre bild als globale oder als parameter. Die globale hätte den vortteil dass jump das Spielermodell ersetzten könnte, als parameter könnte man der Funktion jump verschiedene spielerbilder geben ohne dass das auswirkungen auf das tatsächliche bild hat. Was besser ist müsstest dann du entscheiden.
 

kevin89

Betreff: AW

BeitragDo, Jul 10, 2008 3:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich bin mir nicht sicher, ob ich das richtig verstanden habe aber ich habs jetzt (wie ich hoffe) so gemacht, wie du gesagt hast. Jetzt kommt die Meldung mit dem Bild nicht mehr, aber dafür bleibt das Bild wenn ich drücke einfach stehen Sad

Quelltext:

Code: [AUSKLAPPEN]


Graphics 1280, 800, 32, 1
SetBuffer BackBuffer()

x="400"
y="400"


ball=LoadImage("ball.jpg")
DrawImage ball, x, y


Function jump(x, y)
If y="200" Then
y=y-0.1
ElseIf y="180" Then
y=y+0.2
ElseIf y="380" Then
y=y+0.1
ElseIf y="400" Then
y=y
Else
y=y-0.2
End If

End Function





Repeat
If KeyDown("57") Then
jump(x, y)
Else
End If

DrawImage ball, x, y

Flip

Until KeyHit("1")
End




Wäre nett wenn mir jemand da noch helfen könnte. mfg kevin89
kevin89 Wink

BladeRunner

Moderator

BeitragDo, Jul 10, 2008 6:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn Du Zahlen abfragst musst Du sie nicht in Anführungszeichen setzen, denn sonst werden sie als Zwichenkette interpretiert.
a$="400" ist eine Zeichenkette mit dem Inhalt "400"
a=400 ist die Zahl 400.
Wenn Su zu a 1 addierst, erhältst Du 401. Addierst Du zu a$ "1" erhältst Du "4001".
Ich hoffe das war verständlich.

Ansonsten möchte ich dir noch ein Lob aussprechen weil deine Fehlerbeschreibung im ersten Post einfach vorbildlich war- da könnte sich so manch einer eine Scheibe abschneiden.

Was global angeht würde ich Dir die Hilfe ans Herz legen, die Du oben in der Navigationsleiste des Portals findest.

Dennoch ein kurzes Beispiel:

Code: [AUSKLAPPEN]
local a=4
global b=4

print a
print b

test()

print a
print b
waitkey()
function test()
    a=5
    b=5
end function

Was geschieht da? Zuerst weisen wir a den Wert 4 zu und sagen Blitz dass sie local ist (Das kann man weglassen, denn das ist das was Blitz automatisch annimmt).
Dann sagen wir Blitz dass B global ist (also überall gültig) und geben b den Wert 4.
Nun lassen wir uns mit Print beide Werte ausgeben.
Dann rufen wir die Funktion Test auf.
Hier wird a nun der Wert 5 zugewiesen. Da jedoch eine Funktion ihren eigenen Gültigkeitsbereich für Variablen hat wird nicht unser a von oben verändert, sondern ein neues, nur in der Funktion gültiges a erschaffen.
B hingegen wurde ja als global erschaffen und ist auch in der Funktion weiter gültig, daher wird es verändert, nicht neu angelegt.
Um das zu verdeutlichen lassen wir uns nach der Funktion nochmal a und b ausgeben, und siehe da, ausserhalb der Funktion ist a wieder 4 und b bleibt bei 5.
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

Thunder

BeitragDo, Jul 10, 2008 11:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würde es gleich mit dem Gravitationsgesetz versuchen:
Code: [AUSKLAPPEN]

Graphics 800,600
SetBuffer BackBuffer()
x=400;x von kreis festlegen
y#=600-20;y von kreis festlegen
m1=20;Masse 1
m2=10000;Anziehungskraft
Repeat
Cls
If KeyHit(57) Then jump=1:up=1
If jump=1 Then
If up=1 Then
F#=1/((m1*m2)/Float(y*y))
y#=y#-F#
If y#<400 Then up=0
EndIf
If up=0 Then
r=400*2-y
F#=((m1*m2)/Float(r*r))
y#=y#+F#
If y>=580 Then jump=0
EndIf
EndIf
Oval x-m1/2,y#-m1/2,20,20
Flip
Until KeyHit(1)
End


da musste ich schon ein bisschen nachdenken um darauf zukommen das das hochspringen mit indirekter Proportionalität zu tun hat.
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit
 

kevin89

Betreff: Re: Meldung: "Image does not exist" ????

BeitragDo, Jul 10, 2008 14:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielen Dank an alle! Ihr habt mir wirklich gut geholfen! Wink

mfg,


kevin89
kevin89 Wink

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group