Meldung: "Image does not exist" ????
Übersicht BlitzBasic Beginners-Corner
kevin89Betreff: Meldung: "Image does not exist" ???? |
Do, Jul 10, 2008 2:35 Antworten mit Zitat |
|
---|---|---|
Hallo Leute bin blutiger Anfänger in Blitz Basic also habt bitte verständnis mit mir
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 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 |
The Shark |
Do, Jul 10, 2008 2:37 Antworten mit Zitat |
|
---|---|---|
1. ball global machen
2. Ich würde die function anderst machen. es bringt nur kaos, wenn man in functions flip benutzt |
||
kevin89 |
Do, Jul 10, 2008 2:43 Antworten mit Zitat |
|
---|---|---|
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 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 |
Silver_Knee |
Do, Jul 10, 2008 3:07 Antworten mit Zitat |
|
---|---|---|
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. |
||
kevin89Betreff: AW |
Do, Jul 10, 2008 3:28 Antworten mit Zitat |
|
---|---|---|
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
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 |
BladeRunnerModerator |
Do, Jul 10, 2008 6:20 Antworten mit Zitat |
|
---|---|---|
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 |
Do, Jul 10, 2008 11:26 Antworten mit Zitat |
|
---|---|---|
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 |
kevin89Betreff: Re: Meldung: "Image does not exist" ???? |
Do, Jul 10, 2008 14:53 Antworten mit Zitat |
|
---|---|---|
Vielen Dank an alle! Ihr habt mir wirklich gut geholfen!
mfg, kevin89 |
||
kevin89 |
Übersicht BlitzBasic Beginners-Corner
Powered by phpBB © 2001 - 2006, phpBB Group