Salut !
J'ai vu la question dans la section Aide Irrlicht C++ alors je me suis dit qu'il y avais ptetre un petit tutorial a faire, donc je livre ici la méthode que j'emploi.
Attention, il y a sans doutes d'autre façon de faire, simplement c'est celle que j'utilise.
Dans la classe principale, je déclare...
class MainClass { static bool BasculerEvenementsCamera = false; etc...
Il est aussi possible de se servir d'une énumération des évènements, mais là je fais simple.
Je me sert de MPos qui est une Position2D. Et le déclare de la façon suivante hors de la boucle.
Position2D MPos = new Position2D(0,0);
J'ai l'habitude de toujours initialiser, même quand ce n'est pas nécessaire.
Dans votre code de gestion des évènements, mettez simplement BasculerEvenementsCamera a true. Par exemple, comme ceci :
case KeyCode.Tab: BasculerEvenementsCamera = true; return true;
Puis, dans la boucle while, placez ce code.
Attention ! Le curseur n'apparaît que lorsque vous déplacez la souris.
if (BasculerEvenementsCamera) { BasculerEvenementsCamera = false; if (smgr.ActiveCamera.InputReceiverEnabled) { smgr.ActiveCamera.InputReceiverEnabled = false; device.CursorControl.Visible = true; MPos = device.CursorControl.Position; } else { device.CursorControl.Position = MPos; smgr.ActiveCamera.InputReceiverEnabled = true; device.CursorControl.Visible = false; } }
Voici une Modification du HelloWorld que zitzu a porté sous IrrlichtNETCP
using IrrlichtNETCP; namespace Tutorial01 { class Tutorial01 { static bool BasculerEvenementsCamera = false; static bool Quitter = false; static void Main(string[] args) { IrrlichtDevice device = new IrrlichtDevice( DriverType.OpenGL, new dimension2d(800, 600), 32, false, true, true, true); device.WindowCaption = "Hello World! - Irrlicht Engine Demo"; device.FileSystem.WorkingDirectory = "c:/irrlicht/media"; // Adaptez a votre configuration !!! VideoDriver driver = device.VideoDriver; SceneManager smgr = device.SceneManager; device.OnEvent += new OnEventDelegate(device_OnEvent); GUIEnvironment guienv = device.GUIEnvironment; guienv.AddStaticText ( "Appuyez sur la touche TAB pour liberer/capturer le curseur", new rect( new Position2D(10, 10), new dimension2d(220, 18)), true, false, guienv.RootElement, -1, false ); AnimatedMesh mesh = smgr.GetMesh("sydney.md2"); AnimatedMeshSceneNode node = smgr.AddAnimatedMeshSceneNode(mesh); if (node != null) { node.Scale = new vector3d(0.1f, 0.1f, 0.1f); node.SetMaterialFlag(MaterialFlag.Lighting, false); node.SetMaterialTexture(0, driver.GetTexture("sydney.bmp")); } CameraSceneNode cam = smgr.AddCameraSceneNodeFPS(smgr.RootSceneNode, 100f, 100f, false); cam.Position=new vector3d(0, 0, -5); cam.Target=new vector3d(0, 0, 0); device.CursorControl.Visible = false; Position2D MPos = new Position2D(0,0); while (device.Run()) { if (BasculerEvenementsCamera) { BasculerEvenementsCamera = false; if (smgr.ActiveCamera.InputReceiverEnabled) { smgr.ActiveCamera.InputReceiverEnabled = false; device.CursorControl.Visible = true; MPos = device.CursorControl.Position; } else { device.CursorControl.Position = MPos; smgr.ActiveCamera.InputReceiverEnabled = true; device.CursorControl.Visible = false; } } driver.BeginScene(true, true, new Color(255, 100, 101, 140)); smgr.DrawAll(); guienv.DrawAll(); driver.EndScene(); if (Quitter) device.Close(); } device.Dispose(); } static bool device_OnEvent(Event p_e) { if (p_e.Type == EventType.KeyInputEvent && !p_e.KeyPressedDown) { switch (p_e.KeyCode) { case KeyCode.Tab: BasculerEvenementsCamera = true; return true; case KeyCode.Escape: Quitter = true; return true; } } return false; } } }
Pages: 1
Options | Liens officiels | Caractéristiques | Statistiques | Communauté |
---|---|---|---|---|
Corrections |
|
xhtml 1.0 css 2.1 Propulsé par FluxBB Traduit par FluxBB.fr |
882 membres 1429 sujets 11119 messages |
Dernier membre inscrit: LiseBuisson96 17 invités en ligne Aucun membre connecté RSS Feed |