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

Aktuelle Zeit: So Jun 16, 2024 09:11

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 2 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Mauszeiger in der Mitte (egoshooter)
BeitragVerfasst: Mo Jun 03, 2013 09:31 
Offline
DGL Member

Registriert: Do Mai 23, 2013 11:05
Beiträge: 13
Programmiersprache: Delphi
Also ich hab das Problem das ich meine Kamera wie in einem Egoshooter durch Bewegung der Maus steuern möchte.
Dazu muss ja der Mauszeiger in der Mitte fixiert werden aber die Bewegungen trotzdem noch eingelesen werden können.
Ideal wäre wenn ich nicht die absolute, sondern die relative Mausbewegung (z.b. 7 pixel nach rechts) einlesen könnte aber delphi diese nicht ausführt... wenn ich den Mauszeiger nämlich nur ausblende (meine 1. Idee) findet ja spätestens am Bildschirmrand keine Bewegung mehr statt...


Mfg Ogguzhan


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Jun 03, 2013 09:47 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Apr 13, 2011 22:05
Beiträge: 218
Programmiersprache: Lazarus/FPC
Ich mach das so das ich den Mauszeiger in der Mitte des Bildschirms halte. Sobald er über einen gewissen Bereich draussen ist kommt er wieder in die Mitte zurück.

Mein Code dazu:

Code:
  1.  
  2.   mausempf := 7; //Mausempfindlichkeit
  3.   getcursorpos(p);  // Aktuelle Mausposition in p schreiben.  P besteht aus p.x und p.y für die Mauskoordinaten
  4.  
  5.   br := Form1.width div 2;
  6.   hö := Form1.Height div 2;
  7.  
  8. //yrot ist die links-rechts Bewegung der Kamera beim Egoshooter.
  9. //xrot die rauf-Runter-Sicht.
  10. //Hier wird geschaut in welche Richtung sich die Maus seit dem letzten Frame bewegt hat. OldMPos ist dabei die Position des vorigen Frame.
  11. //Die entsprechende Bewegung wird direkt übernommen.
  12.   if OldMPos.X < p.X then
  13.     yrot := yrot + Abs(OldMPos.X - p.X) / mausempf;
  14.   if OldMPos.X > p.X then
  15.     yrot := yrot - Abs(OldMPos.X - p.X) / mausempf;
  16.   if (OldMPos.Y > p.Y) then
  17.     xrot := xrot - Abs(OldMPos.Y - p.Y) / mausempf;
  18.   if (OldMPos.Y < p.Y) then
  19.     xrot := xrot + Abs(OldMPos.Y - p.Y) / mausempf;
  20.  
  21.   getcursorpos(OldMPos);
  22.  
  23.   // Maus im Mittelbereich vom Bildschirm halten. Wenn sie über einen gewissen Bereich raushüpft wird sie wieder auf 0 gesetzt.
  24.   if p.X < br - 99 then
  25.   begin
  26.     SetCursorPos(br + 99, p.Y);
  27.     OldMPos.X := br + 100;
  28.   end
  29.   else if p.X >= br + 99 then
  30.   begin
  31.     SetCursorPos(br - 99, p.Y);
  32.     OldMPos.X := OldMPos.X - 200;
  33.   end
  34.   else if p.Y < hö - 100 then
  35.   begin
  36.     SetCursorPos(p.X, hö + 99);
  37.     OldMPos.Y := OldMPos.Y + 200;
  38.   end
  39.   else if p.Y >= hö + 100 then
  40.   begin
  41.     SetCursorPos(p.X, hö - 99);
  42.     OldMPos.Y := OldMPos.Y - 200;
  43.   end;
  44.  
  45.   // Beschränkungen beim Rauf-Runter-Schaun. Der Spieler kann seinen Kopf ja nicht nach oben drehen bis das Genick bricht.
  46.   if xrot > 80 then
  47.     xrot := 80;
  48.   if xrot < -80 then
  49.     xrot := -80;
  50.  
  51.  


Den Mauszeiger verschwinden lässt du übrigens mit:
windows.ShowCursor(false);

_________________
Ich teile manchmal heimlich durch Null. - Alber Einstein


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 22 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.249s | 17 Queries | GZIP : On ]