Frame-Frage (ich bin ein Noob)-Noch nicht gelöst
Übersicht

Gehe zu Seite Zurück 1, 2, 3, 4 Weiter
petecoolbelab |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Könntest du das genauer erklären oder meinen Code korrigieren? | ||
![]() |
The_Nici |
![]() Antworten mit Zitat ![]() |
---|---|---|
Könntest du deinen Code kommentieren/das Problem beschreiben?
Bild1 ist ein Bild. Du kannst es nicht als Variable für eine For->Next Schleife benutzen. Ich vermute du hast das Prinzip einer solchen Schleife noch nicht begriffen. For i=1 to 100 zählt die Variable i von eins bis einhundert durch. d.H. i muss ein Integer sein in dem Falle. |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
The_Nici erklärt es ja schon. Bild1 ist bei deinem Beispiel durch Bild1 = LoadAnimImage das Handle von dem aktuell geladenem Bild zugeteilt worden. Dieses Handle spiegelt die Adresse wieder, wo das Bild im Speicher des Rechners landet (ist ja jedesmal wo anders). Das Handle sollte also absolut durch nichts überschrieben werden, ausser man hat es zuvor mit ql:FreeImage wieder freigegeben. Dann erst kann man mit dem Gedanken spielen, das Handle wieder zu verwenden.
Mit deiner For/Next -Schleife tust du aber genau das, du überschreibst einfach das einmalige Handle welches zu deinem Bild im Speicher führt und wunderst dich eventuell später warum DrawImage Bild1,x,y nicht mehr funktioniert. Von daher solltest du für die Schleife einen anderen Variablennamen verwenden. |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
petecoolbelab |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Zitat: For n = 0 To 640 Step 20 Cls Hab das Bild1 jetzt durch n ersetzt. das ganze sieht jetzt so aus: Code: [AUSKLAPPEN] Graphics 640, 480, 16, 3 SetBuffer BackBuffer() Bild1 = LoadAnimImage("C:\Dokumente und Einstellungen\Peter\Eigene Dateien\Eigene Bilder\AL_HEroes2.png", 100, 180, 0, 11) ;animation laden MaskImage Bild1, 255, 255, 255 ;transparenz Local frame ;variable deklarieren Repeat For n = 0 To 640 Step 20 Cls If zeit + 120 < MilliSecs() And pause = 0Then zeit = MilliSecs() frame = frame + 1 EndIf If frame =10 Then frame = 1 EndIf If KeyHit(25) Then pause = pause Xor 1;schaltet zwischen 0 und 1 EndIf If pause = 0 Then frame = frame ElseIf pause = 1 Then frame = frame = 1 EndIf Flip Next Until KeyHit(25) WaitKey End Funktioniert aber auch noch nicht. Könnt ihr mir helfen? |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich könnte dir helfen, wenn ich wüsste was du vor hast. Dein Programm ergibt so keinen Sinn und es lässt auch noch keine Rückschlüsse zu diesen zu. Du lädst zwar das Bild, aber verwendest es nirgens. Genauso auch mit der For/Next -Schleife. Nirgend wird n verwendet.
Es sind auch noch ein paar Fehler drin: Code: [AUSKLAPPEN] or n = 0 To 640 Step 20 Cls Das Cls hat da so in der Form nichts zu suchen.
Code: [AUSKLAPPEN] If KeyHit(25) Then ... Tastaturabfragen sollten nicht in untergeordneten Schleifen abgefragt werden.
Code: [AUSKLAPPEN] frame = frame = 1 Kann aus logischer Sicht garnicht richtig sein.
MilliSecs() sollte nach Möglichkeit nicht mehrfach innerhalb einer Schleife abgefragt werden. Wie auch mit anderen Funktionen. ... Arbeite die Tutorials bei Robsite mal durch, dann sollten die ganzen Grundlagen zumindest verstanden sein. edit1: Es ist auch von ausserordentlicher Wichtigkeit, dass man gleich zu Beginn mit dem einrücken des Codes anfängt. Ich habe mir dazu dein Code genommen es von IDEal automatisch einrücken lassen und die paar Sachen so korrigiert bzw. kommentiert. Code: [AUSKLAPPEN] Graphics 640, 480, 16, 3
SetBuffer BackBuffer() Local Bild1 = LoadAnimImage("C:\Dokumente und Einstellungen\Peter\Eigene Dateien\Eigene Bilder\AL_HEroes2.png", 100, 180, 0, 11) ;animation laden MaskImage Bild1, 255, 255, 255 ;transparenz Local frame,zeit,pause,ms,n ;variablen deklarieren Repeat Cls ms=MilliSecs() For n = 0 To 640 Step 20 If zeit + 120 < ms And pause = 0 Then zeit = ms frame = frame + 1 If frame = 10 Then frame = 1 EndIf If KeyHit(25) Then pause = pause Xor 1 ;schaltet zwischen 0 und 1 If pause = 0 Then frame = frame ;Ergibt so keinen Sinn ElseIf pause = 1 Then frame = frame = 1 ;Zuweisung mit anschliessender Zuweisung??? EndIf Next Flip Until KeyHit(25) WaitKey End |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
The_Nici |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich denke diese For->Next Schleife ist ein Noob-Versuch um die Framezahl zu regulieren. :/ | ||
petecoolbelab |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hectic hat Folgendes geschrieben: Ich könnte dir helfen, wenn ich wüsste was du vor hast. Dein Programm ergibt so keinen Sinn und es lässt auch noch keine Rückschlüsse zu diesen zu. Du lädst zwar das Bild, aber verwendest es nirgens. Genauso auch mit der For/Next -Schleife. Nirgend wird n verwendet.
Es sind auch noch ein paar Fehler drin: Code: [AUSKLAPPEN] or n = 0 To 640 Step 20 Cls Das Cls hat da so in der Form nichts zu suchen.
Code: [AUSKLAPPEN] If KeyHit(25) Then ... Tastaturabfragen sollten nicht in untergeordneten Schleifen abgefragt werden.
Code: [AUSKLAPPEN] frame = frame = 1 Kann aus logischer Sicht garnicht richtig sein.
MilliSecs() sollte nach Möglichkeit nicht mehrfach innerhalb einer Schleife abgefragt werden. Wie auch mit anderen Funktionen. ... Arbeite die Tutorials bei Robsite mal durch, dann sollten die ganzen Grundlagen zumindest verstanden sein. edit1: Es ist auch von ausserordentlicher Wichtigkeit, dass man gleich zu Beginn mit dem einrücken des Codes anfängt. Ich habe mir dazu dein Code genommen es von IDEal automatisch einrücken lassen und die paar Sachen so korrigiert bzw. kommentiert. Code: [AUSKLAPPEN] Graphics 640, 480, 16, 3
SetBuffer BackBuffer() Local Bild1 = LoadAnimImage("C:\Dokumente und Einstellungen\Peter\Eigene Dateien\Eigene Bilder\AL_HEroes2.png", 100, 180, 0, 11) ;animation laden MaskImage Bild1, 255, 255, 255 ;transparenz Local frame,zeit,pause,ms,n ;variablen deklarieren Repeat Cls ms=MilliSecs() For n = 0 To 640 Step 20 If zeit + 120 < ms And pause = 0 Then zeit = ms frame = frame + 1 If frame = 10 Then frame = 1 EndIf If KeyHit(25) Then pause = pause Xor 1 ;schaltet zwischen 0 und 1 If pause = 0 Then frame = frame ;Ergibt so keinen Sinn ElseIf pause = 1 Then frame = frame = 1 ;Zuweisung mit anschliessender Zuweisung??? EndIf Next Flip Until KeyHit(25) WaitKey End Dein Code klappt auch nicht. Ich will, dass der Held von links nach rechts läuft. Help Me, Please |
||
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hier mal ein Beispiel wie es gemacht wird das sich die Figur bewegt, habe es extra einfach gehalten
Code: [AUSKLAPPEN] Graphics 640 , 480 , 16 , 3
SetBuffer BackBuffer () Bild1 = LoadAnimImage ("C:\Dokumente und Einstellungen\Peter\Eigene Dateien\Eigene Bilder\AL_HEroes2.png", 100 , 180 , 0, 11) ;animation laden MaskImage Bild1, 255 , 255 , 255 ;transparenz Local frame ;variable deklarieren Repeat Cls ;Frame weiterschalten nur wenn keine Pause If zeit + 120 < MilliSecs () And pause = 0 Then zeit = MilliSecs () frame = frame + 1 If frame > 10 Then frame = 0 EndIf ; ;Bild malen DrawImage Bild1 ,Xpos, 200 , frame ; ;Pause ON/OFF If KeyHit (25) Then pause = pause Xor 1;schaltet zwischen 0 und 1 ; If Pause = 0 Then xpos = xpos + 2 ; Figur wieder nach links setzten If xpos > 480 Then xpos = 0 Flip Until KeyHit (1); wenn ESC dann beenden WaitKey End Schau dir den Code genau an damit du ihn auch verstehst sonst wird das nix |
||
[BB2D | BB3D | BB+]
|
petecoolbelab |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hab hier ein kleines Video gemacht:
http://petevideo.blogspot.com Man sieht hier, dass nicht nur eine Figur durchs Bild geht und der Frame leicht nach hinten geht bzw. nicht mitkommt. Wie kann ich das verhindern? |
||
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
1. Wenn das Bild nicht korrekt angezeigt wird also halb halb hast du beim laden des Bildes was falsch gemacht
evt ist es nicht 100,180,0,11 sondern 90 ,180,0,12 Schau die mal die Original Datei an , zähl die einzelnen Bilder und die grösse der ganzen bitmap damit du genau sagen kannst wie gross ein Frame ist Code: [AUSKLAPPEN] AL_HEroes2.png", 100 , 180 , 0, 11
2. wenn er den "Moonwalk" macht dann musst du die Geschwindigkeit ändern Posx = posx +3 oder aber den timer abändern also 150 anstatt 120milli |
||
[BB2D | BB3D | BB+]
|
![]() |
The_Nici |
![]() Antworten mit Zitat ![]() |
---|---|---|
Die Framebreite und Frameanzahl dem Bild anpassen, z.b. | ||
petecoolbelab |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke, hat geholfen.
Aber eine Frage hätte ich noch nämlich zu diesem Link: http://www.robsite.de/bbkurs2/09kollision.htm Rob schreibt hier: If ImagesCollide(bild1, x1, y1, frame1, bild2, x2, y2, frame2) Then Print "Pixelgenaue Kollision!!! (!)" Bei X1, und y1 was soll ich dort hinschreiben? |
||
![]() |
Caesium |
![]() Antworten mit Zitat ![]() |
---|---|---|
die position der bilder.
beispiel: Code: [AUSKLAPPEN] DrawImage bild1, 300, 300
position ist also 300, 300. gruß, caesium |
||
Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann. Das Gegenteil ist da schon schwieriger. ![]() |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich vermute mal dass in dem Beispielcode dort x1 und y1 als variablen benutzt wurden und daher schon die Position der Spielfigur enthielten. | ||
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 |
petecoolbelab |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hab das jetzt probiert. Sieht jetzt so aus:
Code: [AUSKLAPPEN] If ImagesCollide(Bild1, Miene1) Then Print("Sorry. Du hast verloren!") Jetzt bekomme ich "Not enough Parameters" angezeigt. Wie kann ich das ändern? |
||
![]() |
Sereyanne |
![]() Antworten mit Zitat ![]() |
---|---|---|
Naja du hast wohl zuwenig Merkmale angegeben.
Guck dir den Tut-Code doch mal an: Code: [AUSKLAPPEN] If ImagesCollide(bild1, x1, y1, frame1, bild2, x2, y2, frame2) Then Print "Pixelgenaue Kollision!!! (!)"
Da sind in der Klammer 8 Parameter angegeben. Du aber fütterst BB nur mit 2. Da weiß es doch gar nicht was es machen soll! Das musst du ihm schon genauer angeben. |
||
![]() |
Caesium |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] ImagesCollide(bild1, x1, y1, frame1, bild2, x2, y2, frame2)
du musst die positionen angeben, habe ich doch eben schon gesagt. x1/y1 = position des ersten bildes, x2/y2 = die des zweiten bildes. außerdem musst du das aktuelle frame angeben (was hier '0' wäre)... |
||
Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann. Das Gegenteil ist da schon schwieriger. ![]() |
![]() |
The_Nici |
![]() Antworten mit Zitat ![]() |
---|---|---|
x=X Koordinate->In Variable speichern!
y=Y-Koordinate->In Variable speichern! Und bitte, such dir ein neues Hobby oder lies dir die Posts doppelt durch. |
||
petecoolbelab |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi habe folgendes Problem:
Ich habe diesen Code. Immer wenn ich ihn ausführe steht:" divide by zero" oder so. Bin mir ziemlich sicher , dass es was was mit dem Bild2 zu tun hat. Hier der code: Code: [AUSKLAPPEN] Graphics 640 , 480 , 16 , 3 SetBuffer BackBuffer () Bild1 = LoadAnimImage ("AL_HEroes2.png", 87 , 180 , 0, 11) ;animation laden MaskImage Bild1, 255, 255 , 255 ;transparenz Local frame ;variable deklarieren Bild2 = LoadAnimImage ("AL_HEroes2_spiegel.png", xpos, 180, 0, 11) Local frame2 Miene1 = LoadImage("Miene1.png") MaskImage Miene1, 255, 255, 255 Abfont = LoadFont("Arial Black") Repeat Cls ;Frame weiterschalten nur wenn keine Pause If zeit + 100 < MilliSecs () And pause = 1 Then zeit = MilliSecs () frame = frame + 1 If frame = 11 Then frame = 0 EndIf If zeit + 100 < MilliSecs () And pause = 0 Then DrawImage Bild1 ,Xpos, 310 , frame ;Bild malen EndIf ;Miene DrawImage Miene1, 400, 440 ; ;Pause ON/OFF If KeyDown (205) Then pause = 1 If KeyDown (203) Then pause = 2 If Not KeyDown (205) Then pause = 0 If Pause = 1 Then xpos = xpos + 2 If Pause = 0 Then xpos = xpos If Pause = 2 Then DrawImage Bild2, Xpos, 310, frame MaskImage Bild2, 255, 255, 255 ypos = ypos - 2 ; Figur wieder nach links setzten EndIf If xpos > 480 Then xpos = 0 EndIf If ImagesCollide(Bild1, Xpos, 310, frame, Miene1, 400, 440, 0) Then Cls SetFont Abfont Print("Sorry. Du hast verloren!") WaitKey End EndIf Flip Until KeyHit (1); wenn ESC dann beenden WaitKey End Ich hoffe ihr könnt mir helfen. |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Divide by zero heisst "Teile durch null." Und das ist mathematisch nicht definiert.
Es bedeutet dass du irgendwo versuchst durch null zu teilen. Der Debugger wird dir zeigen wo. Da in dem Code den Du hier postest allerdings keine Division vorkommt muss der Fehler wohl woanders liegen (sprich du hast wohl nicht allen Code gepostet). |
||
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 |
Gehe zu Seite Zurück 1, 2, 3, 4 Weiter
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group