Point and Click, "differenzierter Gang"
Übersicht

Niu-IunBetreff: Point and Click, "differenzierter Gang" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Also, ich hab Unterprogramme, die eine Bewegungsanimation zeigen, aber ich weiß nicht so recht, wie ich es schaffe, dass
erst der längere Abschnitt des Weges gegangen wird ( bei 2 nach unten und 1 nach links erst die Schritte nach unten) Graphics 320, 240, 16, 1 ;;;;;;;;;;; ClsColor 0, 0, 0 SetBuffer BackBuffer() Char = LoadAnimImage("Hero.bmp", 24, 32, 0, 12) Cursor = LoadImage("Pointer.bmp") MidHandle Char MidHandle Cursor MaskImage Char, 255, 0, 255 MaskImage Cursor, 255, 255, 255 ShowPointer X= 100 Y= 100 StepX = 0 ;;;;;;;;;;; Repeat ;;; If MouseDown(1) Then MouX = MouseX() MouY = MouseY() StepsX = MouX - X StepsY = MouY - Y EndIf ;;; .A If StepsX > 0 Then X = X + 1 StepsX = StepsX - 1 EndIf If StepsX < 0 Then X = X - 1 StepsX = StepsX + 1 EndIf If StepsY > 0 Then Y = Y + 1 StepsY = StepsY - 1 EndIf If StepsY < 0 Then Y = Y - 1 StepsY = StepsY + 1 EndIf Cls DrawImage Char, X, Y DrawImage Cursor, MouseX(), MouseY() Flip If StepsX > 0 Or StepsX < 0 Then Goto A If StepsY > 0 Or StepsY < 0 Then Goto A Until KeyHit(1) End |
||
-------------------------------------------------------
Whoay! |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
/EDIT/ Erstmal ist ein Goto böse, nimm dafür irgend was anderes. Für Schleifen immer ein While/Wend oder Repat/Until... Den Ansatz mit Steps finde ich etwas 'komisch'. Ausserdem wird die Hauptschleife während einer Animation nicht mehr komplett durchgearbeitet. Hier ein neuer Ansatz.Code: [AUSKLAPPEN] Graphics 320, 240, 16, 1
SetBuffer BackBuffer() ClsColor 0, 0, 0 ;;;;;;;;;;; Char = LoadAnimImage("Hero.bmp", 24, 32, 0, 12) Cursor = LoadImage("Pointer.bmp") MidHandle Char MidHandle Cursor MaskImage Char, 255, 0, 255 MaskImage Cursor, 255, 255, 255 ShowPointer X% = 100 Y% = 100 R% = 0 ;;;;;;;;;;; While Not KeyHit(1) ;;; If MouseHit(1) Then MouX = MouseX() MouY = MouseY() If Abs(MouX-X)>Abs(MouY-Y) Then R=1 Else R=2 EndIf ;;; If R=1 Then X=X+Sgn(MouX-X) If MouX-X=0 Then R=2 End If If R=2 Then Y=Y+Sgn(MouY-Y) If MouY-Y=0 Then R=1 End If DrawImage Char, X, Y DrawImage Cursor, MouseX(), MouseY() Flip Cls Wend End |
||
Niu-Iun |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
wieso hab ich mir soviel schreibarbeit gemacht, wenn es eigentlich so einfach geht?
![]() Aber vielen Dank!!! Und noch ne Frage: Wieso ist Goto so böse? Man sagt immer unübersichtlich, aber ich finde das kriegt man gut hin |
||
-------------------------------------------------------
Whoay! |
![]() |
Klip |
![]() Antworten mit Zitat ![]() |
---|---|---|
In einem kleinen Beispiel geht GoTo ja noch, aber spätestens, wenn dein Code auf mehrere Includes verteilt ist, verstehst du nichts mehr, vor allem, wenn die Markierungen A heißen...
Verwende reichlich Funktionen, nicht zuletzt wegen der Argumente lohnend. |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi Niu-Iun, wollte dir zuerst nur Hilfestellung dazu geben, daß Abs und Sqn wohl brauchbare Befehle für deine Funktionen seien. Doch dann mußte ich es mal selber austesten. ![]() If r>0 Then
Ansonsten werden ständig die beiden If-Abfragen durchgearbeitet! Ausserdem kann man so feststellen ob grad eine Bewegung durchgeführt wird oder nicht, inden man R auf 0 überprüft.
If R=1 Then X=X+Sgn(MouX-X) If MouX-X=0 Then If MouY-Y=0 Then R=0 Else R=2 End If Else Y=Y+Sgn(MouY-Y) If MouY-Y=0 Then If MouX-X=0 Then R=0 Else R=1 End If End If End If |
||
- Zuletzt bearbeitet von hectic am Do, Jan 05, 2006 1:44, insgesamt einmal bearbeitet
Niu-Iun |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
noch ne ganz kleine Frage ![]() Wo muss ich den gosub hinsetzen, der regelt welcher frame dran ist? also jetzt am besten mal für oben unten rechts und links? |
||
-------------------------------------------------------
Whoay! |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Was meinst du mit Frame? Solltest du mein Beispiel benutzt haben, dann bedeutet...
R=1 für links oder rechts -Bewegung also X R=2 für oben oder unten -Bewegung also Y R=0 für keine Bewegung f.y.i. Habe den Code im obrigem Beitrag nochmal verändert. Sorry. Da es sonst vorkommen kann das am Wendepunkt eine Animationsbewegung diagonal durchgeführt wird. Jetzt nicht mehr. |
||
Niu-Iun |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
danke, habs alleine rausgefunden | ||
-------------------------------------------------------
Whoay! |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group