Zu schnelle Animation

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Desty

Betreff: Zu schnelle Animation

BeitragDi, Aug 29, 2006 23:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Servus bin neu hier und hab eauch gleich mal ein Problem. Habe versucht eine Animation in einer Bewegung darzustellen. Leider ist diese zu schnell. Wie kann ich sie langsamer machen?

Hier mal mein Code

Code: [AUSKLAPPEN]

Graphics 800,600,16,2
Mann = LoadAnimImage("C:\BB Test\AniTest2.PNG",142,156,0,5)
Mann2 = LoadAnimImage("C:\BB Test\AniTest.PNG",142,156,0,5)
MaskImage Mann,255,255,255
MaskImage Mann2,255,255,255
SetBuffer BackBuffer()

ClsColor 255,255,255
Cls
X=400
y=300

ani=0
Repeat
 Cls
 
 

    If KeyDown(203) Then
       X=X-1:Ani=Ani+1:If Ani>4 Then Ani=0
       B = 1  ;Nach Links
    ElseIf KeyDown(205) Then
       X=X+1:Ani=Ani+1:If Ani>4 Then Ani=0
       B = 2  ;Nach Rechts
    EndIf
 


    If B = 1 Then 
       DrawImage Mann,X,Y,Ani

       Flip
       B = 0
    ElseIf B = 2 Then
       DrawImage Mann2,X,Y,Ani

       Flip
       B = 0

    EndIf
Until KeyDown(1)
End


THX im vorraus
Greetz Desty

PSY

BeitragMi, Aug 30, 2006 0:20
Antworten mit Zitat
Benutzer-Profile anzeigen
hoi,

willkommen erstmal.

du könntest z.b. deine animation nur alle 5 schritte ändern, anstatt bei jedem schritt. das könnte dann so aussehen:

Code: [AUSKLAPPEN]
If KeyDown(203) Then
       X=X-1:if x mod 5 = 0 then Ani=Ani+1:If Ani>4 Then Ani=0
       B = 1  ;Nach Links
   
    EndIf


flip brauchste übrigens nur 1x am ende der mainloop.


l8er,
psy

SpionAtom

BeitragMi, Aug 30, 2006 2:26
Antworten mit Zitat
Benutzer-Profile anzeigen
die Mod-Operation kann man auch noch weiter nutzen.

Statt
Code: [AUSKLAPPEN]
X=X-1:if x mod 5 = 0 then Ani=Ani+1:If Ani>4 Then Ani=0


schreibe
Code: [AUSKLAPPEN]
X=X-1:if x mod 5 = 0 then Ani=(Ani+1) mod 5


Denoch ist diese Methode nicht unbedingt die beste, da sie auf unterschiedlichen Rechnern nicht unbedingt die gleiche Animationsdauer erzielt. Um das zu erreichen, kannst du zb dafür sorgen, dass ein Schleifendurchlauf immer dieselbe Zeit benötigt.
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080
 

Desty

BeitragMi, Aug 30, 2006 15:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Vieln Dank für die schnelle Hilfe, haut bei mir alles jetzt soweit hin.

Ich were noch sehr dankbar wenn es eine erklärung gäbe was der Befehl "Mod" nun macht, speziefich in meinem Code.

Greetz Desty
 

Dreamora

BeitragMi, Aug 30, 2006 15:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Mod bereichnet den Divisionsrest von der Zahl vor dem Mod mit der Zahl nach dem Mod. Es ist also eine "Ganzzahldivision mit Rest".


Nehmen wir als Beispiel 13 und 5:

13 durch 5: 2*5 + 3 -> 13 mod 5 = 3

Aber für die Animation empfehle ich nicht den Mod Ansatz, da es sehr stark von der PC Geschwindigkeit abhängt.

Nimm eine Variable in die du dir merkst, wann du das letzte Mal das Bild um eins weiter geschaltet hast. Wenn die Zeitdifferenz (millisecs() - letzterUpdate > X) grösser einem bestimmten Wert ist (X hier), dann wird Anim um 1 erhöht bzw. innerhalb des Mods erhöht und natürlich letzterUpdate wieder aktualisiert.

EDITED: So schnell kanns gehen wenn man mit den gedanken schon 2 gleichungen weiter ist. Danke D-Bug ^^
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
  • Zuletzt bearbeitet von Dreamora am Mi, Aug 30, 2006 16:18, insgesamt 2-mal bearbeitet

d-bug

BeitragMi, Aug 30, 2006 15:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
13 durch 5: 2*5 + 3 -> 10 mod 5 = 3

*verbesser*
Zitat:
13 durch 5: 2*5 + 3 -> 13 mod 5 = 3

Wink

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group