Point and Click, "differenzierter Gang"

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Niu-Iun

Betreff: Point and Click, "differenzierter Gang"

BeitragMi, Jan 04, 2006 23:43
Antworten mit Zitat
Benutzer-Profile anzeigen
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!

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDo, Jan 05, 2006 0:45
Antworten mit Zitat
Benutzer-Profile anzeigen
/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

BeitragDo, Jan 05, 2006 0:52
Antworten mit Zitat
Benutzer-Profile anzeigen
wieso hab ich mir soviel schreibarbeit gemacht, wenn es eigentlich so einfach geht?
Sad

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

BeitragDo, Jan 05, 2006 0:58
Antworten mit Zitat
Benutzer-Profile anzeigen
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.

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDo, Jan 05, 2006 1:03
Antworten mit Zitat
Benutzer-Profile anzeigen
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. Smile /EDIT: Eventuell kann noch folgende Ergänzung sinnvoll sein./EDITCode: [AUSKLAPPEN]
 If r>0 Then
  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
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.
  • Zuletzt bearbeitet von hectic am Do, Jan 05, 2006 1:44, insgesamt einmal bearbeitet
 

Niu-Iun

BeitragDo, Jan 05, 2006 1:12
Antworten mit Zitat
Benutzer-Profile anzeigen
noch ne ganz kleine Frage Smile

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!

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDo, Jan 05, 2006 1:49
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Jan 05, 2006 2:02
Antworten mit Zitat
Benutzer-Profile anzeigen
danke, habs alleine rausgefunden
-------------------------------------------------------

Whoay!

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group