[Frage/Prob] Grundlagen der Animation (Bewegung einer Figur)

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Gray Fox

Betreff: [Frage/Prob] Grundlagen der Animation (Bewegung einer Figur)

BeitragSo, Feb 25, 2007 13:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi, bis jetzt habe ich nur mit "statischen Bildschirmen" gearbeitet. Jetzt würde ich gerne etwas Bewegung reinbringen, aber irgendwie klappt mein Code nicht Sad

Klammere ich die Befehle für den Grafikmodus (Graphics, setbuffer,flip) aus, bewegt sich meine Rechteck an die angegebene Position, aber die alten Rechtecke sieht man weiterhin (Schliereneffekt). Ich habe zwar versucht in der ForSchleife ein CLS zu setzen, mit dem Effekt, dass das Rechteck komplett verschwindet.


Anderes Problem: Der PC arbeitet die Befehle ja zyklisch ab d.h. so lange die Bewegung (ForSchleife) im Gange ist, würden keine weiteren Befehle wie z.B. die Mausbewegung ausgeführt. Wie kann man diesen Zustand am Besten umgehen?

Hat jemand paar Tipps parat? Smile


Code: [AUSKLAPPEN]

graphics 640,480,16,0

dim g_func_return(1)

type eigenschaft

field x
field y

End Type

global spieler.eigenschaft

spieler = new eigenschaft
spieler.eigenschaft\x = 10
spieler.eigenschaft\y = 10

setbuffer Backbuffer()

repeat
cls

if keyhit(2) then
   path(spieler.eigenschaft,250,10)
   spieler.eigenschaft\x = g_func_return(0)
   spieler.eigenschaft\y = g_func_return(1)
end if

rect mouseX(),MouseY(),10,10

rect spieler.eigenschaft\x,spieler.eigenschaft\y,10,10

flip
Until keyhit(1)

function path(typex.eigenschaft, endx,endy)

         for x1 = typex.eigenschaft\x to endx
         for y1 = typex.eigenschaft\y to endy
             delay 100
             rect x1,y1,10,10
         next
         next
         g_func_return(0) = x1
         g_func_return(1) = y1
End Function
 

Yogu

BeitragSo, Feb 25, 2007 15:19
Antworten mit Zitat
Benutzer-Profile anzeigen
In der For-Schleife musst du Cls und Flip verwenden, sonst siehst du nichts. Und die Maus wird nicht von BlitzBasic gesteuert, die bleibt so schnell nicht hängen. Die Maus wird in der obersten Ebene von Windows geregelt, sogar wenn fast der ganze Computer hängen bleibt, bewegt sich die Maus noch. Wenn du das Maus-Rechteck meinst, musst du das einfach auch in der For-Schleife anzeigen. Auserdem ist Delay 100 etwas lang, da ruckelts schon ganz schön. Ich hab das in Delay 10 geändert, das ist schon ruckelfrei.

Code: [AUSKLAPPEN]
Graphics 640,480,16,2

Dim g_func_return(1)

Type eigenschaft

Field x
Field y

End Type

Global spieler.eigenschaft

spieler = New eigenschaft
spieler.eigenschaft\x = 10
spieler.eigenschaft\y = 10

SetBuffer BackBuffer()

Repeat
Cls

If KeyHit(2) Then
   path(spieler.eigenschaft,250,10)
   spieler.eigenschaft\x = g_func_return(0)
   spieler.eigenschaft\y = g_func_return(1)
End If

Rect MouseX(),MouseY(),10,10

Rect spieler.eigenschaft\x,spieler.eigenschaft\y,10,10

Flip
Until KeyHit(1)

Function path(typex.eigenschaft, endx,endy)
         For x1 = typex.eigenschaft\x To endx
           For y1 = typex.eigenschaft\y To endy
             Delay 10
             Rect x1,y1,10,10
             Flip
             Cls
             Rect MouseX(),MouseY(),10,10
           Next
         Next
         g_func_return(0) = x1
         g_func_return(1) = y1
End Function


Hoffentlich konnte ich dir helfen.
 

Gray Fox

BeitragSo, Feb 25, 2007 15:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke Yogu, das ist schon einmal ein Schritt in die richtige Richtung.

Aber, würde ich deinem Beispiel konsequent folgen, müsste ich eigentlich mein komplettes bzw. einen großen Teil meines Programm zusätzlich in Animationsfunktion packen!?

Es müsste doch irgendwie möglich sein zu sagen:

If Variable.Type\EndKoordinatenXY <> Variable.Type\aktuelle Koordinaten then path(Variable.Type)

Zeichne Bild, Variable.Type\EndKoordinatenXY

Funktion path(Variable.Type)
delay 10 (oder irgendwas mit Timer)
Variable.Type\aktuelle Koordinaten = Variable.Type\aktuelle Koordinaten + X_Wert
Ende Funktion

So müsste es doch platzsparender bzw. schneller funktionieren?
Verstehst du was ich sagen will? Smile
 

Gray Fox

BeitragSo, Feb 25, 2007 20:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Durch bissn Rumprobierei habe ich das Problem weitgehends lösen können. Hier ist der Code dazu, vielleicht kann ja noch jemand etwas mit anfangen:

BlitzBasic: [AUSKLAPPEN]
Graphics 640,480,16,2

Dim g_func_return(1)

Type eigenschaft

Field x
Field y

End Type

Global spieler.eigenschaft

spieler = New eigenschaft
spieler.eigenschaft\x = 10
spieler.eigenschaft\y = 10

SetBuffer BackBuffer()

Repeat
Cls

Rect MouseX(),MouseY(),10,10

drawrect()

path(spieler.eigenschaft,250,10)

spieler.eigenschaft\x = g_func_return(0)

Flip
Until KeyHit(1)

Function drawrect()
Rect spieler.eigenschaft\x,spieler.eigenschaft\y,10,10
End Function

Function path(typex.eigenschaft, endx,endy)
If typex.eigenschaft\x < endx Then typex.eigenschaft\x = typex.eigenschaft\x + 1
If typex.eigenschaft\x = endx Then typex.eigenschaft\x = 10
g_func_return(0) = typex.eigenschaft\x
End Function

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group