Historique des modifications - Message

Message #3527

Sujet: VB 2005 et IEventReceiver


Type Date Auteur Contenu
Dernière modification 22-01-2008 00:41:34 Ravine
EDIT : ce qui suit concerne C#. Avec un peu de recherche, tu devrais *normalement* pouvoir adapter ça a VB. J'avais pas fait gaffe avant de partir dans l'ecriture de mes 2 messages que ça portait sur VB. Bon courage donc

Alors, si tu ne les trouves pas, c'est normal, c'est que c'est pas héritable. Le seul (gros) defaut (mais tributaire du statut de wrapper, on peut pas tout avoir) est justement qu'on ne peut pas faire de l'héritage a tout va. Les seuls trucs héritables sont dans Inheritable donc (qui veut dire "heritable" en fr.). Donc du coup, pour un custom scene node, tu déclares ta classe, et tu la fais hériter de ISceneNode. Ensuite tu implémentes des trucs dedans.

Par exemple, tu veux te faire une caméra custom, qui rotationne sur le clic molette (button 3 de la souris) et un mouvement. Bon bah tu déclares une classe, tu hérites de ISceneNode, et a l'interieur, tu implémentes une CameraSceneNode. En gros, tu as une cameraSceneNode classique dans ton CustomSceneNode, auquel tu appliques les comportements que tu aimerais avoir pour ta caméra. Ensuite tu exposes les méthodes pour ton node. Et voilà, tu viens "d'emballer" un node existant dans un CustomSceneNode

Un peu de code sera plus parlant je pense.

    public class SquadsCameraSceneNode : ISceneNode
    {

        public enum TranslationDirection
        {
            Up,
            Down,
            Left,
            Right
        }

        protected CameraSceneNode camera;
        protected SceneManager sceneManager;
        protected VideoDriver driver;

        public void Translate(TranslationDirection direction, float movingSpeed)
        {
            if ((TranslationDirection.Up == direction) || (TranslationDirection.Down == direction))
            {
                Vector3D moveVector = camera.Position - camera.Target;
                moveVector.Y = 0;
                moveVector.Normalize();

                if (TranslationDirection.Up == direction)
                {

                    camera.Position = camera.Position - moveVector * movingSpeed;
                    camera.Target = camera.Target - moveVector * movingSpeed;
                }
                else
                {

                    camera.Position = camera.Position + moveVector * movingSpeed;
                    camera.Target = camera.Target + moveVector * movingSpeed;

                }
            }
            else if ((TranslationDirection.Left == direction) || (TranslationDirection.Right == direction))
            {
                Vector3D toTargetVector = camera.Position - camera.Target;
                toTargetVector.Normalize();
                Vector3D crossVector = toTargetVector.CrossProduct(camera.UpVector);
                Vector3D strafeVector = crossVector.Normalize();

                if (TranslationDirection.Left == direction)
                {
                    camera.Position = camera.Position - strafeVector * movingSpeed;
                    camera.Target = camera.Target - strafeVector * movingSpeed;
                }
                else
                {
                    camera.Position = camera.Position + strafeVector * movingSpeed;
                    camera.Target = camera.Target + strafeVector * movingSpeed;
                }

            }

            this.UpdateAbsolutePosition();

        }
}

Ici, j'ai créé une camera custom. C'est une classe qui implémente le constructeur du parent (enlevé ici pour eviter trop de code inutile) et une méthode "Translate" qui fait une translation de caméra. Comme tu peux le voir, j'expose "Translate", et en réalité, j'applique mes modifs a l'interieur.

Jette un coup d'oeil aux custom scene nodes de Irrlicht.Extension dans le source du wrapper. Ce sont tous des CustomSceneNode, et tu pigeras mieux si t'as pas saisi avec mon exemple.

  • ---------------------------------------------------------------------------------------------------------


Ensuite, pour l'histoire du EventReceiver, donc, comme dit au dessus, c'est pas héritable. En revanche, tu peux "récupérer" les events normalement, et leur appliquer des transformations. Par exemple, Irrlicht.NetCP n'integre pas MastEventReceiver, qui est une classe qui se substitue a l'event receiver du Irrlicht Natif. Qu'a cela ne tienne ! Tu peux faire une classe "EventTransformer", et quand un event est lancé, tu le fais passer par cette classe, via une methode lambda, par exemple "ProcessEvent(Event e)".

Plutot que de partir dans une longue explication, je vais te renvoyer au port du MastEventReceiver, que j'ai réalisé. Il fonctionne sur le principe que je te décris au dessus .

http://irrlichtnetcp.sourceforge.net/phpBB2/viewtopic.php?t=811

Bon, tu y verras que j'ai "quand meme" hérité de Event, pour pouvoir récuperer quelques trucs. Le tout est commenté (j'ai pris du temps pour les comments), principalement en début de code, dans le gros pavé, sous le Disclaimer original.

Voilà pour un exemple de traitement d'event.
Création du message 22-01-2008 00:27:02 Ravine
EDIT : ce qui suit concerne C#. Avec un peu de recherche, tu devrais *normalement* pouvoir adapter ça a VB. J'avais pas fait gaffe avant de partir dans l'ecriture de mes 2 messages que ça portait sur VB. Bon courage donc

Alors, si tu ne les trouves pas, c'est normal, c'est que c'est pas héritable. Le seul (gros) defaut (mais tributaire du statut de wrapper, on peut pas tout avoir) est justement qu'on ne peut pas faire de l'héritage a tout va. Les seuls trucs héritables sont dans Inheritable donc (qui veut dire "heritable" en fr.). Donc du coup, pour un custom scene node, tu déclares ta classe, et tu la fais hériter de ISceneNode. Ensuite tu implémentes des trucs dedans.

Par exemple, tu veux te faire une caméra custom, qui rotationne sur le clic molette (button 3 de la souris) et un mouvement. Bon bah tu déclares une classe, tu hérites de ISceneNode, et a l'interieur, tu implémentes une CameraSceneNode. En gros, tu as une cameraSceneNode classique dans ton CustomSceneNode, auquel tu appliques les comportements que tu aimerais avoir pour ta caméra. Ensuite tu exposes les méthodes pour ton node. Et voilà, tu viens "d'emballer" un node existant dans un CustomSceneNode

Un peu de code sera plus parlant je pense.

    public class SquadsCameraSceneNode : ISceneNode
    {

        public enum TranslationDirection
        {
            Up,
            Down,
            Left,
            Right
        }

        protected CameraSceneNode camera;
        protected SceneManager sceneManager;
        protected VideoDriver driver;

        public void Translate(TranslationDirection direction, float movingSpeed)
        {
            if ((TranslationDirection.Up == direction) || (TranslationDirection.Down == direction))
            {
                Vector3D moveVector = camera.Position - camera.Target;
                moveVector.Y = 0;
                moveVector.Normalize();

                if (TranslationDirection.Up == direction)
                {

                    camera.Position = camera.Position - moveVector * movingSpeed;
                    camera.Target = camera.Target - moveVector * movingSpeed;
                }
                else
                {

                    camera.Position = camera.Position + moveVector * movingSpeed;
                    camera.Target = camera.Target + moveVector * movingSpeed;

                }
            }
            else if ((TranslationDirection.Left == direction) || (TranslationDirection.Right == direction))
            {
                Vector3D toTargetVector = camera.Position - camera.Target;
                toTargetVector.Normalize();
                Vector3D crossVector = toTargetVector.CrossProduct(camera.UpVector);
                Vector3D strafeVector = crossVector.Normalize();

                if (TranslationDirection.Left == direction)
                {
                    camera.Position = camera.Position - strafeVector * movingSpeed;
                    camera.Target = camera.Target - strafeVector * movingSpeed;
                }
                else
                {
                    camera.Position = camera.Position + strafeVector * movingSpeed;
                    camera.Target = camera.Target + strafeVector * movingSpeed;
                }

            }

            this.UpdateAbsolutePosition();

        }
}

Ici, j'ai créé une camera custom. C'est une classe qui implémente le constructeur du parent (enlevé ici pour eviter trop de code inutile) et une méthode "Translate" qui fait une translation de caméra. Comme tu peux le voir, j'expose "Translate", et en réalité, j'applique mes modifs a l'interieur.

Jette un coup d'oeil aux custom scene nodes de Irrlicht.Extension dans le source du wrapper. Ce sont tous des CustomSceneNode, et tu pigeras mieux si t'as pas saisi avec mon exemple.

  • ---------------------------------------------------------------------------------------------------------


Ensuite, pour l'histoire du EventReceiver, donc, comme dit au dessus, c'est pas héritable. En revanche, tu peux "récupérer" les events normalement, et leur appliquer des transformations. Par exemple, Irrlicht.NetCP n'integre pas MastEventReceiver, qui est une classe qui se substitue a l'event receiver du Irrlicht Natif. Qu'a cela ne tienne ! Tu peux faire une classe "EventTransformer", et quand un event est lancé, tu le fais passer par cette classe, via une methode lambda, par exemple "ProcessEvent(Event e)".

Plutot que de partir dans une longue explication, je vais te renvoyer au port du MastEventReceiver, que j'ai réalisé. Il fonctionne sur le principe que je te décris au dessus .

http://irrlichtnetcp.sourceforge.net/phpBB2/viewtopic.php?t=811

Bon, tu y verras que j'ai "quand meme" hérité de Event, pour pouvoir récuperer quelques trucs. Le tout est commenté (j'ai pris du temps pour les comments), principalement en début de code, dans le gros pavé, sous le Disclaimer original.

Voilà pour un exemple de traitement d'event.

Retour

Options Liens officiels Caractéristiques Statistiques Communauté
Préférences cookies
Corrections
irrlicht
irrklang
irredit
irrxml
Propulsé par Django
xhtml 1.0
css 2.1
884 membres
1440 sujets
11337 messages
Dernier membre inscrit: Saidov17
560 invités en ligne
membre en ligne: -
RSS Feed