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

Gray FoxBetreff: [Frage/Prob] Grundlagen der Animation (Bewegung einer Figur) |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi, bis jetzt habe ich nur mit "statischen Bildschirmen" gearbeitet. Jetzt würde ich gerne etwas Bewegung reinbringen, aber irgendwie klappt mein Code nicht ![]() 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? ![]() 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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? ![]() |
||
Gray Fox |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group