Ich bin grad an der Konzeption für nen Marble-Madness Klon und da hab ich ne Frage bzgl MouseMove.
Wenn der Mauszeiger irgendwann an den Bildschirm stößt, dann ist ja nix mehr mit MouseMove in dieser Richtung.
Gibt es eine Möglichkeit, dieses Problem zu beheben/umgehen?
_________________ Manchmal sehen Dinge, die wie Dinge aussehen wollen, mehr wie Dinge aus, als Dinge.
<Esmerelda Wetterwax>
Es kann vorkommen, dass die Nachkommen trotz Abkommen mit ihrem Einkommen nicht auskommen und umkommen.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Du musst deine Mausposition neu setzen. Das geht mit SetCursorPos(X, Y). Dadurch wird aber ein neues MouseMove ausgelöst. Weswegen musst du dir merken ob du dich in einem MouseMove befindest oder nicht. Sonst rufst du es rekursiv auf oder so.
Dafür gibt es mehrere Ansätze. Entweder du setzt die Mausposition immer dann sie droht dein Fenster zu verlassen oder du setzt sie sobald du ein MouseMove bekommst. Allerdings bin ich eher dafür sie zu setzen bevor sie gegen den Bildschirm stößt. Erst einmal wirkt sie dadruch ruhiger falls sie sichtbar ist und man sieht auch wie weit man sie bewegt. Außerdem sehe ich keinen Grund ständig etwas aufzurufen.
Du musst überprüfen ob sich die Maus auf 30 - 40 (oder so) Pixel dem Bildschirmrand genähert hat und wenn ja musst du sie auf die andere Seite des Bildschirms setzen. Du solltest dabei dann natürlich auf diese Bewegung reagieren. Das bedeutet normal hat man im MouseDown eine Position an der man gestartet hat und diese müsstest du dann um zum Beispiel eine Bildschirmbreite - 80 (2*Rand) verschieben. So, dass du rein theoretisch über die Grenzen deines Bildschirms hinaus scrollst.
Um festzustellen ob du dich gerade in einem MosueMove befindest deklarierst du eine globale oder Objekt-variable die du im MouseMove zu erst abprüfst ob sie gesetzt ist und wenn nicht, dann verarbeitest du das MouseMove. Als Erstes wärend der Verarbeitung setzt du die Variable und als Letztes löscht du sie.
Danke für die umfangreiche Antwort, hätte ich wohl auch so gemacht. Ich dachte nur, vielleicht gibt es da irgendeinen trickreichen Systemruf oder so.
In diesem Fall wird der Cursos sowieso ausgeblendet, drum werd ichs wohl immer setzten [edit] hat dann auch den Vorteil, dass ich OnMouseMove nichtmehr brauche sondern im Renderloop nur die aktuelle Position auslesen muss[/edit]
_________________ Manchmal sehen Dinge, die wie Dinge aussehen wollen, mehr wie Dinge aus, als Dinge.
<Esmerelda Wetterwax>
Es kann vorkommen, dass die Nachkommen trotz Abkommen mit ihrem Einkommen nicht auskommen und umkommen.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Bedenke aber dabei, dass ein übermäßiges setzen der Mausposition auch Leistung schluckt. Speziell dann wenn sich die Maus eigentlich gar nicht bewegt. Wenn sie eh unsichtbar ist würde ich persönlich den Weg der geringeren Leistung nehmen. Wobei man sich da auch lange und laut streiten kann ob ein stumpfes setzen oder ein bisschen rechnen und 4 If Abfragen schneller sind.
Aber die Position dauerhaft im Renderloop zu setzen würde ich persönlich eher nicht machen.
Renderloop ist auch nur so eben hingeschmiert worden. Nachdem das Ding ein Netzwerkspiel werden soll, hab ich mindestens(im Single-Player) zwei Threads, die über TCP/IP Kommunizieren werden: Game-Server und ein Spieler. Der Client-Thread dient nur zum Zeichnen und zur Abfrage der aktuellen 'Beschleunigungskraft' je Spieler. Und diese Kraft wird dann vom Server je Client abgefragt, die Szene berechnet(physik und so) und das Ergebnis wieder an alle Spieler geschickt (Matritzen für eigene Position, Positionen der Gegenspieler und Monster, Stati, wie 'zerbrochen', 'platt' u.ä.).
_________________ Manchmal sehen Dinge, die wie Dinge aussehen wollen, mehr wie Dinge aus, als Dinge.
<Esmerelda Wetterwax>
Es kann vorkommen, dass die Nachkommen trotz Abkommen mit ihrem Einkommen nicht auskommen und umkommen.
Mitglieder in diesem Forum: 0 Mitglieder und 6 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.