- 1 名前:じっち [04/11/23 07:14:50 ID:CCsv+84e.net]
- 少し前まではHSPで作ろうと思っていたのですが、HSPでRPGゲームを作るのは難しいらしいので、C++で作ろうと思います。
C++のプログラミングは初めてですので、みんなの力が必要です。 お願いします。 あと質問ですが、C++ってMMORPGつくれますか?
- 742 名前:名前は開発中のものです。 mailto:sage [2006/06/01(木) 01:26:31 ID:1wKUdWEf.net]
- たぶん>>716は釣り師なんだろうなぁ
- 743 名前:名前は開発中のものです。 mailto:sage [2006/06/17(土) 01:55:24 ID:gghwP/lw.net]
- >>716
参考にドウゾ。ただコードの構造化が糞だから気をつけたほうがいい。 ttp://www.geocities.jp/amazonium011001/page1.htm
- 744 名前:716 mailto:sage [2006/06/17(土) 12:45:56 ID:A7FmLv2E.net]
- ありがとうございます・・・ってどれが参考になりますか?
forループをウェイトに使っているのには思わず吹いてしまいました(><) アクションRPGできてきました(><) PDAと互換性保つため自前DIB描画の拡縮やアルファブレンドなので激重です(><) 誰か下のやつ最適化してください(><) 途中で宣言なしに出現する変数は事前に計算されていて、意味は以下のようになっております。 unsigned char alpha・・・アルファ値。 float mag_x、 mag_y・・・X、Y軸の拡大幅 unsinged char* dest_buffer 、 src_buffer・・・転送先,転送元イメージのバッファ。 int dest_offset・・・転送先データのオフセット。 int src_offset・・転送元データのオフセット。 int max_x ,max_y ・・・ 書き込みする範囲の最大バイト数 int bufW、srcW・・・転送先、転送元画像の幅。 unsigned char t = 255-alpha ; for(int i=0;i<max_w;i+=3) { for(int j = 0;j<max_y;j+=3) { base_dest = dest_offset + i + j * bufW; base_src = src_offset + ((int)((i / 3) / mag_x) + (srcW * (int)((j/3) /mag_y )))*3 ; dest_buffer[base_dest] = (( t * dest_buffer[base_dest] ) >> 8) + (( alpha * src_buffer[base_src] ) >> 8 ); dest_buffer[base_dest+1] = (( t *dest_buffer[base_dest+1] ) >> 8) + (( aplhal * src_buffer[base_src+1] ) >> 8 ); dest_buffer[base_dest+2] = (( t * dest_buffer[base_dest+2] ) >> 8) + (( alpha * src_buffer[base_src+2] ) >> 8 ); } } 誤字脱字があるかもしれません(><)
- 745 名前:名前は開発中のものです。 [2006/06/17(土) 13:11:36 ID:MX8Yl6AK.net]
- >>716
ループの中心で割り算などは極力控えるべき ブレゼンハム使おう。 というかなぜ自前?
- 746 名前:名前は開発中のものです。 mailto:sage [2006/06/17(土) 13:12:23 ID:MX8Yl6AK.net]
- PDAと互換性ってかいてあるな、すまん
- 747 名前:名前は開発中のものです。 mailto:sage [2006/06/18(日) 00:38:44 ID:kJEJ2x/f.net]
- ブレセンハムが応用できるなんて知りませんでした(><)
改良してみます(^^)
- 748 名前:名前は開発中のものです。 [2006/06/18(日) 03:00:50 ID:DrGgvxn8.net]
- >>744
それダウンロードしたの?俺も同じところで吹いたw 参考になりそうなのはvisiRPGとNew CUIRPGってやつだけだよ。
- 749 名前:名前は開発中のものです。 [2006/06/18(日) 09:52:01 ID:kWRvX99Z.net]
- おいおい、初心者をミスリードするな。
visiRPGとNew CUIRPGも参考にならないだろう。 反面教師ならまだしも、作者の良識を疑う。
- 750 名前:名前は開発中のものです。 [2006/06/20(火) 05:44:49 ID:yRy3miB7.net]
- 鬼はどうなったん?
- 751 名前:名前は開発中のものです。 mailto:sage [2006/06/20(火) 11:04:29 ID:annU3c5h.net]
- ステフが捨てました。
- 752 名前:名前は開発中のものです。 mailto:sage [2006/06/21(水) 17:03:09 ID:b0spWjUO.net]
- >>749の作るゲームに期待
- 753 名前:名前は開発中のものです。 mailto:sage [2006/06/21(水) 18:05:51 ID:HFz2n3fa.net]
- pc8.2ch.net/test/read.cgi/tech/1133286541/793-794
- 754 名前:名前は開発中のものです。 [2006/06/21(水) 18:07:40 ID:HFz2n3fa.net]
- ヘッダに実装を書かない方法を知らないんジャマイカ
- 755 名前:名前は開発中のものです。 [2006/06/22(木) 19:56:56 ID:UpYDoT5s.net]
- 俺たちでドラクエ作ろうぜ
game10.2ch.net/test/read.cgi/ff/1149874021/ スタッフ募集! シナリオ班・ツクール班・音楽班・ドット絵班
- 756 名前:名前は開発中のものです。 mailto:sage [2006/06/25(日) 17:33:37 ID:cfrlOTij.net]
- ドラゴンクエストノスタルジア
とか創ったら略語がDQNにw
- 757 名前:名前は開発中のものです。 [2006/08/01(火) 04:11:10 ID:lqTlZ2D0.net]
- きっと鬼ぃは喉を餅に詰まらせて診断だ
- 758 名前:名前は開発中のものです。 mailto:sage [2006/08/01(火) 16:04:04 ID:dyzvPv2P.net]
- ですよねー
- 759 名前:名前は開発中のものです。 mailto:sage [2006/08/04(金) 18:42:33 ID:W6nuuaJ8.net]
- うんうん ^^
- 760 名前:名前は開発中のものです。 [2006/10/14(土) 17:56:19 ID:TyTVrLwQ.net]
- ワロタ
- 761 名前:名前は開発中のものです。 mailto:sage [2006/10/26(木) 21:13:09 ID:ssyUOzfl.net]
- C++でRPGシステムを作ろうと思っています。
汎用性重視で描画処理はすべてフレームバッファ(Win32ではDIBとして表示。LinuxとかMacは知らんw)。 フォントも安心して使える固定サイズのフリーフォント内蔵で画面イメージも統一できます。 シナリオエディタも搭載、ツクール感覚でオリジナルのRPGを作ることが可能。 設計書書くんで、誰かプログラミングしてください。
- 762 名前:名前は開発中のものです。 mailto:sage [2006/10/26(木) 23:08:33 ID:5Uv1F1QJ.net]
- クラス設計は人の書いたの見てみたいなあ
- 763 名前:名前は開発中のものです。 mailto:sage [2006/10/27(金) 15:19:29 ID:PMSzIrz+.net]
- >>761
それは津クールXPやDxLib・SDLと何が違うんだ? もし、おもしろそうなら、合間合間にcodingはしてもいいが。
- 764 名前:名前は開発中のものです。 mailto:sage [2007/01/28(日) 23:04:23 ID:LYBCO2KL.net]
- 自分のスキルあげるならどういうゲーム作ったら良いのさ
- 765 名前:名前は開発中のものです。 mailto:sage [2007/01/30(火) 11:53:29 ID:C4TtFAJ1.net]
- 一定の経験値でスキルあがるようにするとか。
……と微妙にボケてみる。
- 766 名前:名前は開発中のものです。 mailto:sage [2007/04/12(木) 17:49:52 ID:ZybyQoX6.net]
- >>764
今のレベルによるが、 ある程度も組めないようなら、本買ってきてそれに載ってるコードを読めるようになるとか AngBandなどオープンソースの奴を頑張って読む。 その後は、何か2週間で作れるゲームを自力で作る(設計も自分でする)。 ここまで、できれば、あとはだいたいどんなRPGでも時間や物理的障害を除いて出来るようになると思うよ。
- 767 名前:名前は開発中のものです。 [2007/04/12(木) 17:50:34 ID:bCgTq/qC.net]
- 盛りage
- 768 名前:名前は開発中のものです。 mailto:sage [2007/04/12(木) 18:43:46 ID:MaYb13RL.net]
- >>764
作りたいゲーム作れば?
- 769 名前:名前は開発中のものです。 mailto:sage [2007/11/21(水) 16:03:51 ID:74vDcPF7.net]
- >>764
ピアノと一緒で、練習曲を色々やるべき。 大曲を練習してもうまくならない。
- 770 名前:名前は開発中のものです。 mailto:sage [2007/11/26(月) 14:03:23 ID:uhzP5Hxh.net]
- ドミノ10万個を見ても圧倒されない精神力
- 771 名前:名前は開発中のものです。 mailto:sage [2008/04/25(金) 07:51:24 ID:CbC63WhO.net]
- ほ
- 772 名前:名前は開発中のものです。 mailto:sage [2008/06/04(水) 20:15:51 ID:xVETCOHb.net]
- 新しい gamedeve一応かきかき
TopPage - game-develop.com wiki wiki.game-develop.com/ GameDevWikiを何とかするスレ pc11.2ch.net/test/read.cgi/gamedev/1156117275/
- 773 名前:名前は開発中のものです。 [2008/10/04(土) 03:04:33 ID:6CC7noIJ.net]
- world
- 774 名前:名前は開発中のものです。 mailto:sage [2008/11/10(月) 13:58:56 ID:CM/VVTpv.net]
- めんどいから紙芝居から練習するよ
- 775 名前:名前は開発中のものです。 [2009/03/04(水) 08:57:47 ID:BIR8YGwO.net]
- RPGを作る前にミニゲームなどを作れるようにしたほうがいいよ。
ミニゲームで作った技術はRPGで応用できると思う いきなり、 大作を作ろうとしても無理
- 776 名前:名前は開発中のものです。 mailto:sage [2009/03/04(水) 09:02:17 ID:WGe6HWau.net]
- その通りではあるが
こんな過疎スレで言わんでも
- 777 名前:名前は開発中のものです。 mailto:sage [2009/04/08(水) 14:56:30 ID:3KQiReEr.net]
- 過疎ってるなー。
- 778 名前:名前は開発中のものです。 mailto:sage [2009/07/02(木) 02:09:35 ID:TZX2GARh.net]
- とりあえず完成形が何かというを考え直した方がいいとレナは思うの
- 779 名前:名前は開発中のものです。 [2010/08/04(水) 16:06:44 ID:uZVXPzys.net]
- >>107 のサイトにあったマップエディタって誰か持ってない?
うっかり消してしまったから誰かうp頼む
- 780 名前:名前は開発中のものです。 [2010/09/13(月) 20:52:54 ID:M+I9V0GA.net]
- 旧態依然としたコマンド&ターン戦闘が激しくつまらないと思う今日この頃
- 781 名前:名前は開発中のものです。 [2010/10/14(木) 12:24:18 ID:/y1Wbqlm.net]
- JavaScriptでも作れそう?
ttp://www.programmingmat.jp/game_dev/webgame_dev/mapevt.html
- 782 名前:名前は開発中のものです。 mailto:sage [2010/10/23(土) 15:44:45 ID:A2QO4U5x.net]
- >>781
HTML5の威力はこっちのが判りやすいよ www.publickey1.jp/blog/10/html5javascriptakihabaraiphoneandroid.html
- 783 名前:名前は開発中のものです。 mailto:sage [2011/01/21(金) 23:01:50 ID:MHt2IGM0.net]
- その通りではあるが
こんな過疎スレで言わんでも
- 784 名前:名前は開発中のものです。 [2011/03/09(水) 22:15:31.71 ID:hobFeZxC.net]
- このスレもらっていいかな?
C++とDirectXでRPGを作りたいんだが 誰か一から作り方を教えてくれる奇特な人はいる?
- 785 名前:名前は開発中のものです。 mailto:sage [2011/03/09(水) 23:09:17.54 ID:gadIXpQZ.net]
- >>784
一緒に考えるくらいでよければ協力しますよ。
- 786 名前:名前は開発中のものです。 mailto:sage [2011/03/09(水) 23:38:44.90 ID:hobFeZxC.net]
- >>785
おお、ありがたいです とりあえずDirectXの知識とか皆無なので ドラクエ1-4程度の2DRPGを作ってみようと思う ゲーム性とか関係なく、コンパクトな物を完成させることを目標に
- 787 名前:名前は開発中のものです。 mailto:sage [2011/03/10(木) 00:15:24.30 ID:zj8b7q7C.net]
- >>786
まったく一からと仮定して下記を試してみてください。 #include <windows.h> #include <stdio.h> class WINDOW { public: WINDOW(); }; WINDOW window; WINDOW::WINDOW(){ AllocConsole(); freopen( "CONOUT$", "w", stdout ); freopen( "CONIN$", "r", stdin ); } int APIENTRY WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ){ printf( "hello world\n" ); do { ; } while ( 1 ); return 0; }
- 788 名前:名前は開発中のものです。 mailto:sage [2011/03/10(木) 00:23:55.03 ID:zj8b7q7C.net]
- (787続き)
いろんなアプローチがあるかと思うのでいろんな意見を参考にされるとよいと思います。 わたしはまずはprintfから作るオールドタイプです。 あと、DirectXはver9しか知らないです。 VisualC++は使ったことないのでまったくわからないです。
- 789 名前:名前は開発中のものです。 mailto:sage [2011/03/10(木) 00:26:00.17 ID:LV/Xv7hB.net]
- >>787
はい、試しました
- 790 名前:名前は開発中のものです。 mailto:sage [2011/03/10(木) 00:29:26.99 ID:LV/Xv7hB.net]
- >>788
DirectXは9.0cで作ろうと思っているので、ちょうど良いです 自分はもっとオールドタイプですね MSXの頃にプログラムしてたので、Windows環境はさっぱりです まあVC++が吐き出すWin32APIの雛形くらいは理解できますが
- 791 名前:名前は開発中のものです。 mailto:sage [2011/03/10(木) 00:36:07.62 ID:zj8b7q7C.net]
- 次はとりあえずWindowを作成してしまいましょう。
WINDOWクラスに下記のメンバーを追加してください。 private: HWND handle; MSG message; bool sync; struct { unsigned int X,Y,W,H; unsigned int x,y,w,h; } screen; 変数名とか関数名は自分のポリシーにあわせて変更してください。
- 792 名前:名前は開発中のものです。 mailto:sage [2011/03/10(木) 00:49:20.74 ID:zj8b7q7C.net]
- メンバー関数を作成します。
public: bool open( void ); ゲームの名称が決まっているならプロジェクト名をつけておくと愛着が湧きますよ。 #ifndef PROJECT #define PROJECT "お好きな名前" #endif そろそろファイルを.hと.cppに分割したほうがよいかも知れません。
- 793 名前:名前は開発中のものです。 mailto:sage [2011/03/10(木) 00:51:12.61 ID:zj8b7q7C.net]
-
bool WINDOW::open( void ){ HINSTANCE hi = GetModuleHandle( NULL ); WNDCLASSEX wc; wc.cbSize = sizeof( wc ); wc.style = CS_HREDRAW|CS_VREDRAW; wc.lpfnWndProc = Proc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hi; wc.hIcon = ( HICON )LoadImage( NULL,IDI_APPLICATION,IMAGE_ICON, 0,0,LR_DEFAULTSIZE|LR_SHARED ); wc.hIconSm = wc.hIcon; wc.hCursor = ( HCURSOR )LoadImage( NULL,IDC_ARROW, IMAGE_CURSOR,0,0,LR_DEFAULTSIZE|LR_SHARED ); wc.hbrBackground= ( HBRUSH )GetStockObject( BLACK_BRUSH ); wc.lpszMenuName = NULL; wc.lpszClassName= _T( PROJECT );
- 794 名前:名前は開発中のものです。 mailto:sage [2011/03/10(木) 00:52:43.01 ID:LV/Xv7hB.net]
- >>791-792
できました ちなみにどんな環境でコンパイルしてるんですか? 自分はVisual C++ Express 2010でやってます
- 795 名前:名前は開発中のものです。 mailto:sage [2011/03/10(木) 00:55:08.70 ID:zj8b7q7C.net]
- RegisterClassEx( &wc );
handle = CreateWindow(wc.lpszClassName, wc.lpszClassName, WS_OVERLAPPEDWINDOW, screen.X = screen.x = ( GetSystemMetrics( SM_CXSCREEN ) - SCREEN_W )/ 2, screen.Y = screen.y = ( GetSystemMetrics( SM_CYSCREEN ) - SCREEN_H )/ 2, screen.W = screen.w = SCREEN_W + GetSystemMetrics( SM_CXFRAME ) * 2, screen.H = screen.h = SCREEN_H + GetSystemMetrics( SM_CYFRAME ) * 2 + GetSystemMetrics( SM_CYCAPTION ), NULL,NULL,hi,NULL); ShowWindow( handle, SW_SHOW ); UpdateWindow( handle ); return true; } これでコンパイルしてみてください。 "Procという関数がないよ"でエラーになります。
- 796 名前:名前は開発中のものです。 mailto:sage [2011/03/10(木) 00:57:21.06 ID:LV/Xv7hB.net]
- >>795
そこまで出来ました ProcとSCREEN_WとSCREEN_Hが定義されていないので エラーになりますね
- 797 名前:名前は開発中のものです。 mailto:sage [2011/03/10(木) 00:59:49.27 ID:n38lezle.net]
- windows.hのインクルード前に
#define WIN32_LEAN_AND_MEAN を入れておくとコンパイルが早くなったりとか _WIN32_WINNTを定義しておかないと勝手にVistaとか7専用にされたりとか
- 798 名前:名前は開発中のものです。 mailto:sage [2011/03/10(木) 01:00:15.45 ID:zj8b7q7C.net]
- >>794
MinGW g++というコンパイラです。VCのような統合環境が苦手なんです。 静的メンバー関数としてProcを追加してください。 private: static LRESULT CALLBACK Proc( HWND hWnd, UINT msg, WPARAM wp, LPARAM lp ); LRESULT CALLBACK WINDOW::Proc( HWND hWnd, UINT msg, WPARAM wp, LPARAM lp ){ switch ( msg ) { case WM_DESTROY: PostQuitMessage( 0 ); return 0; } return DefWindowProc( hWnd, msg, wp, lp ); }
- 799 名前:名前は開発中のものです。 mailto:sage [2011/03/10(木) 01:04:37.18 ID:zj8b7q7C.net]
- >>796
スクリーン用の定数定義を忘れていました。 WINDOWクラスに下記の定義を追加してください。 private: enum { SCREEN_W = 800, SCREEN_H = 600, }; 数値はお好みで変更ください。 ファイルや環境変数で外部から取り込む方法もあるかと思いますが、 面倒くさいんでやってないです。最後の方で対応すればよいかと。
- 800 名前:名前は開発中のものです。 mailto:sage [2011/03/10(木) 01:14:43.71 ID:LV/Xv7hB.net]
- >>798-799
できました LRESULT CALLBACK WINDOW::Proc〜の行で 同じパラメーターの型で静的な、または動的なメンバー関数をオーバーロードできません。 とのエラー
- 801 名前:名前は開発中のものです。 mailto:sage [2011/03/10(木) 01:21:28.74 ID:zj8b7q7C.net]
- >>800
すいません原因よくわからないです。 ProcをWINDOWクラスのメンバーから外して、単なる外部関数にしてみてください。
- 802 名前:名前は開発中のものです。 mailto:sage [2011/03/10(木) 01:25:17.77 ID:LV/Xv7hB.net]
- >>801
できました
- 803 名前:名前は開発中のものです。 mailto:sage [2011/03/10(木) 01:30:45.13 ID:zj8b7q7C.net]
- >>802
そうですか。。。コンパイラの差異かも知れないです。 先々、この手の差異でどうにもわからない場合は、 申し訳ないですが自己解決か他に助言を求めてください。 下記の2つのメンバー関数を追加してください。 private: bool peek( void ); //ウィンドウのメッセージを処理します bool sync( void ); //タイマーの同期を取ります
- 804 名前:名前は開発中のものです。 mailto:sage [2011/03/10(木) 01:36:52.24 ID:LV/Xv7hB.net]
- >>803
syncが再定義でエラーになりますね 以前にbool変数として定義されていますが
- 805 名前:名前は開発中のものです。 mailto:sage [2011/03/10(木) 01:39:12.81 ID:zj8b7q7C.net]
- 最終的に作成した3つのメンバー関数はWinMaiに以下のように組み込みます。
window.open(); do { GameSystemInit(); while ( window.peek() ) { if ( !window.sync() ) { continue; } if ( !GameSystemMain()) { break; } } GameSystemFree(); } while ( window.sync() ); ↓これらがゲームっぽいプログラムを入れるところです。 bool GameSystemInit( void ){ return true; } bool GameSystemMain( void ){ return true; } bool GamaSystemFree( void ){ return true; } とりあえず空関数を適当に作成しておきます。
- 806 名前:名前は開発中のものです。 mailto:sage [2011/03/10(木) 01:41:06.36 ID:zj8b7q7C.net]
- >>804
あまり自分の色が出ないように自分のソースからそのまま名前を持ってこないようにしています。 すいませんが適宜お好みの命名規則で回避してください。
- 807 名前:名前は開発中のものです。 mailto:sage [2011/03/10(木) 01:47:57.19 ID:zj8b7q7C.net]
- (806続き)
混乱するので、以降はそのまま持ってくるようにします。 sync変数と関数は下記になります。 private: bool sync; public: bool Sync( void ) const { return sync; }
- 808 名前:名前は開発中のものです。 mailto:sage [2011/03/10(木) 01:51:46.72 ID:LV/Xv7hB.net]
- >>807
そこまでできました peekもpublicになりますか? 今のままだと静的関数なんでアクセスできないですけど
- 809 名前:名前は開発中のものです。 mailto:sage [2011/03/10(木) 01:53:56.05 ID:zj8b7q7C.net]
- Peek関数の中でタイマーを処理しているので、WINDOWクラスに下記のメンバーを追加してください。
struct { unsigned int old; unsigned int now; } time; コンストラクターで初期化します。 WINDOW::WINDOW() { timeBeginPeriod( 1 ); time.old = timeGetTime(); } で、デストラクターで後始末します。 WINDOW::~WINDOW(){ timeEndPeriod( 1 ); }
- 810 名前:名前は開発中のものです。 mailto:sage [2011/03/10(木) 07:13:10.95 ID:zj8b7q7C.net]
- >>808
Peekはpublicです。privateは間違いでした。 あと静的(static)ではないです。
- 811 名前:名前は開発中のものです。 mailto:sage [2011/03/10(木) 22:22:49.60 ID:zj8b7q7C.net]
- Peekの実装です。これでWindowsが表示されると思います。
bool WINDOW::Peek( void ){ sync = false; if ( PeekMessage( &message, NULL, 0, 0, PM_NOREMOVE ) ) { switch ( GetMessage( &message, NULL, 0, 0 ) ) { case 0: case -1: return false; } TranslateMessage( &message ); DispatchMessage( &message ); } time.now = timeGetTime(); if ( time.now - time.old >= 1000/60 ) { time.old = time.now; sync = true; } return true; }
- 812 名前:名前は開発中のものです。 mailto:sage [2011/03/11(金) 00:55:58.78 ID:jGNSe99R.net]
- >>811
Window表示できました
- 813 名前:名前は開発中のものです。 mailto:sage [2011/03/11(金) 07:34:09.43 ID:tT3vlqKS.net]
- >>812
VC++上でのデバッガー実行はよくわからないんで自前でやっていただくとして、 先々、デバッグ目的で何かを表示するのに、よくprintfとMessageBoxを使ったりします。 これらに加えて、Windows上で表示されるフォントがあると便利なので、 デバッグ用にSpriteによる文字表示を作成するのがよいかと思います。 SpriteはDirectXの機能を使います。
- 814 名前:名前は開発中のものです。 mailto:sage [2011/03/11(金) 11:57:07.06 ID:cb9oR2jl.net]
- #include <windows.h>
OutputDebugStringA("これはデバッグ出力\n");
- 815 名前:名前は開発中のものです。 mailto:sage [2011/03/19(土) 10:31:39.54 ID:zpjTizC+.net]
- 皆様お元気でしょうか
ちょっとゴタゴタしてましたが、再開です >>813 スプライトによる文字表示がよく分からなかったので とりあえずDrawTextで文字列表示できました まあ、とりあえずデバッグ用としてこれでいいかなと >>814 VisualStudioだとそれでコンソール出力できるみたいですね 参考にします
- 816 名前:名前は開発中のものです。 mailto:sage [2011/03/19(土) 10:35:30.95 ID:zpjTizC+.net]
- それにしても、意外とDirectX9の解説サイト少ないですね
8以前だと結構あるんですが 特にプログラマブルシェーダーに対応したサイトは少ない 固定機能パイプラインとかもう廃止なので使いたくないし DirectXの知識は全くないので、情報が無いとなかなか進まない
- 817 名前:名前は開発中のものです。 mailto:sage [2011/03/19(土) 10:41:37.55 ID:zpjTizC+.net]
- マップチップとかって、どうやって読み込むんだろう
RPGツクールVXなどを見てみると、マップチップ数に制限が無い 仮に32*32ドットのマップチップ数が65536個だとすると RPGツクール仕様だと、横8個分のチップを縦方向に無限なので 256*262144ドットの巨大テクスチャとして読み込むのだろうか こんな巨大なテクスチャ作れるのかな?
- 818 名前:名前は開発中のものです。 mailto:sage [2011/03/19(土) 11:54:43.83 ID:tf/j5S+W.net]
- 俺なら複数枚のテクスチャを切り替えて表示するかな >817
1枚目のテクスチャにあるチップを描画して、SetTextureで切り替えて2枚目とか どんな方法がベストなのかは知らないけど
- 819 名前:名前は開発中のものです。 mailto:sage [2011/03/19(土) 12:16:09.47 ID:zpjTizC+.net]
- >>818
なるほど、やはり適当な大きさに分割するのが良いんですね 昔のゲームなら全部VRAMに読み込んでコピーとか普通だったけど 今のゲームの規模ならそれはないですね
- 820 名前:名前は開発中のものです。 mailto:sage [2011/03/21(月) 11:39:21.38 ID:t1zoR9O5.net]
- ここ数日DirectXの情報サイトばかり見ているけど
リソースの解放とか凄い面倒そうだ ある程度フレームワーク化しなきゃ駄目なのかな HLSLとかもさっぱりだし、先はかなり長そうだ・・・
- 821 名前:名前は開発中のものです。 mailto:sage [2011/03/21(月) 11:47:38.69 ID:KbfIo3Ze.net]
- 楽をしたいならOgreとかirrlichtとかDXLibとか高レベルライブラリを使うべき
Directxばかりに固執するといいことは何も無い それに良いフレームワークに触れない限り、 自分でフレームワークを組み立てることなどできないしな
- 822 名前:785 mailto:sage [2011/03/23(水) 21:00:30.42 ID:NMGIfDjO.net]
- Window表示が出来たなら、次は入力回りを整備するのがよいかと思います。
DirectInputでよいですかね?(他はわからないです)
- 823 名前:名前は開発中のものです。 mailto:sage [2011/03/23(水) 21:36:41.78 ID:iioYpWXA.net]
- >>822
はい、お願いします DirectInputはまだ未着手なので勉強しておきます
- 824 名前:名前は開発中のものです。 mailto:sage [2011/03/23(水) 21:40:39.44 ID:iioYpWXA.net]
- >>821
ゲーム自体をすぐに作りたいというよりは DirectXと最近のゲームの作り方を勉強したいので Win32API+DirectXでやっていきたいと思います DXライブラリは便利そうですね、いずれこういうライブラリも作りたいです
- 825 名前:785 mailto:sage [2011/03/23(水) 22:48:06.18 ID:NMGIfDjO.net]
- >>823
入力関連をまとめるクラスを作成しましょう。 クラス名(XXXXX)はお好みで変えてください。 class XXXXX { public: static bool Init( void ); // 初期化処理を記述する関数 static bool Main( void ); // 毎ループ呼び出される関数 static bool Free( void ); // 終了時処理を記述する関数 }; bool XXXXX::Init( void ){ return true; } bool XXXXX::Free( void ){ return true; } bool XXXXX::Main( void ){ return true; } 上記の関数はそれぞれ前述(>>805)のGameSystem系の対応する関数内で呼び出します。 InitとFreeの中身は対称(確保⇔解放)になる事が多いです。 また、Mainはどうしても記述量が多くなります。 なので、Init/Free/Mainの順に記載するとソースの見通しがよくなります。
- 826 名前:名前は開発中のものです。 mailto:sage [2011/03/24(木) 12:02:48.79 ID:+jtjlJX2.net]
- 入力関連なんてゲーム内で一つあればいいんだからグローバル関数でもなんでもいいよ
- 827 名前:名前は開発中のものです。 mailto:sage [2011/03/24(木) 17:44:17.05 ID:7A5Wm0Sp.net]
- 全部staticにするくらいなら潔くグローバル関数でいいな
シングルトンでもいいが
- 828 名前:名前は開発中のものです。 mailto:sage [2011/03/25(金) 00:33:52.87 ID:DZniurx+.net]
- >>825
そこまで出来ました。 >>826-827 グローバル関数にすると、管理が面倒になりませんか? フレームワークとかライブラリみたいな形にする時にも メンバ関数の形の方が良いような気がしますが
- 829 名前:名前は開発中のものです。 mailto:sage [2011/03/25(金) 00:49:34.24 ID:VJVVC59h.net]
- >>828
そりゃルート名前空間に直置きは最悪だが 名前空間でくくればまったく面倒ではない むしろすべてクラスクラスと固執する思考はよくないと思われ
- 830 名前:名前は開発中のものです。 mailto:sage [2011/03/25(金) 00:51:14.65 ID:VJVVC59h.net]
- とはいってもまあデザパタ使っていいならシングルトンでも使えばおk
- 831 名前: ◆MBbNHCnf2M mailto:sage [2011/03/25(金) 01:00:08.60 ID:DZniurx+.net]
- とりあえずトリップを付けてみる
>>829 C++で名前空間とか使ったこと無かったです >>830 シングルトンってデザインパターンですか そういうの考えてプログラム作ったこと無かったなぁ ああ、でもMVCでObserverパターンだけ知ってたかも
- 832 名前: ◆MBbNHCnf2M mailto:sage [2011/03/25(金) 01:03:33.95 ID:DZniurx+.net]
- ところで、すごく基本的な質問ですけど
staticなメンバ関数だと何が問題なんでしょう? 特に駄目だという理由が思い付かないんですけど
- 833 名前:名前は開発中のものです。 mailto:sage [2011/03/25(金) 02:00:59.85 ID:t5g0UlGF.net]
- C++ でシングルトンなんか持ち出すくらいなら素直にグローバル変数にしといたほうがよくないか?
- 834 名前: ◆UUwiUCL1P6 mailto:sage [2011/03/25(金) 08:07:59.07 ID:iNPazjrA.net]
- >>828
私もゲームの作り方を勉強したいと思って、 DirectXをつい最近やり始めたという状況で、 自分のやった事を再確認的にお伝えするのが限界です。 いづれ追いつかれて飽和すると思いますので、 より抽象的な概念や高度な作法はいろいろな意見を参考にしてください。 ちなみにXXXXXの部分は何と命名しました?
- 835 名前: ◆MBbNHCnf2M mailto:sage [2011/03/25(金) 11:19:22.92 ID:DZniurx+.net]
- >>834
クラス名は GameInput としておきました
- 836 名前:名前は開発中のものです。 mailto:sage [2011/03/25(金) 17:44:09.60 ID:VJVVC59h.net]
- 最初からデザイン云々いいだしても進まないから、
とりあえず動くことを目的としてけばええと思う 動き始めてからいくらでもデザインは改良できるし。 最初は処理の手順を覚えるのが先、 アルゴリズムの訓練をするのが先決
- 837 名前: ◆UUwiUCL1P6 mailto:sage [2011/03/26(土) 10:36:17.74 ID:pvmCllah.net]
- 必要な変数(静的メンバ)を設定します。
.h public: enum { JOY1,JOY2,JOYMAX,}; private: static IDirectInput8* input; static IDirectInputDevice8* keyboard; static IDirectInputDevice8* mouse; static IDirectInputDevice8* joypad[]; static unsigned int joycnt; .cpp namespace { IDirectInput8* GameInput::input; IDirectInputDevice8* GameInput::keyboard; IDirectInputDevice8* GameInput::mouse; IDirectInputDevice8* GameInput::joypad[JOYMAX]; unsigned int GameInput::joycnt; }
- 838 名前: ◆UUwiUCL1P6 mailto:sage [2011/03/26(土) 11:18:46.58 ID:pvmCllah.net]
- DirectInputの初期化です。
GameInput::Init input = NULL; DirectInput8Create( GetModuleHandle( NULL ), DIRECTINPUT_VERSION, IID_IDirectInput8, reinterpret_cast< void** >( &input ), NULL ); GameInput::Free if ( input ) { input->Release(); input = NULL; } >>837 .hに#include <dinput.h>が必要でした。
- 839 名前:名前は開発中のものです。 mailto:sage [2011/03/26(土) 11:36:25.84 ID:oFPuFWap.net]
- デザインとか気にするんだったら、まずはDirectInputデバイスを晒すのをやめるべき。
入力を取得する関数かクラスを作って、直接デバイスにアクセスするのはその中だけに制限する。
- 840 名前: ◆MBbNHCnf2M mailto:sage [2011/03/26(土) 13:03:14.90 ID:npmu6kKT.net]
- >>837
.cpp(GameInput.cppとしている)のnamespace内の定義は 現在のスコープでは定義できませんとなります
- 841 名前: ◆UUwiUCL1P6 mailto:sage [2011/03/26(土) 14:20:22.37 ID:pvmCllah.net]
- >>840
では、namespace{}での括りは外してしまってください。
- 842 名前: ◆UUwiUCL1P6 mailto:sage [2011/03/26(土) 14:22:30.73 ID:pvmCllah.net]
- keyboardの初期化です。
GameInput::Init input->CreateDevice( GUID_SysKeyboard, &keyboard, NULL ); keyboard->SetDataFormat( &c_dfDIKeyboard ); keyboard->SetCooperativeLevel( Window.Handle(), DISCL_FOREGROUND|DISCL_NONEXCLUSIVE ); { DIPROPDWORD dipd = {}; dipd.diph.dwSize = sizeof( DIPROPDWORD ); dipd.diph.dwHeaderSize = sizeof( DIPROPHEADER ); dipd.diph.dwObj = 0; dipd.diph.dwHow = DIPH_DEVICE; dipd.dwData = 8; keyboard->SetProperty( DIPROP_BUFFERSIZE, &dipd.diph ); } keyboard->Acquire(); GameInput::Free if ( keyboard ) { keyboard->Unacquire(); keyboard = NULL; }
|

|