電腦遊戲製作開發設計論壇 首頁 電腦遊戲製作開發設計論壇
任何可以在PC上跑的遊戲都可以討論,主要以遊戲之製作開發為主軸,希望讓台灣的遊戲人有個討論、交流、教學、經驗傳承的園地
 
 常見問題常見問題   搜尋搜尋   會員列表會員列表   會員群組會員群組   會員註冊會員註冊 
 個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入 

Google
Dark GDK與碰撞

 
發表新主題   回覆主題    電腦遊戲製作開發設計論壇 首頁 -> 遊戲程式高級班:DirectX、OpenGL及各種圖型函式庫
上一篇主題 :: 下一篇主題  
發表人 內容
mirror
散播福音的祭司


註冊時間: 2007-07-27
文章: 174

828.60 果凍幣

發表發表於: 2009-9-12, PM 5:26 星期六    文章主題: Dark GDK與碰撞 引言回覆

其實我一開始打算用模型本身的碰撞檢測去做
不過發現問題一堆,反而自己建立一個BOX去做檢測就好很多
目前的做法是一個模型就生一個BOX給他用
然後再給它隱藏起來...
我是打算弄個小型RPG所以下去摸了一下..
程式碼如下..


代碼:


// Dark GDK - The Game Creators - www.thegamecreators.com

// whenever using Dark GDK you must ensure you include the header file
#include "DarkGDK.h"

void Move()
{
   if(dbObjectCollision(3,4))
   {
      dbPositionObject(3,
      dbObjectPositionX(1),
      dbObjectPositionY(1),
      dbObjectPositionZ(1));
   }else{
      dbPositionObject(1,
      dbObjectPositionX(3),
      dbObjectPositionY(3),
      dbObjectPositionZ(3));
   }
}

// the main entry point for the application is this function
void DarkGDK ( void )
{
   // turn on sync rate and set maximum rate to 60 fps
   dbSyncOn   ( );
   dbSyncRate ( 60 );

   // 等待模型讀取的訊息
   dbPrint ( "Please wait loading model..." );
   dbSync ( );
   dbSync ( );
   
   // 載入模型(後面的數字代表這個模型的ID)
   dbLoadObject ( "001.X", 1 );

   // 複製一個一樣的模型出來
   dbCloneObject(2, 1);
   // 移動位置
   dbPositionObject(2,100,0,100);


   // 建立高低起伏不定的地表
   dbMakeMatrix(5,1000,1000,50,50);
   dbRandomizeMatrix(5, 5);
   //dbSetMatrixWireframeOn(5);
   dbUpdateMatrix(5);

   // 建立一個方塊盒給obj1用(碰撞判定)
   dbMakeObjectBox (3,50,50,50);
   dbHideObject(3);

   // 建立一個方塊盒給obj2用(碰撞判定)
   dbMakeObjectBox (4,50,50,100);
   dbPositionObject(4,100,0,100);

   /*dbShowObjectBounds(3,1);
   dbShowObjectBounds(4,1); */


   // 文字部分不支援中文..QoQ
   dbSetTextFont("Arial");
   dbSetTextSize(20);
   


   // 攝影機位置
   //dbMakeCamera(1);
   dbPositionCamera ( 0, 150, -200 );

   // 播放ID為1的模型動畫,從第10格播放到第20格
   dbLoopObject ( 1 );
   // 設定ID為1的模型,播放速度為40
   dbSetObjectSpeed ( 1, 10000 );


   // our main loop
   while ( LoopGDK ( ) )
   {
      {
         dbJoystickHatAngle (0);
         if(dbJoystickDown() || dbDownKey())
         {
            dbRotateObject(1, 0, 0, 0);
            dbRotateObject(3, 0, 0, 0);
            dbMoveObject(3, -4);
            Move();
         }
         if(dbJoystickUp() || dbUpKey())
         {
            dbRotateObject(1, 0, 180, 0);
            dbRotateObject(3, 0, 180, 0);
            dbMoveObject(3, -4);
            Move();
         }
         if(dbJoystickRight() || dbRightKey())
         {
            dbRotateObject(1, 0, 270, 0);
            dbRotateObject(3, 0, 270, 0);
            dbMoveObject(3, -4);
            Move();
         }
         if(dbJoystickLeft() || dbLeftKey())
         {
            dbRotateObject(1, 0, 90, 0);
            dbRotateObject(3, 0, 90, 0);
            dbMoveObject(3, -4);
            Move();
         }

      }

      // ======================
      // 下面的程式碼只是用來顯示資訊用,不用理它沒關係..
      char xc[20], yc[20], zc[20];
      

      sprintf(xc,"x:%f\n",dbObjectPositionX  (1));
      sprintf(yc,"y:%f\n",dbObjectPositionY  (1));
      sprintf(zc,"z:%f\n",dbObjectPositionZ  (1));
      dbText(0, 0, xc);
      dbText(0, 20, yc);
      dbText(0, 40, zc);

      
      char xcc[20], ycc[20], zcc[20], rcc[20];

      //dbPositionObject(3, 0, 0, 0);

      sprintf(rcc,"r:%f\n",dbObjectCollisionRadius (1));
      sprintf(xcc,"xc:%f\n",dbObjectCollisionCenterX (1));
      sprintf(ycc,"yc:%f\n",dbObjectCollisionCenterY (1));
      sprintf(zcc,"zc:%f\n",dbObjectCollisionCenterZ (1));

      dbText(0, 70,  rcc);

      dbText(0, 90,  xcc);
      dbText(0, 110, ycc);
      dbText(0, 130, zcc);

      char chit[20];
      sprintf(chit, "chit:%d\n",dbObjectCollision  (3,4));
      dbText(0, 150, chit);

      // update the screen
      // 更新畫面
      dbSync ( );
   }

   // return back to windows
   return;
}





112.gif
 描述:
 附件大小:  25.76 KB
 觀看次數:  共 5020 次

112.gif


回頂端
檢視會員個人資料 發送私人訊息
mirror
散播福音的祭司


註冊時間: 2007-07-27
文章: 174

828.60 果凍幣

發表發表於: 2009-9-13, AM 8:33 星期日    文章主題: 引言回覆

DarkGDK
實際用過之後發現其實問題還蠻多的
就功能上來說包裝的蠻好用的
很快就可以開發出遊戲
不過真正要解決問題還是要從程式碼著手
像是X模型檔,我輸出來的動態模型跟官方的不同
他的可以正常使用,我的就有一些問題存在
不過如果只是想做遊戲的話其實還不錯用
另外就是這個東西有一部分功能是需要付費的..@@
也就是說這個不是很完整的東西..
形容的話大概是陽春吧,功能上不是很完整就是了
不過我是覺得可以付費的話,就做的完整許多會比較好
大致上先摸到這裡,其它就交給有興趣的玩家去嘗試吧XD
對不太擅長程式設計的玩家是還不錯啦
不過我要去研究複雜的程式碼了
下載點..(附原始碼,寫的蠻亂的,不過程式碼也不會很長(掩面..))
http://www.badongo.com/file/17154941



111.gif
 描述:
 附件大小:  73.37 KB
 觀看次數:  共 5009 次

111.gif


回頂端
檢視會員個人資料 發送私人訊息
從之前的文章開始顯示:   
發表新主題   回覆主題    電腦遊戲製作開發設計論壇 首頁 -> 遊戲程式高級班:DirectX、OpenGL及各種圖型函式庫 所有的時間均為 台灣時間 (GMT + 8 小時)
1頁(共1頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票
可以 在這個版面附加檔案
可以 在這個版面下載檔案


Powered by phpBB © 2001, 2005 phpBB Group
正體中文語系由 phpbb-tw 維護製作