「ミニテクニック」(2012/02/02 (木) 01:42:56) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
*技術指南/ミニテクニック
このページはDxLibでゲームなり何なりを作る上で役に立つ?と思われるアルゴリズムorお役立ち情報の紹介です.
基本,3Dネタを紹介する予定です.
まず,[[DxLibのサンプルプログラム>http://homepage2.nifty.com/natupaji/DxLib/dxprogram.html]]は見ておきましょう.多分参考になる技術も幾つかあるかもしれません.
あとは,同じく[[DxLibの掲示板>http://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?]]もログを漁るなどしてみると意外と同じ疑問を持った方がいらっしゃるかもしれません.
#hr(height=2,color=#ffA500)
-&link_anchor(MT_NowLoading){NowLoadingのやり方(非同期読み込み)@Ver.3.07}
-&link_anchor(MT_zanzo){3Dゲームでの剣を振りかざした時の残像の作り方@DxLib掲示板}
-&link_anchor(MT_bullet){DxLibとBullet(物理エンジン)との連携などについて@わくわくプログラミング自習室}
-&link_anchor(MT_list){DxLib(DxLib.h)の関数一覧?@AEXE.のHP}
-&link_anchor(MT_wire){3Dモデルのワイヤーフレーム表示方法}
-&link_anchor(MT_bomb){爆発などで画面を歪ませる処理@DxLib掲示板}
-&link_anchor(MT_batsu){ウインドウのX(閉じる)を押された時のイベントを取得する処理@DxLib掲示板}
#hr(height=2,color=#ffA500)
****&aname(MT_NowLoading,option=nolink){NowLoadingのやり方(非同期読み込み)@Ver.3.07}~
DxLibのver.3.07から非同期読み込みが対応しました.
それにより,ゲームでよくあるNowLoading...といったロード中の演出も可能です.
関数のリファレンスに関しては[[本家のページ>http://homepage2.nifty.com/natupaji/DxLib/function/dxfunc_other.html#R21N1]]を参考.
そのサンプルを以下に.(本家DxLibのリファレンスを一部改良)
#highlight(linenumber,cpp){{
#include "DxLib.h"
//最大読み込み数
#define load_max 20
//main
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int GrHandle[ load_max];//読み込みの配列
int StartTime ;//開始時間
int EndTime;//終了時間
bool LoadFlag = false;//完了フラグ
// ウインドウモードで起動
ChangeWindowMode( TRUE ) ;
// DXライブラリの初期化
if( DxLib_Init() < 0 ) return -1 ;
// 現在経過時間を得る
StartTime = GetNowCount() ;
// 非同期読み込み設定に変更
SetUseASyncLoadFlag( TRUE ) ;
// load_max回読み込む
for(int i = 0 ; i < load_max ; i ++ )
{
MV1SetLoadModelUsePhysicsMode( DX_LOADMODEL_PHYSICS_DISABLE ) ;//一応非物理演算モードで読み込む
GrHandle[ i ] = MV1LoadModel( "DxChara.x" ) ; //DXLIB付属モデル
}
// 同期読み込み設定に変更
SetUseASyncLoadFlag( FALSE ) ;
// 描画先を裏画面にする
SetDrawScreen( DX_SCREEN_BACK ) ;
// メインループ(何かキーが押されたらループを抜ける)
while( ProcessMessage() == 0 && CheckHitKeyAll() == 0 )
{
// 画面のクリア
ClearDrawScreen() ;
//読み込み率のバーを表示
DrawBox(50,50,550,50+20,GetColor(255,255,255),0);
DrawBox(50,50,550-500/load_max*GetASyncLoadNum(),50+20,GetColor(255,255,255),1);
if(GetASyncLoadNum() >0 )
{//まだ読み込み中なら表示
DrawFormatString( 0, 20, GetColor( 255,255,255 ), "Now Loading...[%d%]", (load_max-GetASyncLoadNum())*100/load_max ) ;
}else
{//読み込み完了動作
if(LoadFlag == false)
{//読み込み完了フラグがfalseならば
EndTime = GetNowCount() ;// 現在経過時間を得る
LoadFlag = true;
}
//まだ読み込み中なら表示
DrawFormatString( 0, 20, GetColor( 255,255,255 ), "読み込み終了...何かキーを押し終了して下さい@読み込み時間:%d[ms]", EndTime - StartTime) ;
}
// 現在の非同期読み込みの数を描画
DrawFormatString( 0, 0, GetColor( 255,255,255 ), "非同期読み込みの数 %d[最大数:%d]", GetASyncLoadNum(),load_max ) ;
// 裏画面の内容を表画面に反映
ScreenFlip();
}
// DXライブラリの後始末
DxLib_End();
// ソフトの終了
return 0;
}
}}
#hr(height=2,color=#ffA500)
****&aname(MT_zanzo,option=nolink){3Dゲームでの剣を振りかざした時の残像の作り方@DxLib掲示板}
http://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=past&no=790
なかなか綺麗に残像が出そう
#hr(height=2,color=#ffA500)
****&aname(MT_bullet,option=nolink){DxLibとBullet(物理エンジン)との連携などについて@わくわくプログラミング自習室}
http://i-libro.net/wpmu
もしかすると役に立つかも…
#hr(height=2,color=#ffA500)
****&aname(MT_list,option=nolink){DxLib(DxLib.h)の関数一覧?@AEXE.のHP}
http://www.aexe.net/DxlibH_305_func.htm
公式より更に踏み込んだ感じのリスト
#hr(height=2,color=#ffA500)
****&aname(MT_wire,option=nolink){3Dモデルのワイヤーフレーム表示方法}
int MV1SetWireFrameDrawFlag( int MHandle, int Flag );//モデルをワイヤーフレームで描画するかどうかを設定する
上記の関数を用いて引数のFlag=TRUEとしてからMV1DrawModel(int MHandle);関数を使って表示するとワイヤーフレームでモデルが表示されます.
#highlight(linenumber,cpp){{
int model;//モデルの変数
//中略
MV1SetWireFrameDrawFlag(model,TRUE);//ワイヤーフレームの有効
MV1DrawModel(model);//モデルの表示
}}
#hr(height=2,color=#ffA500)
****&aname(MT_bomb,option=nolink){爆発などで画面を歪ませる処理@DxLib掲示板}
http://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=view&no=2295
最新のライブラリでないと動かない関数を利用しているので注意(3.06f)
#hr(height=2,color=#ffA500)
****&aname(MT_batsu,option=nolink){ウインドウのX(閉じる)を押された時のイベントを取得する処理@DxLib掲示板}
http://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=past&no=320
http://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=past&no=1602
勝手にウインドウを閉じられると困る場合には使えそうです.Ex.セーブデータなど...
*技術指南/ミニテクニック
このページはDxLibでゲームなり何なりを作る上で役に立つ?と思われるアルゴリズムorお役立ち情報の紹介です.
基本,3Dネタを紹介する予定です.
まず,[[DxLibのサンプルプログラム>http://homepage2.nifty.com/natupaji/DxLib/dxprogram.html]]は見ておきましょう.多分参考になる技術も幾つかあるかもしれません.
あとは,同じく[[DxLibの掲示板>http://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?]]もログを漁るなどしてみると意外と同じ疑問を持った方がいらっしゃるかもしれません.
#hr(height=2,color=#ffA500)
-&link_anchor(MT_NowLoading){NowLoadingのやり方(非同期読み込み)@Ver.3.07}
-&link_anchor(MT_zanzo){3Dゲームでの剣を振りかざした時の残像の作り方@DxLib掲示板}
-&link_anchor(MT_bullet){DxLibとBullet(物理エンジン)との連携などについて@わくわくプログラミング自習室}
-&link_anchor(MT_list){DxLib(DxLib.h)の関数一覧?@AEXE.のHP}
-&link_anchor(MT_wire){3Dモデルのワイヤーフレーム表示方法}
-&link_anchor(MT_bomb){爆発などで画面を歪ませる処理@DxLib掲示板}
-&link_anchor(MT_batsu){ウインドウのX(閉じる)を押された時のイベントを取得する処理@DxLib掲示板}
#hr(height=2,color=#ffA500)
****&aname(MT_NowLoading,option=nolink){NowLoadingのやり方(非同期読み込み)@Ver.3.07}~
DxLibのver.3.07から非同期読み込みが対応しました.
それにより,ゲームでよくあるNowLoading...といったロード中の演出も可能です.
関数のリファレンスに関しては[[本家のページ>http://homepage2.nifty.com/natupaji/DxLib/function/dxfunc_other.html#R21N1]]を参考.
そのサンプルを以下に.(本家DxLibのリファレンスを一部改良)
-ソース
#region
#highlight(linenumber,cpp){{
#include "DxLib.h"
//最大読み込み数
#define load_max 20
//main
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int GrHandle[ load_max];//読み込みの配列
int StartTime ;//開始時間
int EndTime;//終了時間
bool LoadFlag = false;//完了フラグ
// ウインドウモードで起動
ChangeWindowMode( TRUE ) ;
// DXライブラリの初期化
if( DxLib_Init() < 0 ) return -1 ;
// 現在経過時間を得る
StartTime = GetNowCount() ;
// 非同期読み込み設定に変更
SetUseASyncLoadFlag( TRUE ) ;
// load_max回読み込む
for(int i = 0 ; i < load_max ; i ++ )
{
MV1SetLoadModelUsePhysicsMode( DX_LOADMODEL_PHYSICS_DISABLE ) ;//一応非物理演算モードで読み込む
GrHandle[ i ] = MV1LoadModel( "DxChara.x" ) ; //DXLIB付属モデル
}
// 同期読み込み設定に変更
SetUseASyncLoadFlag( FALSE ) ;
// 描画先を裏画面にする
SetDrawScreen( DX_SCREEN_BACK ) ;
// メインループ(何かキーが押されたらループを抜ける)
while( ProcessMessage() == 0 && CheckHitKeyAll() == 0 )
{
// 画面のクリア
ClearDrawScreen() ;
//読み込み率のバーを表示
DrawBox(50,50,550,50+20,GetColor(255,255,255),0);
DrawBox(50,50,550-500/load_max*GetASyncLoadNum(),50+20,GetColor(255,255,255),1);
if(GetASyncLoadNum() >0 )
{//まだ読み込み中なら表示
DrawFormatString( 0, 20, GetColor( 255,255,255 ), "Now Loading...[%d%]", (load_max-GetASyncLoadNum())*100/load_max ) ;
}else
{//読み込み完了動作
if(LoadFlag == false)
{//読み込み完了フラグがfalseならば
EndTime = GetNowCount() ;// 現在経過時間を得る
LoadFlag = true;
}
//まだ読み込み中なら表示
DrawFormatString( 0, 20, GetColor( 255,255,255 ), "読み込み終了...何かキーを押し終了して下さい@読み込み時間:%d[ms]", EndTime - StartTime) ;
}
// 現在の非同期読み込みの数を描画
DrawFormatString( 0, 0, GetColor( 255,255,255 ), "非同期読み込みの数 %d[最大数:%d]", GetASyncLoadNum(),load_max ) ;
// 裏画面の内容を表画面に反映
ScreenFlip();
}
// DXライブラリの後始末
DxLib_End();
// ソフトの終了
return 0;
}
}}
#endregion
#hr(height=2,color=#ffA500)
****&aname(MT_zanzo,option=nolink){3Dゲームでの剣を振りかざした時の残像の作り方@DxLib掲示板}
http://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=past&no=790
なかなか綺麗に残像が出そう
#hr(height=2,color=#ffA500)
****&aname(MT_bullet,option=nolink){DxLibとBullet(物理エンジン)との連携などについて@わくわくプログラミング自習室}
http://i-libro.net/wpmu
もしかすると役に立つかも…
#hr(height=2,color=#ffA500)
****&aname(MT_list,option=nolink){DxLib(DxLib.h)の関数一覧?@AEXE.のHP}
http://www.aexe.net/DxlibH_305_func.htm
公式より更に踏み込んだ感じのリスト
#hr(height=2,color=#ffA500)
****&aname(MT_wire,option=nolink){3Dモデルのワイヤーフレーム表示方法}
int MV1SetWireFrameDrawFlag( int MHandle, int Flag );//モデルをワイヤーフレームで描画するかどうかを設定する
上記の関数を用いて引数のFlag=TRUEとしてからMV1DrawModel(int MHandle);関数を使って表示するとワイヤーフレームでモデルが表示されます.
#highlight(linenumber,cpp){{
int model;//モデルの変数
//中略
MV1SetWireFrameDrawFlag(model,TRUE);//ワイヤーフレームの有効
MV1DrawModel(model);//モデルの表示
}}
#hr(height=2,color=#ffA500)
****&aname(MT_bomb,option=nolink){爆発などで画面を歪ませる処理@DxLib掲示板}
http://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=view&no=2295
最新のライブラリでないと動かない関数を利用しているので注意(3.06f)
#hr(height=2,color=#ffA500)
****&aname(MT_batsu,option=nolink){ウインドウのX(閉じる)を押された時のイベントを取得する処理@DxLib掲示板}
http://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=past&no=320
http://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=past&no=1602
勝手にウインドウを閉じられると困る場合には使えそうです.Ex.セーブデータなど...
表示オプション
横に並べて表示:
変化行の前後のみ表示: