Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Egosicht Problem: Beim positionieren der Maus (https://www.delphipraxis.net/165312-egosicht-problem-beim-positionieren-der-maus.html)

CreativeMD 23. Dez 2011 09:41

Egosicht Problem: Beim positionieren der Maus
 
Hi
Ich will ein Spiel mit GlScene in einer Egosicht programmieren.
Dass die Person dorthin läuft wo sie hinschaut hab ich schon,
aber das wie bei jedem Spiel mit Egosicht die Maus unsichtbar ist und immer in der Mitte ist,
bekomme ich nicht hin.
Wenn ich SetCursorpos benutzte funktioniert das ganze Spiel nicht mehr.
Es läuft dann einfach nicht weiter und alles bleibt stehen.
Die Komponete UserInterface von GLScene kann ich nicht nehmen, weil dann meine Steuerung nicht mehr funktioniert.
Gibt es vielleicht noch andere Möglichkeiten, die Mausposition zu setzen?

Übrigens die Funktion SetCursorpos hab ich in MouseMove vom GLSceneViewer reingemacht.
Wenn ich das in FormMouseMove mache gibt es keine Reaktion.

Progman 23. Dez 2011 09:47

AW: Egosicht Problem: Beim positionieren der Maus
 
Ich würde die Maus ganz abschlaten, wenn sie für die Steuerung nicht nötig ist.
Delphi-Quellcode:
Screen.Cursor := -1; // oder crNone

So habe ich das immer gehandhabt, wenn nur mit der Tatstatur gesteuert wird.

CreativeMD 23. Dez 2011 09:53

AW: Egosicht Problem: Beim positionieren der Maus
 
Ne
Das Spiel muss man mit der Maus steuern sonst wird man verrückt.

CCRDude 23. Dez 2011 10:02

AW: Egosicht Problem: Beim positionieren der Maus
 
Das widerspricht sich aber doch nicht?

Wenn die Maus, wie Du schreibst, immer genau in der Mitte sein soll, spricht doch nichts dagegen, den Cursor abzuschalten und in genau der Mitte ein eigenes Cursorähnliches Symbol darzustellen?

CreativeMD 23. Dez 2011 10:08

AW: Egosicht Problem: Beim positionieren der Maus
 
Aber ich muss doch wissen wie sich die Maus bewegt.
Könntest du das etwas genauerer erklären.

Uwe Raabe 23. Dez 2011 10:11

AW: Egosicht Problem: Beim positionieren der Maus
 
Zeig doch mal, was du machst.

CreativeMD 23. Dez 2011 10:19

AW: Egosicht Problem: Beim positionieren der Maus
 
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;

Uwe Raabe 23. Dez 2011 12:59

AW: Egosicht Problem: Beim positionieren der Maus
 
Das zeigt aber auch nur die Steuerung mit der Tastatur - nicht mit der Maus. Wie wird denn die Maus-Steuerung realisiert?

Medium 23. Dez 2011 14:09

AW: Egosicht Problem: Beim positionieren der Maus
 
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.

Uwe Raabe 23. Dez 2011 14:39

AW: Egosicht Problem: Beim positionieren der Maus
 
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;

CreativeMD 26. Dez 2011 16:45

AW: Egosicht Problem: Beim positionieren der Maus
 
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

Uwe Raabe 26. Dez 2011 19:02

AW: Egosicht Problem: Beim positionieren der Maus
 
Zitat:

Zitat von CreativeMD (Beitrag 1143180)
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.

Medium 26. Dez 2011 19:11

AW: Egosicht Problem: Beim positionieren der Maus
 
Zitat:

Zitat von CreativeMD (Beitrag 1142851)
Übrigens die Funktion SetCursorpos hab ich in MouseMove vom GLSceneViewer reingemacht.

Zitat:

Zitat von CreativeMD (Beitrag 1143180)
Ich habe eben den MoveHandler noch nicht programmiert

:gruebel:

CreativeMD 28. Dez 2011 12:00

AW: Egosicht Problem: Beim positionieren der Maus
 
@Uwe Raabe
Stimmt sorry hab ich irgendwie net gecheckt, sorry.
Vielen Dank für die Hilfe

Ähm aber leider hängt sich das Spiel auf.
Also es ruckelt ich versteh das nicht andere setzen auch die Maus immer in die Mitte und dort funktioniert es

EDIT

@Medium ich hab den programmiert und hab ihn dann wieder gelöscht

ftl999 24. Feb 2012 19:28

AW: Egosicht Problem: Beim positionieren der Maus
 
Ähm ich weiß das hat jetzt nichts mit dem Thema zutun aber @CreativMD ich hab mit GLScene unter Delphi XE2 Professional massive Probleme und zwar kann ich es nicht installieren, da er bei Asm Befehen immer sagt das das Sprachfeature nicht verfügbar sei und wenn ich asm aus stelle, dann zeigt er mir 1mio Fehler an einigen stellen in den Asm Zeilen der VectorGeometry.pas wie hast du das gelößt? könntest du mir evl ne e-mail dazu schreiben? Ich versuch jetzt nämlich schon seit 1/4 Jahr GlScene zum laufen zubringen und hab schon in zig Foren nachgefragt/gelesen aber niemand wusste etwas darüber. Außerdem bin von Delphi 6 auf XE2 auch nur wegen GLScene umgestiegen(ich weiß es gibt auch andere Delphi Versionen die mit GLScene kompatibel sind...)ich bitte um Hilfe

Mit freundlichen Grüßen
ftl999

Ps: meine e-mail wäre: "Ihrist@fettabernett.de" :-D


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:50 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz