[過去ログ]
C++でRPGゲームを作成する (908レス)
C++でRPGゲームを作成する http://mevius.5ch.net/test/read.cgi/gamedev/1101161690/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
必死チェッカー(本家)
(べ)
自ID
レス栞
あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
787: 名前は開発中のものです。 [sage] 2011/03/10(木) 00:15:24.30 ID:zj8b7q7C >>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; } http://mevius.5ch.net/test/read.cgi/gamedev/1101161690/787
788: 名前は開発中のものです。 [sage] 2011/03/10(木) 00:23:55.03 ID:zj8b7q7C (787続き) いろんなアプローチがあるかと思うのでいろんな意見を参考にされるとよいと思います。 わたしはまずはprintfから作るオールドタイプです。 あと、DirectXはver9しか知らないです。 VisualC++は使ったことないのでまったくわからないです。 http://mevius.5ch.net/test/read.cgi/gamedev/1101161690/788
791: 名前は開発中のものです。 [sage] 2011/03/10(木) 00:36:07.62 ID:zj8b7q7C 次はとりあえずWindowを作成してしまいましょう。 WINDOWクラスに下記のメンバーを追加してください。 private: HWND handle; MSG message; bool sync; struct { unsigned int X,Y,W,H; unsigned int x,y,w,h; } screen; 変数名とか関数名は自分のポリシーにあわせて変更してください。 http://mevius.5ch.net/test/read.cgi/gamedev/1101161690/791
792: 名前は開発中のものです。 [sage] 2011/03/10(木) 00:49:20.74 ID:zj8b7q7C メンバー関数を作成します。 public: bool open( void ); ゲームの名称が決まっているならプロジェクト名をつけておくと愛着が湧きますよ。 #ifndef PROJECT #define PROJECT "お好きな名前" #endif そろそろファイルを.hと.cppに分割したほうがよいかも知れません。 http://mevius.5ch.net/test/read.cgi/gamedev/1101161690/792
793: 名前は開発中のものです。 [sage] 2011/03/10(木) 00:51:12.61 ID:zj8b7q7C 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 ); http://mevius.5ch.net/test/read.cgi/gamedev/1101161690/793
795: 名前は開発中のものです。 [sage] 2011/03/10(木) 00:55:08.70 ID:zj8b7q7C 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という関数がないよ"でエラーになります。 http://mevius.5ch.net/test/read.cgi/gamedev/1101161690/795
798: 名前は開発中のものです。 [sage] 2011/03/10(木) 01:00:15.45 ID:zj8b7q7C >>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 ); } http://mevius.5ch.net/test/read.cgi/gamedev/1101161690/798
799: 名前は開発中のものです。 [sage] 2011/03/10(木) 01:04:37.18 ID:zj8b7q7C >>796 スクリーン用の定数定義を忘れていました。 WINDOWクラスに下記の定義を追加してください。 private: enum { SCREEN_W = 800, SCREEN_H = 600, }; 数値はお好みで変更ください。 ファイルや環境変数で外部から取り込む方法もあるかと思いますが、 面倒くさいんでやってないです。最後の方で対応すればよいかと。 http://mevius.5ch.net/test/read.cgi/gamedev/1101161690/799
801: 名前は開発中のものです。 [sage] 2011/03/10(木) 01:21:28.74 ID:zj8b7q7C >>800 すいません原因よくわからないです。 ProcをWINDOWクラスのメンバーから外して、単なる外部関数にしてみてください。 http://mevius.5ch.net/test/read.cgi/gamedev/1101161690/801
803: 名前は開発中のものです。 [sage] 2011/03/10(木) 01:30:45.13 ID:zj8b7q7C >>802 そうですか。。。コンパイラの差異かも知れないです。 先々、この手の差異でどうにもわからない場合は、 申し訳ないですが自己解決か他に助言を求めてください。 下記の2つのメンバー関数を追加してください。 private: bool peek( void ); //ウィンドウのメッセージを処理します bool sync( void ); //タイマーの同期を取ります http://mevius.5ch.net/test/read.cgi/gamedev/1101161690/803
805: 名前は開発中のものです。 [sage] 2011/03/10(木) 01:39:12.81 ID:zj8b7q7C 最終的に作成した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; } とりあえず空関数を適当に作成しておきます。 http://mevius.5ch.net/test/read.cgi/gamedev/1101161690/805
806: 名前は開発中のものです。 [sage] 2011/03/10(木) 01:41:06.36 ID:zj8b7q7C >>804 あまり自分の色が出ないように自分のソースからそのまま名前を持ってこないようにしています。 すいませんが適宜お好みの命名規則で回避してください。 http://mevius.5ch.net/test/read.cgi/gamedev/1101161690/806
807: 名前は開発中のものです。 [sage] 2011/03/10(木) 01:47:57.19 ID:zj8b7q7C (806続き) 混乱するので、以降はそのまま持ってくるようにします。 sync変数と関数は下記になります。 private: bool sync; public: bool Sync( void ) const { return sync; } http://mevius.5ch.net/test/read.cgi/gamedev/1101161690/807
809: 名前は開発中のものです。 [sage] 2011/03/10(木) 01:53:56.05 ID:zj8b7q7C Peek関数の中でタイマーを処理しているので、WINDOWクラスに下記のメンバーを追加してください。 struct { unsigned int old; unsigned int now; } time; コンストラクターで初期化します。 WINDOW::WINDOW() { timeBeginPeriod( 1 ); time.old = timeGetTime(); } で、デストラクターで後始末します。 WINDOW::~WINDOW(){ timeEndPeriod( 1 ); } http://mevius.5ch.net/test/read.cgi/gamedev/1101161690/809
810: 名前は開発中のものです。 [sage] 2011/03/10(木) 07:13:10.95 ID:zj8b7q7C >>808 Peekはpublicです。privateは間違いでした。 あと静的(static)ではないです。 http://mevius.5ch.net/test/read.cgi/gamedev/1101161690/810
811: 名前は開発中のものです。 [sage] 2011/03/10(木) 22:22:49.60 ID:zj8b7q7C 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; } http://mevius.5ch.net/test/read.cgi/gamedev/1101161690/811
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.029s