構造体には上限がある?

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
nishi
記事: 4
登録日時: 1年前

構造体には上限がある?

#1

投稿記事 by nishi » 1年前

現在Dxライブラリを用いてゲームを作っています。
2Dマップ上に敵とプレイヤーが複数おり、自動で弾を撃ち合うものです。

コード:

//構造体
typedef struct {
	double x;
	double y;
	double azi;
	double fireVelX;
	double fireVelY;
	double fireTimeCount;
	int r;
	bool flag;
	float vel;
} Gun;

typedef struct {
	double x;
	double y;
	double xOld;
	double yOld;
	double azi;
	double trate;
	double fireVelX;
	double fireVelY;
	double fireTimeCount;
	int r;
	bool flag;
	int range;
	float vel;
} Missile;

typedef struct {
	double x;
	double y;
	double azi;
	double trate;
	double firePosX;//発射座標(飛翔距離を計算する為)
	double firePosY;
	int r;
	bool flag;
	int range;
	float vel;
} Chaff;
typedef struct {
	bool flag;
	int HP;
	int HPMAX;
	double size;
	double x;
	double y;
	double xOld;
	double yOld;
	double azi;
	double turnRate;
	double velX;
	double velY;
	double movingTargetx;
	double movingTargety;
	int attackTarget;//攻撃対象の敵番号
	int r;
	double vel;
	Gun g[GUN_NUM]; //主砲
	int gReloadCount;
	int gReloadTime;
	Gun b[BULLET_NUM]; //機銃
	int bReloadCount;
	int bReloadTime;
	Missile m[MISSILE_NUM];
	int mReloadCount;
	int mReloadTime;
	int mMagazine;
	Chaff c[CHAFF_NUM];
	int cReloadCount;
	int cReloadTime;
} Character;
上記のような構造体を用いてプレイヤーと敵の弾を描写、移動、アタリ判定など処理しているのですが、
どうも弾が一定数を超えると他の弾が消えるようなのです。
同時に表示される球数が多い程消える事がおおいです。
構造体内の配列のサイズを大きくしてもその傾向は変わりませんでした。
そこで、構造体にはメモリ上限などがあるのか疑問に思った次第です。どうなのでしょうか

box
記事: 2002
登録日時: 14年前

Re: 構造体には上限がある?

#2

投稿記事 by box » 1年前

提示された構造体を使って、
・どこに(関数のローカル領域?staticな領域?globalな領域?)
・どれくらいの大きさの
メモリーを取ろうとしてるかな?
そらコンピューターの記憶域を超えるような領域を確保しようと
してるんなら、何が起きるかはわからんわな。別に構造体でなくても
intでもdoubleでも同じやで。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

nishi
記事: 4
登録日時: 1年前

Re: 構造体には上限がある?

#3

投稿記事 by nishi » 1年前

失礼しました、global領域に記述しております。
サイズとしては

コード:


#define GUN_NUM 32 //砲の最大存在数
#define BULLET_NUM 100 //機銃の最大存在数
#define MISSILE_NUM 32 //ミサイルの最大存在数
#define CHAFF_NUM 32 //チャフの最大存在数

くらいを目安にしております。が、発射レート的にこれを超える事はほぼないかと思われます。
DXLibの確保できるメモリってそんなに少ないんでしょうか

nishi
記事: 4
登録日時: 1年前

Re: 構造体には上限がある?

#4

投稿記事 by nishi » 1年前

なお、コードとしては下記サイトを参考にしておりますのでほぼ同じ構成です。
1000行を超えるので添付はできませんが...

https://mattyan1053.hatenablog.com/entr ... 1%E3%82%8B

nishi
記事: 4
登録日時: 1年前

Re: 構造体には上限がある?

#5

投稿記事 by nishi » 1年前

度々すいません、敵4、プレイヤー4なので、球数上限は上記の8倍です。

アバター
usao
記事: 1889
登録日時: 11年前

Re: 構造体には上限がある?

#6

投稿記事 by usao » 1年前

「コードは どこぞのものと ほぼ同じ」とか言われても……
【そのどこぞのコードそのままであれば正常に動作し,且つ,あなたの現コードは正常に動作しない】という話なのであれば,
あなたのコードが示されない限り,他者に原因がわかるわけがない…と思わない?

---

で,あなたの1000行を超える現コード全体を丸ごと提示せねばならないと考えているならば,それもまた間違っている.

コードを他者に見せるしかない状況なのであれば,見せるべき範囲を絞り込む作業をまずは実施すべき.
(問題に 関係ある部分/ない部分 がどこなのかが全く見当も付かないなんてことはないでしょう?)
あるいは本物のコードではなく,全く同じ問題が発生するミニマムなコードを別途作ってそれを見せるという手もある.

---

それはそれとして,

> 消える

とは何か? というのをもっと突き詰めるべき.
言葉から察するに,少なくとも見た目の現象としては「表示されない」のであろうから,そしたら,とりあえず表示する処理の箇所で何が起こっているのかを調査するべきであろう.

データがN個存在する「ハズ」なのに,N個表示されないならば,その原因としては例えば

・実際のデータ個数が想定と異なっている(N個未満になっている)
・表示(描画)処理が何故かNよりも少ない個数分しか走っていない
・データの内容が異常になっている

なんてのが考えられるよね.そういうのをちゃんとチェックしてる?
まだしてないならチェックしてみるべきだし,
既にしてるなら,そういった調査結果を情報として提示する方が良いよね.
単に「消える」と言うのと,「何故かここのループがN回分実施されないようだ」とか言うのとでは大分違うよね.

アバター
あたっしゅ
記事: 665
登録日時: 14年前
住所: 東京23区
連絡を取る:

Re: 構造体には上限がある?

#7

投稿記事 by あたっしゅ » 1年前

東上☆海美☆「
> 1000行を超えるので添付はできませんが...

1000 行を超えるソースファイルでも、ビルドできるものであれば、調べますので、up してくださいみみ。
VTuber:
東上☆海美☆(とうじょう・うみみ)
http://atassyu.php.xdomain.jp/vtuber/index.html
レスがついていないものを優先して、レスするみみ。時々、見当外れなレスしみみ。

中の人:
手提鞄あたッしュ、[MrAtassyu] 手提鞄屋魚有店
http://ameblo.jp/mratassyu/
Pixiv: 666303
Windows, Mac, Linux, Haiku, Raspbery Pi, Jetson Nano, 電子ブロック 持ち。

返信

“C言語何でも質問掲示板” へ戻る