#0 

25-06-2008 18:50:29

Glaucos
Membre
Date d'inscription: 25-06-2008
Messages: 15
Site web

Bonjour,

je suis nouveau sur ce forum et aussi débutant avec irrlicht. J'ai déja fait quelques tests et ai finalement tenté quelque chose d'un peu plus dur: déplacer un cube au clavier à la manière d'une voiture soit flèche haut pour avancer, flèche bas pour reculer et les flèches gauche et droite pour faire des rotations. Une fois on programme terminé je compile mais un problème simple à comprendre mais épineux à résoudre (du moins pour moi :p) se pose: mon cube avance et recule bien, il efectue les rotations mais ne tourne pas "vraiment". Je m'explique si le cube et orienté à droite j'augmente à chaque frame X et Z mais je ne peux pas faire demi-tour: le cube suit une diagonale.

Je voulais savoir si on pouvait modifier les coordonnées en fonction de  l'état de rotation su cube, de manière à le faire se déplacer comme la caméra FPS en somme.

Merci d'avance.

Hors ligne


#1 

25-06-2008 19:13:08

dark calculator
Abonné
Date d'inscription: 25-02-2007
Messages: 153

salut,
tout d'abord bienvenue
ensuite pour ta question il te suffit de regarder quelque topic avant quelqu'un a poser la même question ou presque, tout du moin c'etait la même reponse il me semble, il te suffit donc d'aller voir se post pour en savoir plus. Si tu ne comprends toujours pas après sa, revient nous dire se qui ne marche pas.

bonne chance

dark calculator

Hors ligne


#2 

26-06-2008 12:46:43

noals
Membre
Date d'inscription: 17-05-2008
Messages: 34

si j'ai bien compris ton problème tu devrais trouvé ton bonheur ici.

Hors ligne


#3 

26-06-2008 13:47:05

Glaucos
Membre
Date d'inscription: 25-06-2008
Messages: 15
Site web

Merci à vous deux pour vos réponses.

noals->j'ai regardé ton lien je suppose que ça marche mais je n'ai pas testé car ça marchait déjà.

dark_calculator->en effet désolé de ne pas avoir regardé avant

J'ai repris le code de nilska(voir topic rotation / déplacement) et l'ai modifié selon les besoins de mon modèle et de mes attributs.

Ma classe donne ça au final:

Code:

#ifndef IR_EVENTRECIEVER
#define IR_EVENTRECEIVER

#include <iostream>
#include <irr/irrlicht.h>

using namespace std;

using namespace irr;
using namespace core;
using namespace scene;
using namespace video;
using namespace io;
using namespace gui;

class IR_EventReceiver : public IEventReceiver
{
    public:

    IR_EventReceiver(ISceneNode *Nmodele)
    {
        m_Nmodele = Nmodele;

        for(int i = 0; i < 4; i++)
        {
        m_isMoving[i] = false;
        }
    }

    virtual bool OnEvent(const SEvent &event) //capte les événements et met à jour les attributs
    {
        if(m_Nmodele != 0 && event.EventType == EET_KEY_INPUT_EVENT)
        {
            switch (event.KeyInput.Key)
            {
                case KEY_KEY_Z:
                m_isMoving[AVANT] = event.KeyInput.PressedDown;
                return true;

                case KEY_KEY_S:
                m_isMoving[ARRIERE] = event.KeyInput.PressedDown;
                return true;

                 case KEY_KEY_Q:
                m_isMoving[GAUCHE] = event.KeyInput.PressedDown;
                return true;

                 case KEY_KEY_D:
                m_isMoving[DROITE] = event.KeyInput.PressedDown;
                return true;
            }
        }


        return false;
    }

    void manageEvents() //gère les événements
    {
        matrix4 Mat;
        vector3df v = m_Nmodele->getPosition();
        vector3df r = m_Nmodele->getRotation();

        if (m_isMoving[AVANT])
        {
            r.Y += 90;
            Mat.setRotationDegrees(r);
            vector3df Target(5,0,0);
            Mat.transformVect(Target);
            vector3df NewPos = m_Nmodele->getPosition();
            NewPos += Target;
            m_Nmodele->setPosition(NewPos);
        }

        else if (m_isMoving[ARRIERE])
        {
            r.Y += 90;
            Mat.setRotationDegrees(r);
            vector3df Target(-2,0,0);
            Mat.transformVect(Target);
            vector3df NewPos=m_Nmodele->getPosition();
            NewPos += Target;
            m_Nmodele->setPosition(NewPos);
        }

        if (m_isMoving[GAUCHE])
        {
            r.Y -= 3;
            m_Nmodele->setRotation(r);

        }

        else if (m_isMoving[DROITE])
        {

            r.Y += 3;
            m_Nmodele->setRotation(r);
        }

    }

    private:

    enum {AVANT, ARRIERE, GAUCHE, DROITE}; //directions du modèle
    bool m_isMoving[4]; //tableau de bool pour connaître la direction du mouvement
    ISceneNode *m_Nmodele; //le scene node auquel on applique la gestion des événements
};

#endif

Il manque une chose pour que le programme fonctionne pleinement: il faut que la caméra suive le modèle dans ses rotations et déplacements:

je suis allé fouiner dans la doc:

"doc" :

virtual ICameraSceneNode* irr::scene::ISceneManager::addCameraSceneNodeFPS  (  ISceneNode *  parent = 0, 
  f32  rotateSpeed = 100.0f, 
  f32  moveSpeed = 500.0f, 
  s32  id = -1, 
  SKeyMap *  keyMapArray = 0, 
  s32  keyMapSize = 0, 
  bool  noVerticalMovement = false, 
  f32  jumpSpeed = 0.f
)  [pure virtual]

Parameters:
parent,:  Parent scene node of the camera. Can be null.


donc j'ai déclaré ma caméra ainsi dans le main: ICameraSceneNode *camera = sceneManager->addCameraSceneNodeFPS(Nf50);

ça marche mais je me retrouve au centre du modele :p
J'ai essayé d'initialiser la caméra à une position donnée mais dès que l'on bouge le modèle elle se place au centre de celui-ci.

On peut faire à chaque tour de boucle:

Code:

camera->setTarget(Nf50->getPosition());

mais ça ne résout pas le problème du placement à l'arrière du mesh.

Voilà y à t-il moyen de toujours placer la caméra derrière le model autrement qu'en testant la rotation de celui-ci (ce qui serait d'ailleurs lourd et peu agréable à utiliser) ?

Hors ligne


#4 

26-06-2008 14:18:10

noals
Membre
Date d'inscription: 17-05-2008
Messages: 34

edit : j'dis des connerie lol.


regarde mon code ici.
http://forum.irrlicht.fr/viewtopic.php?id=598

il est bancal et j'dois refaire mes propre classe mais le mouvement de la caméra est bon en ce qui concerne l'angle de rotation si ça peut t'aider.


d'façon j'm'y connais pas beaucoup donc j'peux pas t'aider beaucoup plus ^^;

Dernière modification par noals (26-06-2008 14:22:36)

Hors ligne


#5 

26-06-2008 14:26:01

noals
Membre
Date d'inscription: 17-05-2008
Messages: 34

j'me demande si j'redi pas des connerie vu que j'ai modifier un peu mon code depuis.

bon mon dernier code complet est celui la.

Code:

#include <irrlicht.h>
#include <iostream>

using namespace irr;
using namespace core;
using namespace scene;
using namespace video;
using namespace io;
using namespace gui;

#pragma comment(lib, "Irrlicht.lib")



//--->  DEFINITION  <---///////////////////////////////////////////////////////////////////////////
bool keys[KEY_KEY_CODES_COUNT];
position2d<f32> cursor;             //position du curseur de la souris
position2d<s32> ScreenCenter;       //centre de l'ecran bien que le curseur soit pas d'accord avec ça lol
f32 RotationSpeed= 1.0;             //determine la vitesse de rotation du joueur.
f32 playerSpeed= 0.8;               //vitesse du jouer
vector3df playerRot;                //rotation du joueur
vector3df playerPos;                //position du joueur
vector3df cameraPos;                //position de la camera
f32 cameraDistance= 100;

///////////////////////////////////////////////////////////////////////////////////////////////////
//--->  EVEN RECEIVER  <---////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////

class MyEventReceiver: public IEventReceiver
{
    public: virtual bool OnEvent(const SEvent& event)
    {
        if (event.EventType == EET_MOUSE_INPUT_EVENT)
        {
            cursor.X = event.MouseInput.X;
            cursor.Y = event.MouseInput.Y;
        }
        if(event.MouseInput.Event == EMIE_MOUSE_WHEEL)
        {
            cameraDistance += -event.MouseInput.Wheel* (cameraDistance / 20) * 3;
            if(cameraDistance < 10) cameraDistance = 10;
        }

        if(event.EventType == EET_KEY_INPUT_EVENT)
        {
            keys[event.KeyInput.Key] = event.KeyInput.PressedDown;
            return false;
        }
        return false;
    }
};

///////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////                       //////////////////////////////////////////////////////
//////////////////////////////         MAIN          //////////////////////////////////////////////////////
//////////////////////////////                       //////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////

int main()
{
    MyEventReceiver receiver;                  //initialisation du receiver
    IrrlichtDevice* device = createDevice(
        EDT_OPENGL,                            //EDT_SOFTWARE, EDT_NULL, EDT_DIRECT3D8, EDT_DIRECT3D9, EDT_OPENGL
        dimension2d<s32>(800, 600),
        32,
        true,                                  //fullscreen ?
        false, false,                          //?
        &receiver);                            //node receiver
        device->setEventReceiver(&receiver);   // "   "  same
    if (device == 0)return 1;                  //exit if creation failed

    IVideoDriver* driver = device->getVideoDriver();
    ISceneManager* smgr = device->getSceneManager();
    ICursorControl* myCursor = device->getCursorControl();


///////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////                       //////////////////////////////////////////////////////
//////////////////////////////       TERRAIN         //////////////////////////////////////////////////////
//////////////////////////////                       //////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////

    ITerrainSceneNode* terrain = smgr->addTerrainSceneNode(
        "heightmap/F18.bmp",                                               //heightmap
        0,                                                                 //parent
        -1,                                                                //ID
        vector3df(0.f, 0.f, 0.f),                                          //position
        vector3df(0.f, 0.f, 0.f),                                          //rotaton ?
        vector3df(500,33, 500),                                            //scaling de la heightmap / taille
        SColor(255, 255, 255, 250),                                        //couleur des vertex
        5,                                                                 //detail du node
        ETPS_33,                                                           //patchsize wth ??
        3,                                                                 //smoothfactor
        false);                                                            //add terrain node even with empty heightmap

    terrain->setMaterialFlag(EMF_LIGHTING, false);                            //lumière ?
    terrain->setMaterialTexture(0, driver->getTexture("terrain/herbe.jpg"));  //texture
    terrain->setMaterialType(EMT_DETAIL_MAP);
    terrain->scaleTexture(600, 48000);                                        //scaling de la texture

//SKYBOX
    driver->setTextureCreationFlag(ETCF_CREATE_MIP_MAPS, false);              //true ?
    smgr->addSkyBoxSceneNode(
        driver->getTexture("skybox/siege_up.jpg"),                   //up
        driver->getTexture("skybox/siege_dn.jpg"),                   //down
        driver->getTexture("skybox/siege_lf.jpg"),                   //left
        driver->getTexture("skybox/siege_rt.jpg"),                   //right
        driver->getTexture("skybox/siege_bk.jpg"),                   //back
        driver->getTexture("skybox/siege_ft.jpg"));                  //front
        driver->setTextureCreationFlag(ETCF_CREATE_MIP_MAPS, true);        //?

///////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////                             ////////////////////////////////////////////////
//////////////////////////////       TRIANGLE SELECTOR     ////////////////////////////////////////////////
//////////////////////////////                             ////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////

    ISceneNode* terrainNode = 0;
    if(terrain)
    terrainNode = smgr->addMeshSceneNode(terrain->getMesh());

    ITriangleSelector* selector = 0;
    if(terrainNode)
    {
        terrainNode->setPosition(vector3df(-1370,-130,-1400));
        selector = smgr->createTerrainTriangleSelector(terrain, 0);
        terrainNode->setTriangleSelector(selector);
        selector->drop();
    }

///////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////                         ////////////////////////////////////////////////////
//////////////////////////////          PLAYER         ////////////////////////////////////////////////////
//////////////////////////////                         ////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////
    for(int x=0; x<irr::KEY_KEY_CODES_COUNT; x++) keys[x] = false;  //key count

    ISceneNode* playerNode = smgr->addEmptySceneNode();             //3rd person
    playerNode->setPosition(vector3df(19000, 6000, 37000));

    IAnimatedMesh* playerMesh= smgr->getMesh("models/faerie.md2");                                //model
    IAnimatedMeshSceneNode* visualNode= smgr->addAnimatedMeshSceneNode(playerMesh, playerNode);
    if (visualNode)
    {
        visualNode->setMaterialFlag(EMF_LIGHTING, false);
        visualNode->setFrameLoop(0, 159); // 0,310
        visualNode->setAnimationSpeed(35);
        visualNode->setMaterialTexture(0, driver->getTexture("models/faerie.bmp"));               //texture
        visualNode->setRotation(core::vector3df(0,90,0)); //player dos a la caméra
    }

//COLLISION PLAYER
    const aabbox3df& box=        playerNode->getBoundingBox();
    const f32 height=            (box.MaxEdge.Y - box.MinEdge.Y)/ 2.f;
    const f32 verticalOffset=    -box.MinEdge.Y - box.MaxEdge.Y;
    const f32 waist=             max_(box.MaxEdge.X - box.MinEdge.X, box.MaxEdge.Z - box.MinEdge.Z)/ 2.f;

    ISceneNodeAnimator* anim= smgr->createCollisionResponseAnimator
    (
        selector,                                  //triangle selector
        playerNode,                                //scene node
        vector3df(30,25,30),                       //ellipsoidRadius  //position du perso 30;60;30
        vector3df(0,-3,0),                         //gravity
        vector3df(0,0,0),                          //ellipsoidTranslation
        0.0005f                                    //slidingValue
    );
    playerNode->addAnimator(anim);
    anim->drop();

///////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////                         ////////////////////////////////////////////////////
//////////////////////////////         ANIMATION       ////////////////////////////////////////////////////
//////////////////////////////                         ////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////

bool STAND = false;
if(STAND == true)
{
    visualNode->setFrameLoop(0, 159);
}

bool RUN = false;
if(RUN == true)
{
    visualNode->setFrameLoop(160, 183);
}

///////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////                         ////////////////////////////////////////////////////
//////////////////////////////          CAMERA         ////////////////////////////////////////////////////
//////////////////////////////                         ////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////

    ICameraSceneNode* myCamera =
    smgr->addCameraSceneNode(
        playerNode,                                      //parent
        vector3df(0,75,100),                             //angleX, angleH, distance
        playerNode->getPosition(), //vector3df(0,0,0),   //look at...
        -1);                                             //ID
    myCamera->setFarValue(80000);                        //drawing distance

///////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////                         ////////////////////////////////////////////////////
//////////////////////////////          CURSOR         ////////////////////////////////////////////////////
//////////////////////////////                         ////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////
    myCursor->setVisible(false);

///////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////                         ////////////////////////////////////////////////////
//////////////////////////////        RENDERING        ////////////////////////////////////////////////////
//////////////////////////////                         ////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////

    IGUIEnvironment* guienv = device->getGUIEnvironment();
    IGUIStaticText* debug_panel = guienv->addStaticText(L"",rect<s32>(15, 15, 50, 30),true,true,0,-1,false); //100 : L - h


    while(device->run())
    {


    driver->beginScene(true, true, SColor(0,200,200,200));

//--------------------------------------------------------------------------------------------------------
    ScreenCenter.X= 400;
    ScreenCenter.Y= 300;
    playerRot.X=0;
    playerRot.Y=playerNode->getRotation().Y+RotationSpeed*(ScreenCenter.X-cursor.X)*-1;
    playerRot.Z=0;
    cameraPos.X=0;
    cameraPos.Y=myCamera->getPosition().Y+/*RotationSpeed*/(ScreenCenter.Y-cursor.Y)*-1;
    cameraPos.Z=cameraDistance;//100;
    playerPos= playerNode->getPosition();




    if(keys[KEY_KEY_S]) //moving back
    {
        f32 roty_rad = playerRot.Y * PI / 180; // convert to radians
        playerPos.Z += playerSpeed * cos(roty_rad);
        playerPos.X += playerSpeed * sin(roty_rad);
    }

    if(keys[KEY_KEY_Z]) //moving foward
    {
        f32 roty_rad = playerRot.Y * PI / 180; // convert to radians
        playerPos.Z -= playerSpeed * cos(roty_rad);
        playerPos.X -= playerSpeed * sin(roty_rad);
    }

    if(keys[KEY_KEY_D]) //strafing right
    {
        f32 roty_rad = playerRot.Y;
        roty_rad -= 90;
        roty_rad *= PI / 180;
        playerPos.Z += playerSpeed * cos(roty_rad);
        playerPos.X += playerSpeed * sin(roty_rad);
    }

    if(keys[KEY_KEY_Q]) //strafing left
    {
        f32 roty_rad = playerRot.Y;
        roty_rad += 90;
        roty_rad *= PI / 180;
        playerPos.Z += playerSpeed * cos(roty_rad);
        playerPos.X += playerSpeed * sin(roty_rad);
    }

    if(keys[KEY_SPACE])playerPos.Y = playerPos.Y + 3.5f;

//--------------------------------------------------------------------------------------------------------

        myCamera->setTarget(playerNode->getPosition()); //refresh caméra target
        myCamera->setPosition(cameraPos);

        playerNode->setPosition(playerPos);
        playerNode->setRotation(playerRot);
        myCursor->setPosition(ScreenCenter);            //remise a zéro du cursor

        smgr->drawAll();


        stringw framerate = driver->getFPS();
        debug_panel->setText(stringw(framerate).c_str());       //framerate
        debug_panel->setOverrideColor(SColor(255,255,255,255));
        debug_panel->setBackgroundColor(SColor(255,0,0,0));

        device->getGUIEnvironment()->drawAll();
        driver->endScene();
    }
    device->drop();
    return 0;

}

la rotation de la caméra et la rotation du joueur on le meme mouvement (3rd person caméra) donc ce que tu veux normalement mais j'utilise la souris donc ca devrai etre plus simple pour toi en esperant que ça puisse t'aider.

Dernière modification par noals (26-06-2008 14:27:08)

Hors ligne


#6 

26-06-2008 16:33:10

Glaucos
Membre
Date d'inscription: 25-06-2008
Messages: 15
Site web

Merci pour le code en effet ça marche comme ça (je n'avais pas pensé que le veteur indiqué était une position relative).
La caméra suit exactement tout les mouvements de mon modèle, trop exactement.
Pour pouvoir faire en sorte que la caméra suive le modèle, il faut créer une caméra fixe, et non une caméra de type FPS. On ne peut donc pas envoyer au constructeur une vitesse limite de rotation.
Ce que j'aimerais faire(je sais je suis gourmand), c'est pouvoir limiter la vitesse de rotation de la caméra pour qu'elle mette du temps à se replacer derrière mon modèle, on sent mieux le mouvement que si elle se replace immédiatement. C'est possible à faire avec une caméra FPS mais adieu le suivi du modèle. Comment à tu  fait dans ton programme ? La caméra se déplaçait elle immédiatement ou progressivement (je ne vois pas l'endroit de ton code ou sa vitesse de rotation est limitée).

Hors ligne


#7 

26-06-2008 17:48:26

Magun
SleekThink Producer
Lieu: Punakha
Date d'inscription: 18-11-2007
Messages: 910
Corrections: 2
Site web

utilise un timer pour ta camera ^^ et suivans celui si tu deplace doucement la cameras dans le while de ton programme si le temp entre chaque deplacement est assé cour se sera asse fluid sans trop sacader smile

stupid exmple big_smile

    s32 lastTime = device->getTimer()->getTime();
    s32 upTime;
    while(device->run())
    {
        driver->beginScene(true, true, SColor(255,100,101,140));

        smgr->drawAll();
        guienv->drawAll();

        irr::core::vector3df *newRotation = personnage->getRotation();
        irr::core::vector3df* posUP = camera->getRotation();

        s32 newTime = device->getTimer()->getTime();
        upTime = newTime - lastTime;
        lasTime = newTime;
        float progressionCamera += upTime * 0.1; /** ranplave 0.1 par un truc plus haut si tu veut plus rapide */

        if(progressionCamera >0.5f)
        {
        camera>setRotation(irr::core::vector3df(posUP);
        }

        driver->endScene();
    }

ps : dsl pour les faute je dois reinstallé le pluging ^^
edit : je n'est pas reflechie sur se que j'est ecris fait gaffe je vien de me tapé le brevet donc je n'est plus une cervelle mais un oeuf poché .... ( 45° dans la sale .... )

j'avous je me sui pas trop foulé sur mon "stupid exemple" wink

Hors ligne


#8 

26-06-2008 20:39:28

noals
Membre
Date d'inscription: 17-05-2008
Messages: 34

Glaucos :

Comment à tu  fait dans ton programme ? La caméra se déplaçait elle immédiatement ou progressivement (je ne vois pas l'endroit de ton code ou sa vitesse de rotation est limitée).


elle se déplace immédiatement car c'est pour un mode 3rd person donc la souris fait tourner le joueur et la caméra ne fait que rester derrière selon l'angle et la distance que je défini au préalable. (un peu comme jedi academy si t'y a deja jouer)
'fin bon mon code est un peu buguer, faut que j'recommence mais j'suis sur mysql perso en ce moment.

y'a un bout de code qui défini la vitesse de rotation mais j'm'en sert pas vraiment.

Code:

f32 RotationSpeed= 1.0;             //determine la vitesse de rotation du joueur.
[...]
playerRot.Y=playerNode->getRotation().Y+RotationSpeed*(ScreenCenter.X-cursor.X)*-1;
cameraPos.Y=myCamera->getPosition().Y+/*RotationSpeed*/(ScreenCenter.Y-cursor.Y)*-1;

vaut mieu que t'essaye un timer comme Magun te l'a conseillé je pense. ^^

Hors ligne


#9 

26-06-2008 21:09:53

Glaucos
Membre
Date d'inscription: 25-06-2008
Messages: 15
Site web

Magun :

s32 lastTime = device->getTimer()->getTime();
    s32 upTime;
    while(device->run())
    {
        driver->beginScene(true, true, SColor(255,100,101,140));

        smgr->drawAll();
        guienv->drawAll();

        irr::core::vector3df *newRotation = personnage->getRotation();
        irr::core::vector3df* posUP = camera->getRotation();

        s32 newTime = device->getTimer()->getTime();
        upTime = newTime - lastTime;
        lasTime = newTime;
        float progressionCamera += upTime * 0.1; /** ranplave 0.1 par un truc plus haut si tu veut plus rapide */

        if(progressionCamera >0.5f)
        {
        camera>setRotation(irr::core::vector3df(posUP);
        }

        driver->endScene();
    }


gné ?

A ce que je vois on ne modifie pas du tout la rotation de la caméra.

D'ailleurs je me suis rendu compte d'un truc: si je veux gérer moi-même la vitesse de rotation de la caméra je ne dois pas la déclarer comme fille de mon node et dans ce cas je perd le suivi des déplacements en ligne droite et je devrais donc gérer moi même celui-ci à grands coups de matices(brrrr)

hmm

En fait je crois que je vais abandonner cette idée sauf si quelqu'un à une solution (simple) de gérer aussi les déplacements en ligne droite (par les timers ?!)

En tous cas merci à tous de votre aide au moins pour le déplacement du modèle et de la caméra c'est réglé ne restait que ce petit "plus" ; )

Hors ligne


#10 

27-06-2008 11:58:56

Magun
SleekThink Producer
Lieu: Punakha
Date d'inscription: 18-11-2007
Messages: 910
Corrections: 2
Site web

Magun :

edit : je n'est pas reflechie sur se que j'est ecris fait gaffe je vien de me tapé le brevet donc je n'est plus une cervelle mais un oeuf poché .... ( 45° dans la sale .... )


et effectivement sa modifie pas la camera mais sa l'update suivant le temps

Dernière modification par Magun (27-06-2008 11:59:58)

Hors ligne


Options Liens officiels Caractéristiques Statistiques Communauté
Corrections
irrlicht
irrklang
irredit
irrxml
xhtml 1.0
css 2.1
Propulsé par FluxBB
Traduit par FluxBB.fr
883 membres
1429 sujets
11121 messages
Dernier membre inscrit: Saidov17
81 invités en ligne
Aucun membre connecté
RSS Feed