~Irrlicht Tutorial3~ The basic animatoring....

posted on 01 Dec 2008 17:26 by apemon-chan  in game-programing

            จากคราวที่แล้วที่เราได้สร้างscenenodeแบบง่ายๆกันไปแล้ว คราวนี้เราจะมาลองใส่animatorอย่างง่ายๆ
    ให้กับscenenodeงับ

            มาเริ่มที่แบบแรกanimatorที่basicสุด ก็คือวิ่งมันตรงๆนี่แหละ ถ้าพร้อมแล้วสร้างscenenodeมา1อันก่อนเลย
    (จะไม่อธิบายถึงส่วนheaderกะการสร้างscenenodeเน้อ เพราะได้กล่าวถึงมันไปแล้ว)

            scene::ISceneNode* node=smgr->addSphereSceneNode();
            node=smgr->addSphereSceneNode();
            node->setPosition(core::vector3df(0,0,30));
            node->setMaterialFlag(video::EMF_LIGHTING,false);
            node->setMaterialTexture(0,driver->getTexture("media/wall.bmp"));

            อันนี้ก็สร้างทรงกลม1อัน

            scene::ISceneNodeAnimator* anim=0;

            สร้างISceneNodeAnimatorขึ้นมา

            anim=smgr->createFlyStraightAnimator(
            core::vector3df(0,0,30),
            core::vector3df(50,0,30),
            6000,true);

            สร้างFlyStraightAnimator(ก็คือวิ่งตรงๆนะแหละ) โดย
            core::vector3df(0,0,30) หมายถึงจุดเริ่มต้น
            core::vector3df(50,0,30) จุดหมายปลายทาง
            6000 นี่คือเวลาที่ใช้(millisecond)
            true อันนี้กำหนดว่าให้มันloopหรือเปล่า ถ้าต้องการเล่นรอบเดียวจบก็setเป็นfalse

            node->addAnimator(anim);         

            แปะanimatorลงไปในnode

            เท่านี้ก็เรียบร้อย ลองrunดูจะเห็นบอลวิ่งแล้วละน่ะ

            ต่อมาลองanimatorพื้นฐานอีกอันดู อันนี้คือหมุนไปรอบๆ

            scene::ISceneNode* node2;
            node2=smgr->addCubeSceneNode();
            node2->setPosition(core::vector3df(-30,0,30));
            node2->setMaterialFlag(video::EMF_LIGHTING,false);
            node2->setMaterialTexture(0,driver->getTexture("media/wall.bmp"));

            สร้างหนูทดลอง ในที่นี้คือกล่องใบนึง

            anim=smgr->createFlyCircleAnimator(
            core::vector3df(-15,0,15),
            15,0.001,
            core::vector3df(1,0,0));

            สร้างFlyCircleAnimator(คือโคจรรอบๆ) โดย
            core::vector3df(-15,0,15) จุดศูนย์กลาง
            f32 15 รัศมี
            f32 0.001 ความเร็ว
            core::vector3df(1,0,0) ประมาณว่าทิศทางวงโคจร(ลองปรับเล่นดู)

            node2->addAnimator(anim);

            แปะanimatorเข้ากับscenenode

            anim->drop();

            หมดประโยชน์ก็โละทิ้ง เพื่อเคลียร์พื้นที่(ใจร้ายจัง)

            ก็เป็นอันเสร็จเรียบร้อยงับ ถ้าจะให้เห็นชัดก็สร้างscenenodeไปวางจุดcenterของวงโคจรก็ได้

                                    

            อันนี้codeแบบเต็มๆงับ

     #include <irrlicht.h>
     using namespace irr;
    #pragma comment(lib, "Irrlicht.lib")
     int main(){
    IrrlichtDevice *device =
    createDevice(video::EDT_DIRECT3D9, core::dimension2d<s32>(640, 480));

     if (device == 0)
        return 1;
    video::IVideoDriver* driver = device->getVideoDriver();
    scene::ISceneManager* smgr = device->getSceneManager();    
    //create scenenode
    scene::ISceneNode* node;
    scene::ISceneNode* node2;
   
scene::ISceneNode* node3;//อันนี้ใส่ไว้ตรงจุดcenterของวงโคจรnode2
    node=smgr->addSphereSceneNode();
    node->setPosition(core::vector3df(0,0,30));
    node->setMaterialFlag(video::EMF_LIGHTING,false);
    node->setMaterialTexture(0,driver->getTexture("media/wall.bmp"));
    node2=smgr->addCubeSceneNode();
    node2->setPosition(core::vector3df(-30,0,30));
    node2->setMaterialFlag(video::EMF_LIGHTING,false);
    node2->setMaterialTexture(0,driver->getTexture("media/wall.bmp"));

    node3=smgr->addSphereSceneNode();
    node3->setPosition(core::vector3df(-15,0,15));
    node3->setMaterialFlag(video::EMF_LIGHTING,false);
    node3->setMaterialTexture(0,driver->getTexture("media/wall.bmp"));
    //create animator
    scene::ISceneNodeAnimator* anim=0;
    anim=smgr->createFlyStraightAnimator(
            core::vector3df(0,0,30),
            core::vector3df(50,0,30),
            6000,true);
   
node->addAnimator(anim);
    anim=smgr->createFlyCircleAnimator(
            core::vector3df(-15,0,15),
            15,0.001,
            core::vector3df(1,0,0));
    node2->addAnimator(anim);
    anim->drop();

    //create camerascenenode
    scene::ICameraSceneNode* cam;
    cam=smgr->addCameraSceneNodeFPS();
    cam->setPosition(core::vector3df(36,4,-49));

    while(device->run())
   {
       driver->beginScene(true, true, video::SColor(0,200,200,200));
       smgr->drawAll();
       driver->endScene();
   }
   device->drop();
   return 0;
   }

 

 

Comment



smilebig smileopen-mounthed smileconfused smilesad smileangry smiletonguequestionembarrassedsurprised smilewinkdouble winkcry

Tweet

เมพขริงๆ

#1 By book on 2008-12-01 23:32

Favourites