Schussbalken für kleines Fußballgame
Übersicht

ChallengerBetreff: Schussbalken für kleines Fußballgame |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo liebes Forum!
Ich habe mich gerade frisch angemeldet und habe natürlich schon meine erste Frage: Ich habe ein kleines Programm geschrieben, das auch schon sehr gut funktioniert: Es werden Fragen gestellt wie "Wohin möchtest du schießen" und "Wieviel Risiko möchtest du bei dem Schuss eingehen" (es geht um Fußball, was sonst ![]() Meine Programmierkenntnisse sind nur leider noch sehr bescheiden (bin eigentlich ein Grafiker), sodass ich selbst für dieses kleine, simple Programm fast 2 Nachmittage gebraucht habe. Ich möchte aber eine Kleinigkeit in meinem Code ändern: Ich hätte gerne, dass sich eine Art Schussbalken aufzieht, sobald man eine bestimmte Taste drückt. Denn die Frage "Wieviel Risiko man in den Schuss legen möchte" ist doch recht blöd. Stattdessen soll die Länge des Schussbalkens darüber entscheiden, wieviel Risiko der Spieler eingehen möchte. Meine Fragen lauten also: 1. Wie kann ich eine kleine Grafik anhand der Länge des Tastendrucks erstellen lassen? Wie in den Fußballgames typisch sollte der Balken über die Breite des Bildschirms gehen. 2. Wie kann ich das Programm erkennen lassen, wie lange ich die Taste gedrückt habe (bzw. wie lang der Balken geworden ist)? Danke im Voraus! |
||
![]() |
Silver_Knee |
![]() Antworten mit Zitat ![]() |
---|---|---|
Damit müsstest du es schaffen:
BlitzBasic: [AUSKLAPPEN] Repeat Keydown ![]() ![]() |
||
![]() |
empet |
![]() Antworten mit Zitat ![]() |
---|---|---|
vielleicht etwa so:
BlitzBasic: [AUSKLAPPEN]
|
||
Challenger |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wow was für ein genialer, schneller Support! Jetzt muss ich den Code nur noch in meinen großen, unübersichtlichen integriert und ausgelesen bekommen, dann müsste es funktionieren! Danke schonmal!
EDIT: Sollte ich deinen Code in eine Funktion packen oder geht das auch anders? Bin mir noch nicht so ganz sicher, wie ich das Ding in meinen Code packe. Wenn ich es einfach einfüge, kommt kein Balken zustande sondern das Video wird sofort abgespielt. |
||
![]() |
Silver_Knee |
![]() Antworten mit Zitat ![]() |
---|---|---|
vllt vor dem code nochmal flushkeys damit man neu anschlagen muss...
und bitte pack wenigstens ein Delay 100 in die erste While-Wend schleide sonst rennt dein pc sich kaput im nichts tun |
||
Challenger |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Okay sorry, aber ich bekomme es einfach nicht gebacken. Mein Wissen über das Programmieren ist einfach noch zu limitiert. Ich habe zwar versucht mich in die Befehle hineinzulesen, aber ich weiß gar nicht, wie ich da jetzt vorgehen soll. Hier mal der Code:
Code: [AUSKLAPPEN] Const WIDTH = 1680
Const HEIGHT = 1050 Graphics WIDTH, HEIGHT SetBuffer BackBuffer() ClsColor 0,0,0 Color 0,255,0 SeedRnd MilliSecs() b=Rnd(1,2) c=Rnd(1,3) d=Rnd(1,4) e=Rnd(1,6) f=Rnd(1,7) richtung1$=Input$("Wo möchtest du hinschießen? Links, Mitte oder Rechts?") If richtung1$="links" i=1 ElseIf richtung1$="mitte" i=2 ElseIf richtung1$="rechts" i=3 EndIf richtung2$=Input$("Wo möchtest du hinschießen? Unten oder oben?") If richtung2$="unten" j=0 ElseIf richtung2$="oben" j=10 EndIf i=0 While Not KeyDown(30);warten bis key gedrückt Wend Repeat If KeyDown(30) Then i=i+1 ;wenn taste gedrückt zähler +1 Else e=1 ;sonst abbrechen End If Line 1,1,i,1 ;balken anzeigen (kannst du verschönern) Until e=1 ;am schluss kannst du i auslesen :-) If i<800 z=0 ElseIf i>800 z=100 EndIf a=i+j+z If a=1 And b=1 movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 12.avi") ElseIf a=1 And b=2 movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 14.avi") EndIf If a=2 movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 10.avi") EndIf If a=3 And b=1 movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 10.avi") ElseIf a=3 And b=2 movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 8.avi") EndIf If a=11 And b=1 movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 1.avi") ElseIf a=11 And b=2 movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 3.avi") EndIf If a=12 And c=1 movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 9.avi") ElseIf a=12 And c=2 movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 23.avi") ElseIf a=12 And c=3 movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 28.avi") EndIf If a=13 And b=1 movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 5.avi") ElseIf a=13 And b=2 movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 6.avi") EndIf If a=101 And c=1 movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 2.avi") ElseIf a=101 And c=2 movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 15.avi") ElseIf a=101 And c=3 movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 25.avi") EndIf If a=102 movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 10.avi") EndIf If a=103 And d=1 movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 21.avi") ElseIf a=103 And d=2 movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 8.avi") ElseIf a=103 And d=3 movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 7.avi") ElseIf a=103 And d=4 movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 20.avi") EndIf If a=111 And e=1 movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 4.avi") ElseIf a=111 And e=2 movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 1.avi") ElseIf a=111 And e=3 movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 13.avi") ElseIf a=111 And e=4 movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 16.avi") ElseIf a=111 And e=5 movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 11.avi") ElseIf a=111 And e=6 movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 26.avi") EndIf If a=112 And c=1 movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 23.avi") ElseIf a=112 And c=2 movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 28.avi") ElseIf a=112 And c=3 movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 24.avi") EndIf If a=113 And f=1 movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 5.avi") ElseIf a=113 And f=2 movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 6.avi") ElseIf a=113 And f=3 movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 27.avi") ElseIf a=113 And f=4 movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 18.avi") ElseIf a=113 And f=5 movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 17.avi") ElseIf a=113 And f=6 movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 19.avi") ElseIf a=113 And f=7 movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 22.avi") EndIf ;Now determine the size of the movie w=MovieWidth(movie) ; the width of the movie h=MovieHeight(movie) ; the height of the movie ; Now set up the starting position and timing variables x=(WIDTH-w)/2 ; the x position of the movie on screen y=(HEIGHT-h-100)/2 ; the y position of the movie on screen period=400 ; the interval between frames time=MilliSecs() ; the time of the last frame update Repeat Until MilliSecs()-time>=period time=MilliSecs() ; save the current time for the next frame Repeat ; do nothing Cls ; clear the screen DrawMovie movie,x,y,w,h ; draw the movie ; Flip the buffers Flip Until KeyHit(1) ; Escape to exit ; Remove the movie from memory before closing down CloseMovie(movie) End ; bye! WaitKey Wenn ich das Programm so starte, füllt sich weder ein Balken noch funktioniert das Video: Memory Access Violation. |
||
![]() |
ozzi789 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Eine MAV deutet darauf hin das du zB etwas Abspielen (drawmovie) oder Anzeigen (drawimage) möchtest aber das passende File nicht geladen wurde.
Hast du den Debugger an? Sag doch welche Zeile er makiert ![]() Zudem ein kleiner Tipp, verwende nicht ganze Pfade, also nur zmb "/movies/Video 10.avi". So können auch andere Leute dein Programm nutze. (Da nicht jeder einen User hat der Paul heisst ![]() Im Sinne von: Zitat: [+]Game
,,,,,,-spiel.exe ,,,,,,[+]movies ,,,,,,,,,,,,-Video 10 ,,,,,,,,,,,,-Video 11 ,,,,,,,,,,,,- .... mfg |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
Challenger |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Der Debugger markiert genau die Zeile unterhalb den ganzen If-Bedingungen, unter den Pfaden, die du eben kritisiert hast (danke für den Tipp btw).
Genau hier: ;Now determine the size of the movie w=MovieWidth(movie) ; the width of the movie h=MovieHeight(movie) ; the height of the movie Diese Zeilen. Den Fehler hat ich auch schon oft und weiß daher, was er ungefähr bedeutet. Allerdings müsste das Video geladen werden können. Ich glaube das Problem liegt viel eher darin, dass mein Schussbalken noch nicht ganz funktioniert. |
||
![]() |
Silver_Knee |
![]() Antworten mit Zitat ![]() |
---|---|---|
hmm setz mal über die beiden Zeilen
If movie=0 then RuntimeError "Ich habe keine Datei geladen" sollte der fehler auftauchen konnte blitz entweder das movie nicht laden oder es kam zu garkeinem laden befehl weil alle ifs da oben nicht zu trafen |
||
Challenger |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Seltsam, es wird tatsächlich angezeigt, dass er die Datei nicht laden konnte. Wenn ich das Schussbalkensystem jedoch wieder durch mein altes System ersetze (sprich, einfach die Frage stelle, ob man riskant schießen möchte oder nicht) und den Rest unverändert lasse, funktioniert es reibungslos! | ||
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
klar...aus dem Schussbalken wird ja irgendwie I, J und Z erstellt, oder? und daraus wiederum A berechnet. Und das sorgt dafür, dass eines der Videos geladen wird. wenn nun A einen Wert annimmt, der in deinen IF-Verzweigungen gar nicht vorkommt, dann wird auch kein Video geladen.
Ich rate dir zum mehr DEBUGLOGs. z.b BlitzBasic: [AUSKLAPPEN] .... Und hier noch ein Tipp zur Struktur deines Codes: die IF-Abfragen lassen sich übersichtlicher zusammenfassen, was Fehlerquellen reduziert: BlitzBasic: [AUSKLAPPEN]
|
||
Challenger |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Also diese neue Ordnung von den if Schleifen habe ich schon einmal vorgenommen und tatsächlich hat sich etwas geändert: Jetzt kommt der Fehler nicht mehr bei "Ich kann das Video nicht laden", sondern jetzt kommt wieder danach (in den Zeilen, die ich vorhin angegeben habe) der MAV Fehler! | ||
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
stell bitte mal den aktuellen code hier rein....
und gleich noch eine Frage: Was zeigen denn in diesem Moment die DEBUGLOGs an? und dieZeilen nach den IFs sehen bei dir so aus?: BlitzBasic: [AUSKLAPPEN] ..... |
||
Challenger |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Also: Ich habe diese ganzen Debug Logs eingefügt und tatsächlich tut jetzt ein Teil der Videos! Für kleine i/z Zahlen (geringes Risiko/kurzer Schussbalken) jedoch funktioniert es noch nicht. Da zeigt er wieder die angegebene Zeile als Fehler an (MAV). Außerdem zeigt er den Schussbalken noch nicht als Grafik an.
Hier der aktuelle Code: Code: [AUSKLAPPEN] Const WIDTH = 1680
Const HEIGHT = 1050 Graphics WIDTH, HEIGHT SetBuffer BackBuffer() ClsColor 0,0,0 Color 0,255,0 SeedRnd MilliSecs() b=Rnd(1,2) c=Rnd(1,3) d=Rnd(1,4) e=Rnd(1,6) f=Rnd(1,7) richtung1$=Input$("Wo möchtest du hinschießen? Links, Mitte oder Rechts?") If richtung1$="links" i=1 ElseIf richtung1$="mitte" i=2 ElseIf richtung1$="rechts" i=3 EndIf richtung2$=Input$("Wo möchtest du hinschießen? Unten oder oben?") If richtung2$="unten" j=0 ElseIf richtung2$="oben" j=10 EndIf i=0 While Not KeyDown(30);warten bis key gedrückt Wend Repeat If KeyDown(30) Then i=i+1 ;wenn taste gedrückt zähler +1 Else e=1 ;sonst abbrechen End If Line 1,1,i,1 ;balken anzeigen (kannst du verschönern) Until e=1 ;am schluss kannst du i auslesen :-) If i<800 z=0 ElseIf i>800 z=100 EndIf a=i+j+z DebugLog " A=" + A If a=1 If b=1 DebugLog "Video 12 geladen" movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 12.avi") ElseIf b=2 DebugLog "Video 14 geladen" movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 14.avi") EndIf ElseIf a=2 DebugLog "Video 10 geladen" movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 10.avi") ElseIf a=3 If b=1 DebugLog "Video 10 geladen" movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 10.avi") ElseIf b=2 DebugLog "Video 8 geladen" movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 8.avi") EndIf ElseIf a=11 If b=1 DebugLog "Video 1 geladen" movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 1.avi") ElseIf b=2 DebugLog "Video 3 geladen" movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 3.avi") EndIf ElseIf a=12 If c=1 DebugLog "Video 9 geladen" movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 9.avi") ElseIf c=2 DebugLog "Video 23 geladen" movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 23.avi") ElseIf c=3 DebugLog "Video 28 geladen" movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 28.avi") EndIf ElseIf a=13 If b=1 DebugLog "Video 5 geladen" movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 5.avi") ElseIf b=2 DebugLog "Video 6 geladen" movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 6.avi") EndIf ElseIf a=101 If c=1 DebugLog "Video 2 geladen" movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 2.avi") ElseIf c=2 DebugLog "Video 15 geladen" movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 15.avi") ElseIf c=3 DebugLog "Video 25 geladen" movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 25.avi") EndIf ElseIf a=102 DebugLog "Video 10 geladen" movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 10.avi") ElseIf a=103 If d=1 DebugLog "Video 21 geladen" movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 21.avi") ElseIf d=2 DebugLog "Video 8 geladen" movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 8.avi") ElseIf d=3 DebugLog "Video 7 geladen" movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 7.avi") ElseIf d=4 DebugLog "Video 20 geladen" movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 20.avi") EndIf ElseIf a=111 If e=1 DebugLog "Video 4 geladen" movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 4.avi") ElseIf e=2 DebugLog "Video 1 geladen" movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 1.avi") ElseIf e=3 DebugLog "Video 13 geladen" movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 13.avi") ElseIf e=4 DebugLog "Video 16 geladen" movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 16.avi") ElseIf e=5 DebugLog "Video 11 geladen" movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 11.avi") ElseIf e=6 DebugLog "Video 26 geladen" movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 26.avi") EndIf ElseIf a=112 If c=1 DebugLog "Video 23 geladen" movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 23.avi") ElseIf c=2 DebugLog "Video 28 geladen" movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 28.avi") ElseIf c=3 DebugLog "Video 24 geladen" movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 24.avi") EndIf ElseIf a=113 If f=1 DebugLog "Video 5 geladen" movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 5.avi") ElseIf f=2 DebugLog "Video 6 geladen" movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 6.avi") ElseIf f=3 DebugLog "Video 27 geladen" movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 27.avi") ElseIf f=4 DebugLog "Video 18 geladen" movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 18.avi") ElseIf f=5 DebugLog "Video 17 geladen" movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 17.avi") ElseIf f=6 DebugLog "Video 19 geladen" movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 19.avi") ElseIf f=7 DebugLog "Video 22 geladen" movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 22.avi") EndIf If movie=0 Then RuntimeError "Ich habe keine Datei geladen" EndIf ;Now determine the size of the movie w=MovieWidth(movie) ; the width of the movie h=MovieHeight(movie) ; the height of the movie ; Now set up the starting position and timing variables x=(WIDTH-w)/2 ; the x position of the movie on screen y=(HEIGHT-h-100)/2 ; the y position of the movie on screen period=100 ; the interval between frames time=MilliSecs() ; the time of the last frame update Repeat Until MilliSecs()-time>=period time=MilliSecs() ; save the current time for the next frame Repeat ; do nothing Cls ; clear the screen DrawMovie movie,x,y,w,h ; draw the movie ; Flip the buffers Flip Until KeyHit(1) ; Escape to exit ; Remove the movie from memory before closing down CloseMovie(movie) End ; bye! WaitKey |
||
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
also, die DEBUGLOGs sind nicht dafür verantwortlich, dass der Code plötzlich funktioniert. Mit diesem Befehl kannst Du aber im DEBUG-Fenster sehen, welchen Wert A zu dem Zeitpunkt des Problems hatte. Außerdem siehst du in dem DEBUG-Fenster wie genau der Name der Video-Datei lautete, die aktuell geladen werden sollte.
Beides gibt dir Informationen, wo ein Denkfehler stecken könnte. Also check mal, bei welchem A der Fehler auftritt. Und kürze bitte den Code noch so, dass nicht in jedem IF eine eigenes OPENMOVIE steht, sondern dass in den IFs nur der Dateiname festgelegt wird, das Laden aber nur 1x ganz am Ende der IF-Zeilen erfolgt. Nur so stelltst Du fest, ob irgendeine Kombination zu überhaupt keinem sinnvollen Movie-Laden führt. Schau dir dazu nochmal mein Beispiel aus dem letzten Post an. Schussbalken als Grafik probiers mal so: BlitzBasic: [AUSKLAPPEN] i=0 |
||
Challenger |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Aha, exzellenter Tipp und aufgrund deines neuen Schussbalken-Codes funktioniert auch dieser nun. Das Problem ist nun folgendes:
Der A-Wert scheint sich ausschließlich darauf zu berufen, wie groß mein Schussbalken wird. Deshalb geht das Video manchmal und manchmal nicht: Wenn ich lange die Schusstaste drücke, ist A=14, doch für diesen A-Wert existiert überhaupt kein Video. Wenn ich sie lang drücke, wird der A-Wert bis zu 200 und noch größer! Verstehe ich nicht, was ich da falsch gemacht habe... EDIT: Ok habe endlich einmal einen Fehler alleine gefunden! Zufälligerweise überschnitten sich zwei Variablen aus meinem Code mit einem von euch geposteten! |
||
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
du findest alle deine Fehler, wenn du mehr mit DEBUGLOG arbeitest. Vielleicht hast du ja mal Lust mein "Fehler finden"-Tutorial zu lesen? https://www.blitzforum.de/foru...hp?t=33510
Dort steh auch was zu Variablen-Namen drin, die dir ja auch bei diesem Fehler zum Verhängnis geworden sind. A oder Z oder N taugen einfach nicht als Varialbennamen! Nenn die Dinger nach dem,was sie sind: Zitat: RichtungsWert%
ObenUnten% KraftAnteil% ZufallA%, ZufallB%, ... FilmBreit%, FilmHoch%, FilmX%, FilmY% ...soviel Zeit sollte sein. Und dann spart dir das viel Zeit bem Fehlersuchen. Not-Nagel Außerdem sollte es am Ende der IF-Zeilen eine Abfrage geben, die nicht existierende Filme durch den 0815-Film ersetzt: BlitzBasic: [AUSKLAPPEN] If Movie=0 ThenDann hast du 100% keinen undefinierten Zustand mehr. |
||
Challenger |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Oh man ich verstehe das einfach nicht. Der Code von oben ist nach wie vor der aktuelle, nur mit dem Unterschied der sich überschneidenden Variablen: Die Videos funktionieren zwar, jedoch wird pro Richtung immer nur ein und das selbe Video abgespielt. Der Zufallsgenerator funktioniert anscheinend nicht! Könnte sich jemand meine Rnd Geschichte oben kurz anschauen? | ||
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Challenger
Du könntest doch auch mal die in diesem Moment auftretenden DEBUGGER-Meldungen hier dazuschreiben. Was sagen denn die Variablen A, Z ,etc...? Da ja keiner deine Videos hat, kann man das Ganze schlecht ausprobieren. Würdest Du den Code so umstellen, wie ich es in der letzten Post geschrieben habe, gäbe es nur noch eine OPENMOVIE-Stelle und Dritte könnten das Programm simulieren, weil ja nur eine Codezeile ausmaskiert werden muss. Außerdem darfst du jederzeit den aktuellen Code reinstellen. Das ist für Dritte leichter als wenn Du beschreibst, welche Änderungen du seither gemacht hast. Es ist sogar möglich den Code immer wieder in deinem allerersten Beitrag zu ändern. Klick auf deinen ersten Beitrag auf "Beitrag bearbeiten", lösche den alten Code und geben den aktuellen Code rein. Anschließend kannst du in den zukünftigen Posts immer darauf hinweisen, dass oben der akt. Code zu finden ist. Wie wäre das? Dein Code enthält sehr viele Möglichkeiten für Eingabe-Fehler. Hier mal, wie so etwas sicherer zu programmieren wäre: BlitzBasic: [AUSKLAPPEN] Const WIDTH = 800 Die Verbesserungen sind: 1. Anzeige der Zufallswerte 2. Für Richtung1$ ein zusätzliches ELSE, falls der User keines der drei gewünschten Worte drückt. Laut deiner Anweisung soll man z.b. "Links" großgeschrieben eingeben, die IF-Abfrage erwartet aber ein kleingeschriebenes. Vielleicht solltest du hier noch ein wenig genauer werden. 3. Anzeige, was bei Richtung1 herausgekommen ist 4. Das gleiche für Richtung2 5. Eine Anweisung, welche Taste eigentlich zu drücken ist. Zusätzlich wird der Balken schon ein bißchen gemalt, damit der User sieht, was gleich kommen wird. Der Balken wirkt auch besser mit RECT als mit LINE! Außerdem eine Verbesserung beim Festlegen von Z. In deinem code gibt es eine Situation wo Z gar keinen Wert annimmt. Nämlich wenn I zufällig genau 800 ist! Code-Fehler In diesem Gewühle habe ich außerdem einen Code-Fehler entdeckt. Weil Du noch nicht korrekt einrückst, fällt er leider nicht auf. Die entscheidende Codezeile mit dem IF movie=0 wird daher so gut wie nie arbeiten können: Code: [AUSKLAPPEN] ElseIf a=113
If f=1 DebugLog "Video 5 geladen" movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 5.avi") ElseIf f=2 DebugLog "Video 6 geladen" movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 6.avi") ElseIf f=3 DebugLog "Video 27 geladen" movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 27.avi") ElseIf f=4 DebugLog "Video 18 geladen" movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 18.avi") ElseIf f=5 DebugLog "Video 17 geladen" movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 17.avi") ElseIf f=6 DebugLog "Video 19 geladen" movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 19.avi") ElseIf f=7 DebugLog "Video 22 geladen" movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 22.avi") EndIf If movie=0 Then RuntimeError "Ich habe keine Datei geladen" EndIf Wenn du richtig einrückst, wir der Fehler klar: BlitzBasic: [AUSKLAPPEN] ElseIf a=113 Das movie=0 befindet sich also noch in der A=113 If-Abfrage! richtig wäre: BlitzBasic: [AUSKLAPPEN] ..... So und hier nun mal der zweite Teil, in der Art wie ich es mir vorstelle. Und da wird nun ziemlich schnell klar, dass es einige undefinierte Werte A gibt, die logischerweise zu keinem Video führen: BlitzBasic: [AUSKLAPPEN] a=i+j+z |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group