Der Mouse wird nicht "gefolgt"

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Mo

Betreff: Der Mouse wird nicht "gefolgt"

BeitragSo, Sep 17, 2006 20:29
Antworten mit Zitat
Benutzer-Profile anzeigen
N`abend Blitzer,

ich steh mal wieder auf einem mächtig dicken Schlauch und komm einfach nicht runter. Mr. Green

Angaben: Ich hab ein Bild mit 8 Frames, 4 Frames für ein Animation nach rechts und 4 für links.

Was soll passieren: Ich hab einen Mousezeiger, der, wenn er weiter rechts von meinem Image ist, die Animation für Rechts abspielen soll. Wenn der Zeiger weiter links ist, klar, die Animation für Links soll abgespielt werden.

Was passiert wirklich: Wenn der Zeiger weiter rechts vom Image ist, wird die Animation schön abgespielt. Wenn der Zeiger aber links vom Image ist, spielt er erst noch die restlichen Frames der Rechtsanimation aus.

Im Grunde weiß ich, was der „Fehler“ ist. Die Frames gehen immer frame=frame+1 und nur weil if frame>=8 then frame=4 dasteht, heißt das ja nicht gleich, dass das Image „weiß“, dass es bei Frame 4 starten soll.

Versuche: Ich hab „gesagt“, wenn der Mousezeiger = der X-Achse von dem Image ist, soll es ein einzelnes Frame von der Linksanimation zeigen. Also im Prinzip wie bei Keyhit, das die Richtung nur „angeschlagen“ soll. Da die Mouse aber zu schnell ist, geht das nicht.
Anderer Versuch war, dass ich einfach 2 Bilder genommen hab (eines für die Links- und eines für die Rechtsani) und sie dann abspielen hab, wenn der Mouszeiger in die Richtung zeigt: Gab aber beim wechseln von links nach rechts immer eine Lücke.

So und bevor die Fragezeichen über euren Köpfen noch größer werden, pack ich einfach mal den Code rüber. Mr. Green

Code: [AUSKLAPPEN]

Graphics 800,600,0,2
SetBuffer BackBuffer()

Global figur=LoadAnimImage ("Figur.png",50,40,0,8)
MaskImage figur,255,0,255

Global lauf,frame,timer,x=200,y=300

HidePointer

;Haupt
Repeat
Cls

;Figur zeichnen und animation
DrawImage figur, x, y, frame

Select lauf
 
 Case 1

   If MilliSecs()>timer+100 Then
   timer=MilliSecs()
   frame=frame+1
   If frame>=4 Then frame =0
   EndIf
   
 Case 2

   If MilliSecs()>timer+100 Then
   timer=MilliSecs()
   frame=frame+1
   If frame>=8 Then frame=4
   EndIf
   
End Select

;Mousezeiger
Rect mx,my,5,5
mx=MouseX()
my=MouseY()

;-
If mx<=x
 lauf=1
Else
 lauf=2
EndIf
;-

Flip Until KeyHit(1)
End
500 Euro Studiengebühren... ich glaub ich zieh in den Wald!!!

Eine Floßfahrt die ist lustig... *sing* Wink

StepTiger

BeitragSo, Sep 17, 2006 20:32
Antworten mit Zitat
Benutzer-Profile anzeigen
versuchs mal damit:

wenn der mauszeiger rechts ist ist startframe=4 und endframe=8
bei links eben das andere

und dann prüfst du:
if frame>endframe then frame=startframe
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer:
AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t
Gewinner: BP Code Compo #2
Π=3.141592653589793238...<--- und das aus dem kopf Laughing
Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser.
 

Dreamora

BeitragSo, Sep 17, 2006 20:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Oder du machst einfach dort wo du lauf=2 setzt auch gleich frame=4.

Aber ansonsten ist die Variante meines vorschreibers vorzuziehen, da sie es dir ermöglicht "unendlich viele" neue Situation hinzuzufügen, da die Grenzen variabel neu gesetzt werden können.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Mo

BeitragSo, Sep 17, 2006 22:27
Antworten mit Zitat
Benutzer-Profile anzeigen
@Dreamora: Also bei dir bekomm ich ein Standbild, da, wenn der Zeiger rechts ist, immer das Frame 4 angezeigt wird. Trotzdem Danke. Very Happy

@Step Tiger: Hab deins mal ausprobiert und auf unterschiedliche Art und Weise. Nur komm ich immer wieder beim gleichen raus und zwar: bis frame>endframe ist, müssen immer noch alle Frames abgespielt werden. Die Logik, die dahinter steckt kapier ich: dass beim wechseln der Mousseite sich auch die Start- und Endframes ändern und dadurch das Startframe entweder gleich auf 0 (für links) oder auf 4 (für rechts) setzt... ach ich glaub es ist grad einfach zu spät, ich mach morgen weiter.

Trotzdem Danke euch beiden Very Happy
500 Euro Studiengebühren... ich glaub ich zieh in den Wald!!!

Eine Floßfahrt die ist lustig... *sing* Wink

StepTiger

BeitragSo, Sep 17, 2006 22:51
Antworten mit Zitat
Benutzer-Profile anzeigen
dann musst du die derzeitige frame auch beim wechsel auf startframe stellen ^^
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer:
AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t
Gewinner: BP Code Compo #2
Π=3.141592653589793238...<--- und das aus dem kopf Laughing
Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser.

Mo

BeitragMo, Sep 18, 2006 11:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Ha, wie gesagt, ein bisschen Schlaf und die Sache klappt wieder. Habs ein bisschen überdacht und schon läufts. Danke Smile
500 Euro Studiengebühren... ich glaub ich zieh in den Wald!!!

Eine Floßfahrt die ist lustig... *sing* Wink

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group