[過去ログ] C++でRPGゲームを作成する (908レス)
前次1-
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
787
(1): 2011/03/10(木)00:15 ID:zj8b7q7C(1/16) AAS
>>786
まったく一からと仮定して下記を試してみてください。

#include <windows.h>
#include <stdio.h>

class WINDOW {
public:
WINDOW();
省14
788
(1): 2011/03/10(木)00:23 ID:zj8b7q7C(2/16) AAS
(787続き)
いろんなアプローチがあるかと思うのでいろんな意見を参考にされるとよいと思います。
わたしはまずはprintfから作るオールドタイプです。

あと、DirectXはver9しか知らないです。
VisualC++は使ったことないのでまったくわからないです。
791
(1): 2011/03/10(木)00:36 ID:zj8b7q7C(3/16) AAS
次はとりあえずWindowを作成してしまいましょう。
WINDOWクラスに下記のメンバーを追加してください。

private:
HWND handle;
MSG message;
bool sync;

struct {
省4
792
(1): 2011/03/10(木)00:49 ID:zj8b7q7C(4/16) AAS
メンバー関数を作成します。
public:
bool open( void );

ゲームの名称が決まっているならプロジェクト名をつけておくと愛着が湧きますよ。

#ifndef PROJECT
#define PROJECT "お好きな名前"
#endif
省1
793: 2011/03/10(木)00:51 ID:zj8b7q7C(5/16) AAS
bool WINDOW::open( void ){
HINSTANCE hi = GetModuleHandle( NULL );
WNDCLASSEX wc;

wc.cbSize = sizeof( wc );
wc.style = CS_HREDRAW|CS_VREDRAW;
wc.lpfnWndProc = Proc;
省9
795
(1): 2011/03/10(木)00:55 ID:zj8b7q7C(6/16) AAS
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,
省8
798
(1): 2011/03/10(木)01:00 ID:zj8b7q7C(7/16) AAS
>>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 ) {
省6
799
(1): 2011/03/10(木)01:04 ID:zj8b7q7C(8/16) AAS
>>796
スクリーン用の定数定義を忘れていました。
WINDOWクラスに下記の定義を追加してください。

private:
enum {
SCREEN_W = 800,
SCREEN_H = 600,
省4
801
(1): 2011/03/10(木)01:21 ID:zj8b7q7C(9/16) AAS
>>800
すいません原因よくわからないです。
ProcをWINDOWクラスのメンバーから外して、単なる外部関数にしてみてください。
803
(1): 2011/03/10(木)01:30 ID:zj8b7q7C(10/16) AAS
>>802
そうですか。。。コンパイラの差異かも知れないです。
先々、この手の差異でどうにもわからない場合は、
申し訳ないですが自己解決か他に助言を求めてください。

下記の2つのメンバー関数を追加してください。

private:
bool peek( void ); //ウィンドウのメッセージを処理します
省1
805
(1): 2011/03/10(木)01:39 ID:zj8b7q7C(11/16) AAS
最終的に作成した3つのメンバー関数はWinMaiに以下のように組み込みます。

window.open();
do {
GameSystemInit();
while ( window.peek() ) {
if ( !window.sync() ) { continue; }
if ( !GameSystemMain()) { break; }
省8
806: 2011/03/10(木)01:41 ID:zj8b7q7C(12/16) AAS
>>804
あまり自分の色が出ないように自分のソースからそのまま名前を持ってこないようにしています。
すいませんが適宜お好みの命名規則で回避してください。
807
(1): 2011/03/10(木)01:47 ID:zj8b7q7C(13/16) AAS
(806続き)
混乱するので、以降はそのまま持ってくるようにします。
sync変数と関数は下記になります。

private:
bool sync;

public:
bool Sync( void ) const { return sync; }
809: 2011/03/10(木)01:53 ID:zj8b7q7C(14/16) AAS
Peek関数の中でタイマーを処理しているので、WINDOWクラスに下記のメンバーを追加してください。

struct {
unsigned int old;
unsigned int now;
} time;

コンストラクターで初期化します。

WINDOW::WINDOW() {
省7
810: 2011/03/10(木)07:13 ID:zj8b7q7C(15/16) AAS
>>808
Peekはpublicです。privateは間違いでした。
あと静的(static)ではないです。
811
(1): 2011/03/10(木)22:22 ID:zj8b7q7C(16/16) AAS
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:
省12
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.028s