- ベストアンサー
DXライブラリでの2Dの描画法[RPG作成]
VidualStudio.net C++ DXライブラリでRPGを初めて作成中なのですが、キャラ移動、マップ移動、マップスクロールなど実装したのはいいのですが、ゲームがとても重いです。 CPUの使用状況によってはスムーズな動きをするので、おそらくマップの描画に問題があるのだとおもいますが、マップは32x32ピクセルのものをゲームのスタート時に読み込み、2D配列に格納したintタイプのマップにあわせてDrawGraphイメージハンドルからひとつひとつ描いています。 これでは効率が悪すぎるのでしょうか?それとも初めからすべてマップ情報をメモリにロードするとメモリ不足で結局ディスクから読み込んでいるのでしょうか。(でもそれほどの量はテスト段階ですので扱っていないのですが。。。) もっと効率のいいマップの描き方があれば教えていただきたいのでここに投稿させていただきました。 ちなみに、DXライブラリはここのものを使わせていただいています http://homepage2.nifty.com/natupaji/DxLib/dxdload.html
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (2)
- machongola
- ベストアンサー率60% (434/720)
- machongola
- ベストアンサー率60% (434/720)
関連するQ&A
- DXライブラリでゲームを作成しているのですが、通信対戦機能をつけるため
DXライブラリでゲームを作成しているのですが、通信対戦機能をつけるために、 http://homepage2.nifty.com/natupaji/DxLib/function/dxfunc_other.html#R13N1 のページの、ConnectNetWorkのサンプルプログラムを、 設定するIPにプライベートアドレス、グローバルアドレスを入れたりしてとりあえず試しているのですが、 ポート開放している私のパソコンを接続待ち側とし、友人宅から接続側プログラムを試してもらっているのですがうまくいきません。 自宅で2台のパソコンを使って試した所、プライベートアドレスでは成功、グローバルアドレスは失敗しました。 サンプルプログラムのままなのに失敗するのですが、なぜか分かりますか?
- ベストアンサー
- その他(ゲーム)
- DXライブラリについて
今、DXライブラリを使ってのゲーム制作をしています。 以前は、DrectXを使っての3Dゲーム制作を行っていたのですが、objectの配置の際に、Finalize関数を使って解放しないとメモリ破壊を起こすというのを学習しました。 今回のDXライブラリにおいても、同じような処理を施さなければならないのでしょうか? というのも。 適当に組んだプログラム(画像をいくつか読み込ませたうえ、キーボードで操作できるようなもの)をF5を押したまま数秒放置していたらブルースクリーン?が出てきて電源を強制終了する羽目になったので、今、怖くて触れない状況なのです。 (一応念のため補足)・・・DxLib_End(); は、打ち込んであります。 どなたか回答をお願い申し上げます。
- 締切済み
- C・C++・C#
- DXライブラリで作成したゲーム
DXライブラリを使用したゲームを作ろうとしているのですが、作った物の起動が5秒ぐらい掛かります。また参考にDXライブラリを使用したフリーのゲームをプレイしてみたのですが、同じく5~10秒掛かります。 ちなみにvista ultimate メモリ:4GB CPU:core2duo 2.53GHzのPCを使用しています。 DXライブラリを使用しないでdirectXを使用したゲームはちゃんと起動します。 DXライブラリ、directXは最新のバージョンです。 DXライブラリのバージョンを下げてみても変わりませんでした。ご教授の方御願いします。
- ベストアンサー
- C・C++・C#
- DXライブラリで作成したゲーム
DXライブラリを使用したゲームを作ろうとしていたのですが、起動が5秒ぐらい掛かります。また参考にDXライブラリを使用したフリーのゲームをプレイしてみたのですが、同じく5~10秒掛かります。これはしょうがないのでしょうか。 ちなみにvista ultimate メモリ:4GB CPU:core2duo 2.53GHzのPCを使用しています。 DXライブラリを使用しないでdirectXを使用したゲームはちゃんと起動します。 DXライブラリ、directXは最新のバージョンです。
- ベストアンサー
- その他(ゲーム)
- ゲームプログラマー志望の作品提出について
ゲームプログラマーとして就職するときの作品提出で聞きたいのですが 作る時はDXライブラリを使って作ってもいいのでしょうか? それとも、Win32 APIやDirectXなどを使って作らないといけないのでしょうか? もちろん、後者の方がいいのはわかっているのですが、Win32 APIやDirectXの勉強をするための時間がなくなってDXライブラリで作る時に、それが合格範囲に入るか、落選範囲に入るかが気になるのです。 どなたかよろしくお願いします。 ちなみにDXライブラリを知らない人へ http://homepage2.nifty.com/natupaji/DxLib/
- 締切済み
- 就職・就活
- DXライブラリでの画像表示
ゲームプログラミング初心者です。 DXライブラリを用いて画像を表示させようと以下のプログラムを組んで実行してみたのですが、ウィンドウは表示されるのに画像が表示されません。 使用しているのはBorland C++ 5.5.,BCC Developer,DXライブラリです。 ちゃんと画像もプロジェクトファイルの中に入っていると思います。 OSはwindows8です。 考えられる原因を教えてもらえないでしょうか。 #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ) { ChangeWindowMode(TRUE); if( DxLib_Init() == -1 ) { return -1; } LoadGraphScreen(0,0,"image.png",TRUE); WaitKey(); DxLib_End(); return 0; }
- 締切済み
- C・C++・C#
- DXライブラリを使用した画像表示について
ゲームプログラミングを始めたいと考えている初心者です。 Borland C++ 5.5.1,BCC Developer,DXライブラリを使用しています。 下記のプログラムをメイクして実行すると、ウィンドウは表示されるのですが、画像が表示されません。画像の保存場所はプロジェクトの中のDebugフォルダです。どんな原因が考えられるでしょうか?ウィンドウは表示されていて実行できているのでプログラムの記述の問題ではないと考えます。 使用しているOSがMeです。Meではできないのでしょうか? お詳しい方、ぜひご回答お願いします。 ---------------------------------------------------------------- #include "DxLib.h" // プログラムは WinMain から始まります int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { ChangeWindowMode( TRUE ) ; // ウインドウモードに変更 if( DxLib_Init() == -1 ) // DXライブラリ初期化処理 { return -1 ; // エラーが起きたら直ちに終了 } /*--ここから下に処理を記述--*/ LoadGraphScreen( 0 , 0 , "char.png" , TRUE ) ; /*--ここまでが処理--*/ WaitKey() ; // キー入力待ち DxLib_End() ; // DXライブラリ使用の終了処理 return 0 ; // ソフトの終了 }
- ベストアンサー
- C・C++・C#
- DXライブラリによるパズルゲーム制作について
今、私はDXライブラリによるパズルゲーム制作に取り掛かっています。 そこで、画像をランダムに表示する際のプログラムの書き方に詰まってしまったので、教えていただければと思い投稿しました。 LoadDivGraph( "BLOCK.png" , 16 , 4 , 4 , 32 , 32 , Block ); for(int i=0;i<15;i++) { for(int j=0;j<20;j++) { int n =GetRand(14); if(i==0||i==14||j==0||j==19) { DrawGraph( j*32, i*32 , Block[7], TRUE ); } else { DrawGraph( j*32, i*32 , Block[n], TRUE ); } } } ※インデントに関してはご容赦ください。 かなり端折っていますが、上記のような感じで打ってしまうと、(ここには書いていませんが)while文があるおかげで、一秒間に60回のペースでBlock[n]の中身が変化してしまいます。 これを解消したいのですが、かといって、いちいち変数を用意してコピーするのでは効率が悪いですよね。あと、パズルゲームですので、この先、表示した画像を入れ替えたり消したりといった処理があることを念頭に入れたうえでのベストな書き方を教えていただければと思います。 ちなみに、C言語・C++の書き方でお願いします。
- 締切済み
- C・C++・C#
- DXライブラリでマップが作れません・・・。
今DXライブラリとVisualC++2008を使ってゲーム(アクション)を作っているのですがマップが作れません・・・、構造体?をつかってマップの描写は成功したのですが、0のところに判定を持たせることができません・・・。どのようにすればいいのでしょうか?色々試してみてもできず困っています。 ソースの一部 #include"DxLib.h" #define MAP_SIZE 64 // マップチップ一つのドットサイズ #define MAP_WIDTH 10 // マップの幅 #define MAP_HEIGHT 8 // マップの縦長さ int MapData[ MAP_HEIGHT ][ MAP_WIDTH ] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } , { 0, 1, 1, 1, 1, 1, 1, 1, 1, 0 } , { 0, 1, 1, 1, 1, 1, 1, 1, 1, 0 } , { 0, 1, 1, 1, 1, 1, 1, 1, 1, 0 } , { 0, 1, 1, 1, 1, 1, 1, 1, 1, 0 } , { 0, 1, 1, 1, 1, 1, 1, 1, 1, 0 } , { 0, 1, 1, 1, 1, 1, 1, 1, 1, 0 } , { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } , } ; void HYOUZI(void); void SYOKIKA(void); struct dousa{ int power; int flag; }; struct dousa jump; struct zahyou { int x,y; int img; int flag; int muki_y; int muki_x; int x1; int x2; int x3; int x4; int y1; int y2; int y3; int y4; }; struct zahyou haikei; struct charcter { int x,y; int img; int flag; }; struct charcter ziki; struct map; //初期化 void SYOKIKA(void){ jump.flag=0; ziki.x=100; ziki.y=100; ziki.img=LoadGraph("red_player.bmp"); } //背景 void HYOUZI(void){ int i,j; for( i = 0 ; i < MAP_HEIGHT ; i ++ ) { for( j = 0 ; j < MAP_WIDTH ; j ++ ) { if( MapData[ i ][ j ] == 0 ) { DrawBox( j * MAP_SIZE , i * MAP_SIZE , j * MAP_SIZE + MAP_SIZE , i * MAP_SIZE + MAP_SIZE , GetColor( 255 , 0 , 0 ) , TRUE ) ; } } } DrawGraph(ziki.x,ziki.y,ziki.img,TRUE); ScreenFlip(); } //動き void ugoki(void){ int OldX , OldY ; OldX = ziki.x ; OldY = ziki.y ; if (CheckHitKey(KEY_INPUT_RIGHT) == 1){ ziki.x=ziki.x+4; } if (CheckHitKey(KEY_INPUT_RIGHT) == 1) if (CheckHitKey(KEY_INPUT_Z) == 1) { ziki.x=ziki.x+8; } if (CheckHitKey(KEY_INPUT_LEFT) == 1){ ziki.x=ziki.x-4; } if (CheckHitKey(KEY_INPUT_LEFT) == 1) if (CheckHitKey(KEY_INPUT_Z) == 1) { ziki.x=ziki.x-8; } if(ziki.x>640){ ziki.x=-10; } if(ziki.x<-10){ ziki.x=640; } //ジャンプ jump.power-=1; ziki.y -=jump.power; if(ziki.y>400){ jump.power=0; ziki.y=400; jump.flag=0; } if (CheckHitKey(KEY_INPUT_DOWN) == 1 && jump.flag == 0){ jump.power=30; jump.flag=1; } if (CheckHitKey(KEY_INPUT_UP) == 1 && jump.flag == 0){ jump.power=20; jump.flag=1; } if( MapData[ ziki.x ][ ziki.y ] == 0 ) { ziki.x = OldX ; ziki.y = OldY ; } } int WINAPI WinMain ( HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow) { ChangeWindowMode(TRUE); if(DxLib_Init()==-1) { return -1; } SYOKIKA(); SetDrawScreen(DX_SCREEN_BACK); while(ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0){ HYOUZI(); ugoki(); ClearDrawScreen(); } DxLib_End(); return(0); } 分かる人がいたらぜひ教えてください(o_ _)o
- ベストアンサー
- C・C++・C#
- Visual C++ 2008でのDXライブラリ導入について
Visual C++ 2008でのDXライブラリ導入について 最近プログラムの勉強を始めたばかりの初心者です。 Microsoft Visual C++ 2008 Express EditionにDXライブラリを導入しようと思い、http://homepage2.nifty.com/natupaji/DxLib/dxuse_vc2008express.html ↑のサイトで手順どおりにやっていたのですが、サンプルプログラムの実行でエラーが出ました。 エラーの内容は include ファイルを開けません。'excpt.h': No such file or directory といったものです。 プログラムの記述はコピー&ペーストしたので間違ってはいないと思います。 なので、サンプルプログラムの前の設定で何か変になっている事があると思うのですが、 どうにも手順を間違っているように思えません。 念のため書いておくとOSはvistaを使用しています 分かりづらいかと思いますが原因がわかる方いましたらぜひ教えてください。足りない部分があったら補足します。よろしくおねがいします
- ベストアンサー
- C・C++・C#
お礼
なるほど。 参考になりそうです。ありがとうございました。