Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

20.03.2011, 22:22

[Ogre3D] Cursor bewegen

Hallo Spieleprogrammierer.de,

bei der normalen Application in Ogre3D hängt der Cursor links oben in der Ecke.
Wie bekomme ich es hin, dass ich ihn wieder bewegen kann?
MfG Ninjasturm

----------------------------
System: Windows 7 x64
IDE: Visual Studio 2010 Ultimate
Engine: Ogre3D


Favorisierte Programmiersprache: C++
Sonstige Programmiersprachen: AutoIT, PHP, Javascript
Sonstige Auszeichnungsprachen: HTML, CSS
---------------------------

2

22.03.2011, 21:47

/

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »E333« (02.09.2021, 04:10)


3

01.04.2011, 23:28

SdkTrays.Ich benutz noch keine GUI Library.
MfG Ninjasturm

----------------------------
System: Windows 7 x64
IDE: Visual Studio 2010 Ultimate
Engine: Ogre3D


Favorisierte Programmiersprache: C++
Sonstige Programmiersprachen: AutoIT, PHP, Javascript
Sonstige Auszeichnungsprachen: HTML, CSS
---------------------------

Harry222

Alter Hase

Beiträge: 864

Beruf: Student

  • Private Nachricht senden

4

02.04.2011, 10:57

Also du hast in deiner Klasse (gehe ich jetzt mal von aus) die Funktionen keyPressed, keyReleased, ... die von OIS aufgerufen werden, wenn eine Taste gedrückt wird, oder die Maus bewegt wird. Die MouseMoved-Funktion sollte etwa so aussehen:

C-/C++-Quelltext

1
2
3
4
// Called by OIS if the Mouse moved
bool Game::mouseMoved( const OIS::MouseEvent &arg ){
    return true;
}

Und da fügst du vor dem return einfach noch folgende Codezeile ein:

C-/C++-Quelltext

1
mSDKTrays->injectMouseMove(arg.state.X.abs, arg.state.Y.abs, arg.state.Z.abs);

Ob die Codezeile genau so aussieht, weiß ich nicht, aber die Funktion heißt injectMouseMove, da bin ich mir sicher. Kann also auch sein, das die Parameter etwas abweichen! ;)

Mfg Harry222

5

05.04.2011, 17:48

So danke für die Hilfe aber irgendwie will es immer noch nicht ganz funktionieren.
Die Funktion mouseMoved() wird irgendwie nicht aufgerufen, die Logdatei hat dies bestätigt.

Code[Input.hpp]: http://pastebin.com/ZTvtRRww
Code[Input.cpp]: http://pastebin.com/Rk8YN4c1
MfG Ninjasturm

----------------------------
System: Windows 7 x64
IDE: Visual Studio 2010 Ultimate
Engine: Ogre3D


Favorisierte Programmiersprache: C++
Sonstige Programmiersprachen: AutoIT, PHP, Javascript
Sonstige Auszeichnungsprachen: HTML, CSS
---------------------------

Fred

Supermoderator

Beiträge: 2 121

Beruf: Softwareentwickler

  • Private Nachricht senden

6

05.04.2011, 18:01

Registrierst du die Input-Klasse als Frame-Listener, oder wie fängst du die Eingaben ab?

7

05.04.2011, 18:55

Jop die Input - Klasse ist mein FrameListener und die Eingabe fang ich in frameStarted() ab.
MfG Ninjasturm

----------------------------
System: Windows 7 x64
IDE: Visual Studio 2010 Ultimate
Engine: Ogre3D


Favorisierte Programmiersprache: C++
Sonstige Programmiersprachen: AutoIT, PHP, Javascript
Sonstige Auszeichnungsprachen: HTML, CSS
---------------------------

Harry222

Alter Hase

Beiträge: 864

Beruf: Student

  • Private Nachricht senden

8

05.04.2011, 20:35

Die Klassendefinition müsste ungefähr so aussehen:

C-/C++-Quelltext

1
2
3
4
class TetrisMain : public Ogre::FrameListener, public OIS::KeyListener, public OIS::MouseListener, ...
{
  ...
}

Hast du vllt die beiden OIS-Klassen vergessen? Das würde auch erklären, warum die Funktion nicht aufgerufen wird!

EDIT: Hab deine Links übersehen!
Du hast glaube ich folgende Zeile vergessen:

C-/C++-Quelltext

1
mMouse->setEventCallback(this);

Ween das Mouse-Device nicht weiß, wo es Callback-Funktionen zum Aufrufen findet, kann es diese natürlich auch nicht aufrufen! ;)

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Harry222« (05.04.2011, 21:36)


9

06.04.2011, 17:15

Meine Klassendefinition sieht momentan wie folgt aus:

C-/C++-Quelltext

1
class Input : public Ogre::FrameListener , public OgreBites::SdkTrayListener, public OIS::KeyListener, public OIS::MouseListener

Irgendwie wird aber trotzdem meine Input Klasse nicht als Framelistener erkannt.
D.h Funktionen wie frameStarted() werden einfach nicht aufgerufen.
MfG Ninjasturm

----------------------------
System: Windows 7 x64
IDE: Visual Studio 2010 Ultimate
Engine: Ogre3D


Favorisierte Programmiersprache: C++
Sonstige Programmiersprachen: AutoIT, PHP, Javascript
Sonstige Auszeichnungsprachen: HTML, CSS
---------------------------

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Ninjasturm« (06.04.2011, 18:15)


10

06.04.2011, 20:18

Zeig doch mal die Log-Datei.
Startest du die Nachrichtenschleife?

Werbeanzeige