Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Mi Jul 16, 2025 19:14

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: MouseMove Frage
BeitragVerfasst: Mo Mär 13, 2006 13:15 
Offline
DGL Member

Registriert: Mo Dez 20, 2004 08:58
Beiträge: 442
Wohnort: Mittweida (Sachsen)
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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mär 13, 2006 14:03 
Offline
DGL Member
Benutzeravatar

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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mär 13, 2006 14:13 
Offline
DGL Member

Registriert: Mo Dez 20, 2004 08:58
Beiträge: 442
Wohnort: Mittweida (Sachsen)
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 :mrgreen:
[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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mär 13, 2006 14:51 
Offline
DGL Member
Benutzeravatar

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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mär 13, 2006 15:04 
Offline
DGL Member

Registriert: Mo Dez 20, 2004 08:58
Beiträge: 442
Wohnort: Mittweida (Sachsen)
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.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

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.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 14 Queries | GZIP : On ]