MouseYSpeed() gibt nichts zurück / 3D Steuerung
Übersicht

![]() |
DottakopfBetreff: MouseYSpeed() gibt nichts zurück / 3D Steuerung |
![]() Antworten mit Zitat ![]() |
---|---|---|
Abend Blitzer,
Situation: arbeite grade an der 3D Steuerung an einem kleinen Shooter / First person. allerdings habe ich grade das problem das ich ich nach oben und unten "unendlich" weit den kopf drehen kann. wie kann ich die drehung nach oben verhindern wenn entitypitch = maxwert. Mein lösungsansatz (jaja umständlich.. aber es gibt mehrere lösungen..) - ermitteln ob maus nach oben bzw unten bewegt (mouseYspeed positiv oder negativ) - aktuellen winkel der Kamera welche als parent am Spieler hängt ermitteln und auf max überprüfen - Wenn beide bedingungen true dann mit turnentity um mouseYspeed erhöhen. Mein problem... aus irgendeinem grund bekomme ich plötzlich für mouseyspeed immer 0 Code: [AUSKLAPPEN] If MouseYSpeed() <0 And EntityPitch(game_cam) >80 Then TurnEntity game_cam,MouseYSpeed()/3,0,0;oben unten wenn ich mir jetzt als debug wert den mousespeed anzeige lasse habe ich immer 0. Meine Vermutung: Arbeite in verbindung mit SimpleUDP2. Sprich es ist gleichzeitig ein 2ter client(host) im hintergrund geöffnet. bei welchen die mouseySpeed immer einen wert zurück gibt. Nur der client bekommt immer 0 Wunderlich ist, dass die kamerasteuerung bis auf die begrenzung funzt. ![]() könnt ihr mir mit einer eleganteren lösung aushelfen ? ich möchte ja nur, das ab einem bestimmten winkel die cam nicht mehr weiter dreht. *Edit Mir würds auch ein befehl reichen mit dem ich NUR EINEN Winkel des meshes definieren kann. Nicht wie Rotateentity der gleich mir alle winkel überschreibt. Code: [AUSKLAPPEN] rotateentity mesh, neuerwinkel , entitypitch(mesh) , entityvergessen(mesh)
klappt irgenwie nicht drehung auf der y achste klappt ohne probs: Code: [AUSKLAPPEN] TurnEntity PlayerMesh(UDP_PlayerID),0,(0-MouseXSpeed()/3),0;seitlich Gruß Dottakopf |
||
Rechtschreibfehler gelten der allgemeinen Belustigung! |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bin jetzt nicht 100% sicher dein Problem erkannt zu haben, aber ich hab's so gelöst:
BlitzBasic: [AUSKLAPPEN] Local Pitch% = Limit(EntityPitch(camera) + MouseYSpeed()/Camera_DrehSpeed#, -89, +89) |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Vincent |
![]() Antworten mit Zitat ![]() |
---|---|---|
MouseYSpeed() gibt immer den Wert der Bewegung auf der Achse seit dem letzten Aufruf von MouseYSpeed() an.
Dabei kann die natürlich auch kleiner 0 sein ... wenn man die Maus sozusagen nach links bewegt hat. Da du in deinem Code direkt vorher sinnloserweise prüfst, ob MouseYSpeed() > 0 ist .. und damit zum einen den Wert resetest und zum anderen gleichwichtige negative Werte ausschließt ... ist natürlich die Mausbewegung in der sehr sehr sehr kurzen Zeit bis zum nächsten Aufruf im direkt anfolgenden Befehl sehr gering. Code: [AUSKLAPPEN] TurnEntity cam, MouseYSpeed(), -MouseXSpeed(),0 RotateEntity cam, EntityPitch(cam),EntityYaw(cam),0 MoveMouse 400,300 Den Code benutze ich immer. Die erste Zeile dreht die Kamera. Die zweite Zeile verhindert das Kippen um die Z Achse. Dritte Zeile verhindert, dass man irgendwann nichtmehr in eine Richtung drehen kann, weil die Maus am Bildschirmrand angekommen ist ^^ ansonsten halt: https://www.blitzforum.de/help/MouseYSpeed Da steht bei Beschreibung, was ich grad erklärt hab. |
||
Gott ist nicht mit uns ... weil er mit Idioten keine Gnade kennt ! |
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Dein Fehler ist hier, das du zweimal MouseYSpeed abfragst. Einmal in der IF-Bedingung und einmal bei TurnEntity. MouseYSpeed gibt immer den GESAMMT Weg (in px) zurück, den die Maus seit dem LETZTEN AUFRUF von MouseYSpeed gemacht hat. Wenn du also prüfst :
Code: [AUSKLAPPEN] If MouseYSpeed() <0 And ... Then TurnEntity MouseYSpeed(), ...
Fragt er erst den Gemachten weg ab (Und merkt das er kleiner als 0 ist) und will dann nochmal den Weg abfragen, ist aber 0 weil sich die Maus in den 0.00001ms nicht viel verschoben hat ![]() Speicherer MouseXSpeed() und MouseYSpeed() in Variablen und überprüfe diese ! mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
![]() |
Dottakopf |
![]() Antworten mit Zitat ![]() |
---|---|---|
danke für eure schnelle hilfe. So betrachtet ist es klar das der speed immer 0 ergibt ![]() @vinzent ahh so simpel... das ist genau das was ich gesucht habe. danke Gruß Dottakopf |
||
Rechtschreibfehler gelten der allgemeinen Belustigung! |
![]() |
faeX |
![]() Antworten mit Zitat ![]() |
---|---|---|
MouseXSpeed() ist hier sowieso der falsche Ansatz.
Man sollte in jedem Frame: - X,Y-Mausabstand zur Bildschirmmitte speichern (ersatz für MouseX/YSpeed()) - Maus mit MoveMouse ![]() Das verhindert, dass man sich irgendwann nicht mehr drehen kann. Anschließend sollte man mit Rotationsgeschwindigkeiten (hört sich komplizierter an als es ist) arbeiten, sonst wirkt die Rotation sehr unschön abgehackt. Aber das ist jetzt nicht Thema. ![]() |
||
![]() |
Vincent |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das ist doch kompletter Unsinn.
Was du beschreibst ist in jeder Beziehung ungünstig. Es hat keine Vorteile das Selber zu messen. MoveMouse ist in meinem Beispiel vorhanden. Evtl ist der gemessene Abstand der Maus mit Mousex() sogar ein Integer ... kann ich von hier aus zz nicht testen ... das wäre aber fatal für die Feinheit der Steuerung^^ Dadurch, dass man schon mit der relativen Geschwindigkeit der Maus arbeitet wird die Bewegung weich. Die Hand braucht eine gewisse Zeit um die Maus auf eine bestimmte Geschwindigkeit zu beschleunigen oder zu bremsen ... alles andere wäre unnatürlich träge in der Steuerung. also nix mit "sowieso falscher Ansatz" |
||
Gott ist nicht mit uns ... weil er mit Idioten keine Gnade kennt ! |
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
*hust* MouseXSpeed/YSpeed geben auch nur Integer werte wieder *hust-Ende*
Code: [AUSKLAPPEN] SetBuffer BackBuffer( )
Repeat Text 0, 0, MouseXSpeed( ) Text 0,13, MouseYSpeed( ) Flip Cls Until KeyHit( 1 ) End( ) mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
![]() |
Dottakopf |
![]() Antworten mit Zitat ![]() |
---|---|---|
also ich konnte das ganze in etwas abgewandelter form hinbiegen.
Was mich aber im moment wirklich stört ist, sind die Rückgabewerte von EntityYaw Pitch und Roll.... dreht man ein objekt in eine richtung, steigt der Winkel von 0 - 90 erreicht man den Max Wert 90 fängt er nicht bei -90 oder 0 an.. nein er beginnt mit 89 88 87 wieder runter zu zählen. Was eine überprüfung >= 90 des aktuellen winkels ziemlich schwer macht ![]() aktell löse ich die winkel "beschränkung" so: (ausn kopf) - Speichere aktuellen MausSpeed - Ist Mausspeed > MaxZulässigerMausSpeed Dann Speed = Max If entityPitch(mesh) >= 60 and entitypitch(mesh) >=0 then Rotateentity Mesh, 59.99 nicht schön aber es geht. Allerdings geht das bestimmt viel viel eleganter Gruß Dottakopf |
||
Rechtschreibfehler gelten der allgemeinen Belustigung! |
![]() |
faeX |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Vincent: Du hast Recht, mit MouseXSpeed() geht es genauso gut, also tut's mir Leid. ![]() Allerdings reicht die Beschleunigung der Hand nicht aus. (Und Ja, ich hab's getestet.) Da muss man dann wirklich Drehgeschwindigkeiten benutzen. So stelle ich mir eine gute Steuerung vor (Modus 2): BlitzBasic: [AUSKLAPPEN] Graphics3D 800, 600 |
||
![]() |
Dottakopf |
![]() Antworten mit Zitat ![]() |
---|---|---|
hey das gefällt mir gut ![]() |
||
Rechtschreibfehler gelten der allgemeinen Belustigung! |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group