AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Egosicht Problem: Beim positionieren der Maus
Thema durchsuchen
Ansicht
Themen-Optionen

Egosicht Problem: Beim positionieren der Maus

Offene Frage von "ftl999"
Ein Thema von CreativeMD · begonnen am 23. Dez 2011 · letzter Beitrag vom 24. Feb 2012
Antwort Antwort
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.757 Beiträge
 
Delphi 12 Athens
 
#1

AW: Egosicht Problem: Beim positionieren der Maus

  Alt 23. Dez 2011, 10:11
Zeig doch mal, was du machst.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von CreativeMD
CreativeMD

Registriert seit: 11. Okt 2011
127 Beiträge
 
Delphi XE2 Architect
 
#2

AW: Egosicht Problem: Beim positionieren der Maus

  Alt 23. Dez 2011, 10:19
Also

Die Objekte:
GlDummyCube1
hat in sich den
Kopf
hat
Kamera in sich

Code:
if IsKeyDown(VK_RIGHT) then
    GLDummyCube1.TurnAngle := GLDummyCube1.TurnAngle - speedx * 10;
  if IsKeyDown(VK_LEFT) then
    GLDummyCube1.TurnAngle := GLDummyCube1.TurnAngle + speedx * 10;

    if IsKeyDown(VK_UP) then Kopf.PitchAngle :=Kopf.PitchAngle - 1;

    if IsKeyDown(VK_DOWN) then Kopf.PitchAngle := Kopf.PitchAngle + 1;

Und dann noch in die Richtung laufen
Code:
if IsKeyDown('W') then
  begin

  if (GLDummyCube1.TurnAngle > -90) and (GLDummyCube1.TurnAngle < 90) then
  begin
  GLHUDText6.Text := 'Z: Hinten';
  if back_z = false then GLDummyCube1.Position.z := GLDummyCube1.Position.z - Cos(GLDummyCube1.TurnAngle * (PI / 180)) * (speedz);
  end
  else
  begin
  GLHUDText6.Text := 'Z: Vorne';
  if for_z = false then GLDummyCube1.Position.z := GLDummyCube1.Position.z - Cos(GLDummyCube1.TurnAngle * (PI / 180)) * (speedz);
  end;

  if (GLDummyCube1.TurnAngle < 0) and (GLDummyCube1.TurnAngle > -180) then
  begin
  GLHUDText6.Text := GLHUDText6.Text + '; X: Vorne';
  if for_x = false then GLDummyCube1.Position.X := GLDummyCube1.Position.X - Sin(GLDummyCube1.TurnAngle * (PI / 180)) * (speedx);
  end
  else
  begin
  GLHUDText6.Text := GLHUDText6.Text + '; X: Hinten';
  if back_x = false then GLDummyCube1.Position.X := GLDummyCube1.Position.X - Sin(GLDummyCube1.TurnAngle * (PI / 180)) * (speedx);
  end;

  end;

  if IsKeyDown('S') then
  begin

  if (GLDummyCube1.TurnAngle > -90) and (GLDummyCube1.TurnAngle < 90) then
  begin
  GLHUDText6.Text := 'Z: Vorne';
  if for_z = false then GLDummyCube1.Position.z := GLDummyCube1.Position.z + Cos(GLDummyCube1.TurnAngle * (PI / 180)) * (speedz);
  end
  else
  begin
  GLHUDText6.Text := 'Z: Hinten';
  if back_z = false then GLDummyCube1.Position.z := GLDummyCube1.Position.z + Cos(GLDummyCube1.TurnAngle * (PI / 180)) * (speedz);
  end;

  if (GLDummyCube1.TurnAngle < 0) and (GLDummyCube1.TurnAngle > -180) then
  begin
  GLHUDText6.Text := GLHUDText6.Text + '; X: Hinten';
  if back_x = false then GLDummyCube1.Position.X := GLDummyCube1.Position.X + Sin(GLDummyCube1.TurnAngle * (PI / 180)) * (speedx)
  end
  else
  begin
  GLHUDText6.Text := GLHUDText6.Text + '; X: Vorne';
  if for_x = false then GLDummyCube1.Position.X := GLDummyCube1.Position.X + Sin(GLDummyCube1.TurnAngle * (PI / 180)) * (speedx);
  end;

  end;
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.757 Beiträge
 
Delphi 12 Athens
 
#3

AW: Egosicht Problem: Beim positionieren der Maus

  Alt 23. Dez 2011, 12:59
Das zeigt aber auch nur die Steuerung mit der Tastatur - nicht mit der Maus. Wie wird denn die Maus-Steuerung realisiert?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.689 Beiträge
 
Delphi 2007 Enterprise
 
#4

AW: Egosicht Problem: Beim positionieren der Maus

  Alt 23. Dez 2011, 14:09
Normal ist, dass man in 3D-Szenen keine absoluten Mauspositionen gebrauchen kann, wohl aber die Deltas bei Bewegung braucht, um sie z.B. in eine Drehung umzusetzen. Das hat der TE vor. Problem dabei: Windows begrenzt die Maus an den Bildschirmrandkoordinaden, so dass man, wen man an den Rand stößt, nur noch Deltas von 0 bekommt. Deswegen setzt man die Maus in die Mitte, da es von dort aus immer in alle Richtungen weiter geht. Da man den Zeiger an sich aber nicht braucht, bzw. er meistens stört, wird der ausgeblendet.

CreativeMD, zeig doch mal deinen GLSceneViewer.MouseMove Handler.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.757 Beiträge
 
Delphi 12 Athens
 
#5

AW: Egosicht Problem: Beim positionieren der Maus

  Alt 23. Dez 2011, 14:39
Folgendes sollte bei gedrückter Shift-Taste ein Drehen des Kopfes nach links und rechts ermöglichen - bis zur Tischkante...

Delphi-Quellcode:
  private
    FLast: TPoint; // speichert die letzte Mausposition
Beim Form das KeyPreview auf true stellen.

im FormKeyDown:

Delphi-Quellcode:
  if Key = VK_SHIFT then begin
    FLast := GLSceneViewer1.ScreenToClient(Mouse.CursorPos);
    GLSceneViewer1.Cursor := -1;
  end;
im FormKeyUp:

Delphi-Quellcode:
  if Key = VK_SHIFT then begin
    GLSceneViewer1.Cursor := crDefault;
  end;
und im SceneViewerMouseMove:

Delphi-Quellcode:
  if ssShift in Shift then begin
    GLDummyCube1.Turn(X - FLast.X);
    FLast := Point(X, Y);
    if Abs(X - GLSceneViewer1.Width div 2) > 10 then begin
      FLast := Point(GLSceneViewer1.Width div 2, GLSceneViewer1.Height div 2);
      Mouse.CursorPos := GLSceneViewer1.ClientToScreen(FLast);
    end;
  end;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von CreativeMD
CreativeMD

Registriert seit: 11. Okt 2011
127 Beiträge
 
Delphi XE2 Architect
 
#6

AW: Egosicht Problem: Beim positionieren der Maus

  Alt 26. Dez 2011, 16:45
Also
Erstmal Entschuldigung für die lange Wartezeit.
Ich konnte die zwei Tage leider nicht antworten .

Ich habe eben den MoveHandler noch nicht programmiert,
und die andere Methode funktioniert wegen Medium's angesprochenen
Problem.

Uwe Raabe dort wird auch dieser Fehler auftreten.
Alle Spiele haben die Maus immer in die miete positioniert, auch die Komponente UserInterface von Glscene
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.757 Beiträge
 
Delphi 12 Athens
 
#7

AW: Egosicht Problem: Beim positionieren der Maus

  Alt 26. Dez 2011, 19:02
Uwe Raabe dort wird auch dieser Fehler auftreten.
Alle Spiele haben die Maus immer in die miete positioniert, auch die Komponente UserInterface von Glscene
Das tut mein Beispiel doch auch.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:40 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz