はじめまして。最近大学の実習でC++とDXLibを用いてシューティングゲームを作る事になり,ゲームプログラミングの館の方を参考にさせてもらっている者でございます。
さて,ついこの間館の「メニュー画面の作り方[選択項目編]」を参考にメニュー画面,ゲーム画面,設定画面を分割したプログラムを作ったのですが,もしここでゲーム画面で実際にプレイヤーを動かしたりなどする場合は,どこから書き始めればいいのかが分からなくなってしまいました……。描画と更新の関数をWhileで繰り返すようにするのか,「int WINAPI WinMain...」から書き始めればいいのかと半ば混乱している状態でございます。
なにぶんC++は1からのスタートのため,半ば何が分からないのか分からない状態のため質問の内容が分かりづらいかも知れませんが,よければアドバイスよろしくお願いします。
開発環境はVisual Studio Express 2012,DXライブラリ使用,C++で,実習でSTGを作成する際の制限として「必ずオブジェクト指向を用いる事」というものが設けられています
ゲーム画面の作り方
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: ゲーム画面の作り方
「メニュー画面の作り方[選択項目編]」で説明されていると思います、とうぜんながらゲームを統括するのは「ゲーム画面」のクラスです。【言葉足らずなので修正】
メニュー画面の作り方で言えばGame.cppの事です。
ここからステージ・敵・プレーヤー・ショット・当たり判定などなどのクラスが呼び出されるわけです。
C++では無いですが、考え方は「ゲームの設計と分割コンパイル」にあります。
メニュー画面の作り方で言えばGame.cppの事です。
ここからステージ・敵・プレーヤー・ショット・当たり判定などなどのクラスが呼び出されるわけです。
C++では無いですが、考え方は「ゲームの設計と分割コンパイル」にあります。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: ゲーム画面の作り方
>>Softyaさん
お早い返信ありがとうございます。
「ゲーム設計と分割コンパイル」を拝見させて頂き,まずGame.cppが既にWhileの中にいる扱いになっているというのは分かりました。
ただその後,Game.cppに別のクラス(Player.cppなど)を呼び出す方法がいまいちよく分からないんですよね……。
とりあえず手始めにゲーム画面に移ったらプレイヤーを表示して,キーボードでそのプレイヤーを動かせるようにしたいのですが,なかなか思うように行きません。
今のところPlayer.cppは
で,Game.cppが
のようになっているのですが,プレイヤーの初期化,計算,描画,終了処理はGame.cppのどこに書き込めばいいのでしょうか?試しにGame.cppの描画内に
CPlayer Initialize();
CPlayer Update();
CPlayer Draw();
CPlayer Finalize();
の四つを書き込んでみたのですが,ゲーム画面でプレイヤーは表示されませんでした。
立て続けに質問してしまい申し訳ありませんが,ご助力いただけるとありがたいです。
お早い返信ありがとうございます。
「ゲーム設計と分割コンパイル」を拝見させて頂き,まずGame.cppが既にWhileの中にいる扱いになっているというのは分かりました。
ただその後,Game.cppに別のクラス(Player.cppなど)を呼び出す方法がいまいちよく分からないんですよね……。
とりあえず手始めにゲーム画面に移ったらプレイヤーを表示して,キーボードでそのプレイヤーを動かせるようにしたいのですが,なかなか思うように行きません。
今のところPlayer.cppは
#include "DxLib.h"
#include "Keyboard.h"
#include "Player.h"
// 初期化をする
void CPlayer::Initialize(){
m_Image = LoadGraph("img/p.png");
m_y = 0;
m_x = 0;
}
// 動きを計算する
void CPlayer::Update(){
if( Keyboard_Get( KEY_INPUT_UP ) > 0 ){
m_y--;
}
if( Keyboard_Get( KEY_INPUT_DOWN ) > 0 ){
m_y++;
}
if( Keyboard_Get( KEY_INPUT_LEFT ) > 0 ){
m_x++;
}
if( Keyboard_Get( KEY_INPUT_RIGHT ) > 0 ){
m_x--;
}
}
// 描画する
void CPlayer::Draw(){
DrawGraph( m_x, m_y, m_Image, TRUE );
}
// 終了処理をする
void CPlayer::Finalize(){
DeleteGraph( m_Image );
}
#include "Game.h"
#include "SceneMgr.h"
#include "DxLib.h"
#include "Player.h"
//更新
void Game_Update(){
if(CheckHitKey(KEY_INPUT_ESCAPE)!=0){ //Escキーが押されていたら
SceneMgr_ChangeScene(eScene_Menu);//シーンをメニューに変更
}
}
//描画
void Game_Draw(){
DrawString(0, 0,"ゲーム画面です。",GetColor(255,255,255));
DrawString(0,20,"Escキーを押すとメニュー画面に戻ります。",GetColor(255,255,255));
}
CPlayer Initialize();
CPlayer Update();
CPlayer Draw();
CPlayer Finalize();
の四つを書き込んでみたのですが,ゲーム画面でプレイヤーは表示されませんでした。
立て続けに質問してしまい申し訳ありませんが,ご助力いただけるとありがたいです。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: ゲーム画面の作り方
ゲームの組み方というよりはC++の文法レベルの話ですので、詳しい話は別途質問してもらった方が良さそうです。
一言で言えばインスタンスがちゃんと生成されていないって事です。
C++だけでも難易度が高いのに、ちゃんとクラスを使って、その上にゲームを組むのは大変な作業です。
もっとSTGよりも簡単なゲームにしたほうが良いかもしれませんね。出来ないのかもしれませんが。
【補足】 まともに組むと勉強と合わせて最低でも半年とか時間が必要そうです。
ゲームとしての構造では、Game.cppのInitializeでInitializeしてください。
あれ? c++版のGame.cppでは無い様です。
こちらなんですが。
「新・C言語 ~ゲームプログラミングの館~ [DXライブラリ]」
http://dixq.net/g/sp_06.html
こっちを理解してください。
これを真似る場合はTaskシステムな構造になっているので、Player.cppもTaskを継承したタスクシステムにしたほうが良いかもしれません。
そうしないと全体としてちぐはぐになります。変えるなら全部を変える必要があります。
一言で言えばインスタンスがちゃんと生成されていないって事です。
C++だけでも難易度が高いのに、ちゃんとクラスを使って、その上にゲームを組むのは大変な作業です。
もっとSTGよりも簡単なゲームにしたほうが良いかもしれませんね。出来ないのかもしれませんが。
【補足】 まともに組むと勉強と合わせて最低でも半年とか時間が必要そうです。
ゲームとしての構造では、Game.cppのInitializeでInitializeしてください。
あれ? c++版のGame.cppでは無い様です。
こちらなんですが。
「新・C言語 ~ゲームプログラミングの館~ [DXライブラリ]」
http://dixq.net/g/sp_06.html
こっちを理解してください。
これを真似る場合はTaskシステムな構造になっているので、Player.cppもTaskを継承したタスクシステムにしたほうが良いかもしれません。
そうしないと全体としてちぐはぐになります。変えるなら全部を変える必要があります。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: ゲーム画面の作り方
>>softoyaさん
確かに1からのスタートなのに少し駆け足しすぎたかもしれませんね……。
丸一年使っての実習なんでこれからきちんとC++を勉強しつつじっくり作っていきます!
あとGame.cppがC++になっていないのは自分がCとC++を混同していたからです……。
若輩者の質問に時間を割いていただきありがとうございましたm(__)m
確かに1からのスタートなのに少し駆け足しすぎたかもしれませんね……。
丸一年使っての実習なんでこれからきちんとC++を勉強しつつじっくり作っていきます!
あとGame.cppがC++になっていないのは自分がCとC++を混同していたからです……。
若輩者の質問に時間を割いていただきありがとうございましたm(__)m