Probleme mit Bewegung
Übersicht

![]() |
MikeDeeBetreff: Probleme mit Bewegung |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das erste und wahrscheinlich einfachere Problem:
Ich möchte das die Linie nicht bis zu Maus geht, sondern nur in die Richtung Zeigt. Das zweite Problem ist ein bisschen komplexer Ich möchte, das wenn man nach oben drückt, die Figur nach oben geht und wenn man dann nach rechts drückt dann nach rechts. Aber, es soll, wenn man bei GEDRÜCKTER nach oben taste, nach rechts drückt eine rechts kurve machen (bis zu einem gewissen Grad) Also wenn man eine Taste einzeln drückt geht die Figur entweder nach oben, links, rechts oder unten und wenn man zwei drück soll es ein Kurve beschreiten Code: [AUSKLAPPEN] Graphics 800,600,32,2 SetBuffer BackBuffer() w=0 x=400 y=300 ;Pfeiltasten hoch=200 runter=208 links=203 rechts=205 ;wasd wtaste=17 staste=31 ataste=30 dtaste=32 Repeat Cls ;die Figur Oval x-5,y-5,10,10,1 Line x,y,MouseX(),MouseY() ;ein bisschen bewegung ;Nord If KeyDown(hoch) Or KeyDown(wtaste) Then w=90 If KeyDown(links) Or KeyDown(ataste) Then w=w+1 EndIf If KeyDown(rechts) Or KeyDown(dtaste) Then w=w-1 EndIf x=x+Cos(w) y=y-Sin(w) EndIf ;damit die Figur nicht zuweit in die Kurve geht If w>179 Then w=180 If w< 1 Then w=0 Flip Until KeyHit(1) End Den Ifsatz hatte ich schon in allen möglichen Kombinationen, aber keiner will gehen. |
||
Nicht wenige benutzen die Anonymität des Internets um berühmt zu werden. |
![]() |
aMulSieger des Minimalist Compo 01/13 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Für das Problem mit der Linie sehe ich zwei Möglichkeiten. Entweder normalisierst du den Vektor mit TFormNormal![]() ![]() ![]() ![]() ![]() ![]() (Wenn das jetzt zu kompliziert war, schau dir einfach mal die Hilfe zu den erwähnten Befehlen an, vielleicht ist das verständlicher ![]() Zu der zweiten Sache: Meinst du das so, dass die Bewegung der Figur nicht sofort von einem 90° zu 45° springt, wenn man eine zweite Taste drückt sondern sich "langsam" annähert? Wenn ja, dann empfehle ich dir einfach zwei Bewegungsvariablen einzufügen, eine für Bewegung in X- eine für für Bewegung in Y-Richtung. Zu diesen Variablen(ich empfehle Floats!) addierst(/subtrahierst) du dann wenn eine entsprechende Bewegungstaste gedrückt wird einen entsprechend kleinen Wert. Natürlich musst du dann noch dafür sorgen, dass es einen Maximalwert gibt und dass die Geschwindigkeit ohne Tastendruck wieder auf Null geht. Das kannst du entweder mit ein paar If-Abfragen machen, oder du multiplizierst die Bewegungsvariablen einfach jeden Frame mit einem Wert knapp unter Eins. hier musst du ausprobieren, ob es mit 0.9, 0.97 oder gar 0.99 besser klappt. EDIT: Ich hab mir gerade deinen Code und deine Frage nochmal durchgelesen, und ich glaube, meinen letzten Absatz kannst du einfach überlesen. Ich scheine die Problematik wohl nicht erkannt zu haben. Das was an deinem Code momentan nicht stimmt ist, dass du 'w' ständig weider auf 90 setzt und de Winkeländerungen so natürlich immer weider rückgängig gemacht werden. weiterhin solltest du x und y als Floats deklarieren, damit du dich auch in andere Winkel als vielfache von 45° bewegen kannst(die Ergebnisse von Sin() und Cos() werden sonst gerundet und sind somit entweder -1, 0 oder 1.) |
||
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans! Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver |
![]() |
MikeDee |
![]() Antworten mit Zitat ![]() |
---|---|---|
aber das w=90 muss irgendwie rein, weil:
wenn man nach oben drückt geht die figur nach oben (90°) eben, wenn man nun rechts drückt soll die Figur nach rechts gehen (0°)(der teil mit dem rechts ist noch nicht im Code, will erst das mit dem nach oben hinbekommen.) Wenn man bei gedrückte nach oben taste nach rechts drückt, soll die Figur eine rechtskurve beschreiten Wenn man bei gedrückte nach rechts taste nach oben drückt, soll die Figur eine kurve nach oben beschreiten wenn die nach oben taste erneut gedrückt wird, geht die Figur wieder 90° hoch. soll lange man gedrückt bleibt geht die Figur soweit in die schräge wie es mit der rechtstaste bestimmt wurde ich hoffe es ist einleuchtend was ich will. |
||
Nicht wenige benutzen die Anonymität des Internets um berühmt zu werden. |
![]() |
aMulSieger des Minimalist Compo 01/13 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich denke, dann musst du die Steuerung ganz anders machen, als du es hier hast. Als erstes musst du immer wissen, welche Richtung gerade die ist, in die sich bewegt wird. Dafür musst du dir was mit den Befehlen KeyHit![]() ![]() Wenn du das hast, kannst du je nach der Richtung bestimmen, wie auf das Drücken der anderen Tasten reagiert werden soll. |
||
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans! Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver |
![]() |
MikeDee |
![]() Antworten mit Zitat ![]() |
---|---|---|
den aktuellen code kann ich nur vereinfach zeigen weil ich nicht an meinem eigen pc sitz
Code: [AUSKLAPPEN] if keydon(hoch) then x=x+cos(w) y=y-sin(w) if keyhit(hoch) then w=90 endif if keydown(rechts) then w=w+1 endif if keydown(links) then w=w-1 endif elseif keydon(rechts) then x=x+cos(w) y=y-sin(w) if keyhit(rechts) then w=90 endif if keydown(hoch) then w=w+1 endif if keydown(runter) then w=w-1 endif nach oben geht es so wie es gehen soll, also mit nach links und rechts lenken. Aber nach rechts nicht, wenn ich da nach oben lenke springt es sofort nach oben. |
||
Nicht wenige benutzen die Anonymität des Internets um berühmt zu werden. |
![]() |
aMulSieger des Minimalist Compo 01/13 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du musst, wie bereits gesagt in einer Variable speichern, in welche der vier Richtungen du dich denn gerade primär bewegst. Ich erlaube mir mal, einen "kleinen" Tipp zu geben. ![]() Code: [AUSKLAPPEN] Const RichtungStehen = 0
Const RichtungOben = 1 Const RichtungRechts = 2 Const RichtungUnten = 3 Const RichtungLinks = 4 Local richtung = RichtungStehen Select richtung Case RichtungStehen ; wenn Spieler steht wird abgefragt, ob eine Taste gedrückt wurde ; die Richtung die sich der Spieler ausgesacht hat wird dann in ; eine Variable gespeichert und kann erst wieder verändert werden, ; wenn 'richtung' wieder auf Stehen gestellt wird, was nur passieren ; kann, wenn die entsprechende Bewegungstaste nicht mehr gedrückt wird. ; (KeyHit kann auch durch KeyDown ersetzt werden) If KeyHit(oben) richtung = RichtungOben ElseIf KeyHit(rechts) richtung = RichtungRechts ElseIf KeyHit(unten) richtung = RichtungUnten ElseIf KeyHit(links) richtung = RichtungLinks EndIf Case RichtungOben If KeyDown(oben) ; Taste immer noch gedrückt? Dann beweg dich gefälligst nach oben! Else ; Taste nicht mehr gedrückt? dann wird richtung zurückgesetzt, ; so dass im nächsten Frame eine "neue" Bewegung anfangen kann richtung = RichtungStehen EndIf Case RichtungRechts If KeyDown(rechts) ; nach rechts bewegen Else ; s.o. richtung = RichtungStehen EndIf Case RichtungUnten If KeyDown(unten) ; nach unten bewegen Else ; s.o. richtung = RichtungStehen EndIf Case RichtungLinks If KeyDown(links) ; nach links bewegen Else ; s.o. richtung = RichtungStehen EndIf Default RuntimeError "WTF?" End Select Ich hab deine Kurven-Steuerung noch nicht mit eingebaut, aber ich will dir ja nicht die ganze Arbeit abnehmen ![]() Ich hoffe du kannst damit was anfangen. Es sieht sehr kompliziert aus, aber ich denke durch die Kommentare ist es halbwegs verständlich. |
||
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans! Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group