Hiragi(GKUTH)の日常
理系大学生の日記

ファイル分割と循環参照

アバター
Hiragi(GKUTH)
記事: 167
登録日時: 14年前
住所: 大阪府
連絡を取る:

ファイル分割と循環参照

投稿記事 by Hiragi(GKUTH) » 8年前

 以前STG作っておったんですけど、ある程度したところでSiv3Dに面白そうな機能があることに気付いてしまい、DxLib->Siv3Dしてます。
面白そうな機能とはライブラリで標準搭載されている「シーン管理システム」と「タスクシステム」、そして「エフェクトシステム」です。面白そうでしょう?
今までは自前でこのような物を用意しなければいけないため、そちらに労力と取られたり、つか理解が難しくて中々ゲーム自体の制作が進まないということに陥ります。
なわけで導入してみたのですが...

 ファイル分割に関して壁にぶち当たってしまった!必要に応じてファイルを分割してもどうしても循環参照が発生してしまってなんともならん。
コレはどのようにすれば良いのだろうか、ゲームを作るにおいて難しいのは何方かというとゲームロジック自体と言うよりゲームプログラムの全体的な設計だなぁ
と痛感する今日このごろ。

アバター
imamikay
記事: 0
登録日時: 11年前

Re: ファイル分割と循環参照

投稿記事 by imamikay » 8年前

自分も最近は、Siv3D(OpenSiv3D)触ってます。
(DxLibも悪くはないのですが、C言語触ってる感じが嫌で、結局C++でラップして使ってました。)

個人的に作ってるプログラムなんかだと、
ファイル分割を怠って、クラスに直接実装したりしているのでライブラリにはできない仕様に...
そんな理由で、ファイル分割でトラブったことないですね。

個人的に、どんな感じの循環が発生したのか気になります。

アバター
Hiragi(GKUTH)
記事: 167
登録日時: 14年前
住所: 大阪府
連絡を取る:

Re: ファイル分割と循環参照

投稿記事 by Hiragi(GKUTH) » 8年前

imamikay さんが書きました:自分も最近は、Siv3D(OpenSiv3D)触ってます。
(DxLibも悪くはないのですが、C言語触ってる感じが嫌で、結局C++でラップして使ってました。)

個人的に作ってるプログラムなんかだと、
ファイル分割を怠って、クラスに直接実装したりしているのでライブラリにはできない仕様に...
そんな理由で、ファイル分割でトラブったことないですね。

個人的に、どんな感じの循環が発生したのか気になります。
OpenSiv3Dはまだ色々と開発中っぽいので私は無印の方を使っています。
どのように循環が発生したかというと...

すべてのシーン管理をするclass Managerと管理されるクラスをそれぞれclass Title,class Select,class GameMain,class Resultなどとして、
管理される側のクラスを分割(GameMainは更にPlayer、Enemyなどで分割)しようとしたのですが...

Manager.hpp

CODE:

#include 
#include 

#include "Title.hpp"

struct CommonData
{
	int g_cnt = 0;	//ゲーム全体のカウンタ
	int ID;			//撃つべき弾幕の情報
		//ウィンドウ情報
	const int WINDOW_X = 1280;
	const int WINDOW_Y = 720;
};

using MyGame = SceneManager;

class Manager
{
private:
	MyGame scene;

public:
	Manager();

	bool Init();

	bool Update_Draw();
};
などとして、Manager.cppでInit Update_Draw等の処理を書く。

そして例えばこの場合、TItle.hppは...

CODE:

#include "Manager.hpp"

class Title : public MyGame::Scene
{
private:
	Array m_pos;
	Array m_strings;
	int m_select;
	String m_title;
public:
	Title();
	void init() override;
	void update() override;
	void draw() const override;
};

と言った感じで循環参照の完成。また、Title以外にも色々あるのでその都度Manager.hppをインクルードすると、CommonDataが何度も定義されてしまったりわけわからなくなっております。

今のところMain.cppに全て書いた方が楽なんじゃないかと思っている...

アバター
imamikay
記事: 0
登録日時: 11年前

Re: ファイル分割と循環参照

投稿記事 by imamikay » 8年前

Hiragi(GKUTH) さんが書きました: と言った感じで循環参照の完成。また、Title以外にも色々あるのでその都度Manager.hppをインクルードすると、CommonDataが何度も定義されてしまったりわけわからなくなっております。
多重インクルードに関しては、インクルードガードで回避できそうですね。(素人感)