ワケあって、「ゲーム」について研究してます。
「処理を速くする」などを目的として、
全画面表示&解像度変更をするゲームってありますよね?
アレはどうやってるんでしょうか?
Win32 API?
DirectX?
もしそうなら、DirectX以外でやることは出来ますか?
ちゃちなアクションゲームを作った事がありますが、全画面表示とか、頭回らなかった(^^;
また、何もかも独学で頑張ってるので、カンジンな知識が抜けてたり、引数(インスウ)って未だに読んでたりします(笑)
こんな僕でも分かるようにかみ砕いて、誰か教えてください。
また、ソレが分かるサイトとかもあったら教えてください。
基本的なやり方は同じだと思うのですが、もし具体的に教えて頂けるなら、言語はVBか、Cでお願いしますです。
「本買え」ってのは、言わないでくださいね(^^;
スグに日本語の本が安く手に入る環境じゃないんです。
よろしくお願いします。
No.6
- 回答日時:
DirectX8SDKをダウンロードしてみては?
VB用、VC++用のサンプルコードがついています。
解像度変更はAPIでも可能ですが
基本的に市販のゲームはDirectXを使用しています。
参考URL:http://www.microsoft.com/japan/msdn/directx/down …
回答ありがとうございます。
そうですね。知ってます。
でも、DirectXには触れないでやるのが、「目標」だったんです。
特に市販のゲームのクオリティを目的に勉強してるってワケでは、ないので・・・。
アドバイスありがとうございました。
No.4
- 回答日時:
ちなみに、先に
SetWindowLong( hWnd, GWL_STYLE, WS_DISABLED | WS_CHILD );
と言ってましたが、WS_POPUP の方がいいみたいです。
SetWindowLong( hWnd, GWL_STYLE, WS_POPUP );
No.3
- 回答日時:
typedef struct {
int height;
int width;
} DISPLAYSIZE;
static DISPLAYSIZE ds;
/*******************************************************************/
/* ウィンドウプロシージャ */
/*******************************************************************/
LRESULT CALLBACK WndProc( HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam ){
switch( nMsg ){
case WM_CREATE:
getDisplaySize();
DisplayModeFull();
SetWindowLong( hWnd, GWL_STYLE, WS_POPUP );
SetWindowPos( hWnd, HWND_TOP, 0, 0, 640, 480, SWP_SHOWWINDOW );
break;
case WM_COMMAND:
switch( LOWORD( wParam ) ){
case IDC_QUIT:
DisplayModeNormal();
SendMessage( hWnd, WM_CLOSE, 0L, 0L );
break;
}
break;
case WM_RBUTTONDOWN:
createPopupMenu( hWnd, lParam );
break;
case WM_CLOSE:
PostQuitMessage(0);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc( hWnd, nMsg, wParam, lParam );
}
return 0L;
}
/*******************************************************************/
/* ポップアップメニュー */
/*******************************************************************/
static int createPopupMenu( HWND hWnd, LPARAM lParam ){
HINSTANCE hInst;
HMENU hMenu;
HMENU hSubMenu;
POINT pt;
pt.x = LOWORD( lParam );
pt.y = HIWORD( lParam );
hInst = ( HINSTANCE )GetWindowLong( hWnd, GWL_HINSTANCE );
hMenu = LoadMenu( hInst, MAKEINTRESOURCE( IDM_MAINMENU ) );
hSubMenu = GetSubMenu( hMenu, 0 );
ClientToScreen( hWnd, &pt );
TrackPopupMenu( hSubMenu, TPM_LEFTALIGN, pt.x, pt.y, 0, hWnd, NULL );
DestroyMenu( hMenu );
return TRUE;
}
/*******************************************************************/
/* 画面のサイズを記憶しておく */
/*******************************************************************/
static int getDisplaySize(void){
HWND hDisplayWnd;
RECT DisplayRect;
hDisplayWnd = GetDesktopWindow();
GetWindowRect( hDisplayWnd, (LPRECT)&DisplayRect );
ds.width = DisplayRect.right;
ds.height = DisplayRect.bottom;
return TRUE;
}
/*******************************************************************/
/* フルスクリーンモード */
/*******************************************************************/
static bool DisplayModeFull(void){
DEVMODE screen_mode;
memset( &screen_mode, 0, sizeof( DEVMODE ) );
screen_mode.dmSize = sizeof( DEVMODE );
screen_mode.dmPelsWidth = 640;
screen_mode.dmPelsHeight = 480;
screen_mode.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT;
if( ChangeDisplaySettings( &screen_mode, 0 ) == DISP_CHANGE_SUCCESSFUL ){
return true;
}
return false;
}
/*******************************************************************/
/* 終了時にもとの画面に戻す */
/*******************************************************************/
static bool DisplayModeNormal(void){
DEVMODE screen_mode;
memset( &screen_mode, 0, sizeof( DEVMODE ) );
screen_mode.dmSize = sizeof( DEVMODE );
screen_mode.dmPelsWidth = ds.width;
screen_mode.dmPelsHeight = ds.height;
screen_mode.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT;
if( ChangeDisplaySettings( &screen_mode, 0 ) == DISP_CHANGE_SUCCESSFUL ){
return true;
}
return false;
}
No.2
- 回答日時:
あと、書き忘れていたんですが、、、
ウィンドウを改造するなら SetWindowLong を使ってください。
SetWindowLong( hWnd, GWL_STYLE, WS_DISABLED | WS_CHILD );
↑こうするとタイトルウィンドウの無いウィンドウになります。ただ、気をつけなければいけないのは処理とかが終わったら、
SetWindowLong( hWnd, GWL_STYLE, WS_OVERLAPPEDWINDOW );
とかのように、もとのスタイルに戻してやるか、右クリックでポップアップメニューを出すとか、マウスポインタがウィンドウ上部に来たらメニューをロードしてやるだとか。とにかく終了してやれる方法を考えておいてください。でないと強制終了しかないようなアプリになります。
また、ウィンドウのサイズと画面のサイズを合わせてやれば全画面になります。たぶん・・・。
No.1
- 回答日時:
僕が以前書いたソースで良ければ。
スマートじゃないかもしれませんが・・・。
この関数を好きなところで呼び出せば変更できたと思います。僕はメニューで呼び出しました。
screen_mode.dmPelsWidth = 640;
screen_mode.dmPelsHeight = 480;
で画面の解像度を変更できます。
*************************************************
/*------ フルスクリーンモード ------*/
bool DisplayModeFull(void){
DEVMODE screen_mode;
memset( &screen_mode, 0, sizeof( DEVMODE ) );
screen_mode.dmSize = sizeof( DEVMODE );
screen_mode.dmPelsWidth = 640;
screen_mode.dmPelsHeight = 480;
screen_mode.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT;
if( ChangeDisplaySettings( &screen_mode, 0 ) == DISP_CHANGE_SUCCESSFUL ){
return true;
}
return false;
}
*************************************************
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) このWEB用語、WEB文章、意味が分かりますか? 理解できない人が多いようなんですが・・・ 7 2022/10/22 09:13
- HTML・CSS WEBサイトの構築。表示データとWEBデザインを分離する考え方を専門用語・業界用語では何と言うか? 8 2022/09/27 09:16
- 発達障害・ダウン症・自閉症 私は幼い頃から周りの子と変わったところがあり社会人になってからも仕事が長続きせず上手くいかないことだ 3 2022/08/26 13:24
- テレビ プレステ5が映らなくりました 1 2023/07/13 11:09
- モニター・ディスプレイ ワイドモニターの解像度が合わずMacの画面が横に伸ばされて表示されてしまう 2 2022/08/09 07:53
- Windows 10 Windows10 の設定?について (長文ですがよろしくお願いします)m(_ _)m 3 2022/05/14 12:22
- C言語・C++・C# 【C++】IDirect3DSurfaceのディープコピーは可能ですか? 1 2022/07/06 02:47
- フリーソフト 倍率自動調整して全画面表示できるフリーの画像ビューアー 1 2023/08/24 10:55
- iOS iPhoneの画面が見切れて困ってます ゲーム画面などで文字が見切れてしまっていたり タップする部分 2 2022/07/05 22:45
- モニター・ディスプレイ PCのマルチディスプレイで複製はできますが拡張ができません 1 2023/08/09 01:29
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
画像を表示したいのですが……
-
プログラミングでエラーが出ま...
-
トラックのループの仕方
-
MessageBoxについて
-
エラー Run-Time Check Failur...
-
COMPORTマルチスレッドで例外発生
-
Win32APIでウィンドウを中央に...
-
Enterキーを押されたら次の処理...
-
#define _CRT_SECURE_NO_WARNIN...
-
C言語での引数の省略方法
-
DWORDの実際の型は何でしょうか
-
信頼区間の1.96や1.65ってどこ...
-
「指定されたキャストは有効で...
-
2÷3などの余りについて
-
複数桁10進数の*桁目だけを抽出...
-
Aの値からBの値を除するとは??
-
プログラムでの数字につく”f”の...
-
10個出力で改行したいのですが...
-
整数データの配列から同じ値の...
-
既定のコンストラクタがありま...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エディットボックスの背景の色...
-
ダイアログプログラムでEnterキ...
-
C言語win32api、エディットボッ...
-
音量調節
-
エディットコントロール入力時...
-
エラー Run-Time Check Failur...
-
キャレットの現在位置の表示 (W...
-
プログラミングでエラーが出ま...
-
LoadImageとSetCursorについて
-
コンソールアプリケーションの...
-
画像を表示したいのですが……
-
PeekMessageについて
-
Win32APIでウィンドウを中央に...
-
C++のcase文の書き方
-
ボタンの色(WINAPI)
-
COMPORTマルチスレッドで例外発生
-
CTreeCtrlのCreate関数でエラー...
-
C#のswitch文を簡略化したいの...
-
オーバーレイみたいな処理がしたい
-
DirectInputについて再
おすすめ情報