Project Board コメントComment
ログイン | ヘルプ | トップ

プロジェクト
親コメント:
プログラムを拝見させていただきました! ... 2007-01-16 15:06 by マッキー

3D迷路

内容
Commented by: ごま太郎 at 2007-01-16 21:11:29

for (yy=y開始点; yy<y開始点+8 && yy<=$map.Height; yy++) {
for (xx=x開始点; xx<x開始点+8 && xx<=$map.Width; xx++) {
の部分のことでしょうか?
これは、マップ配列上から視界分のマップを取り出すためのループで、今のところ毎フレーム必要なものです。

根本的なところでマッキーさんのおっしゃているのと同じことなんですが、おそらく毎フレームに$convにつっこむpointクラスの処理量が多すぎるのが原因っぽいです。
点滅時には$convの処理が重くなっているんですが、全てのpointを$convに放り込んで処理しているので1フレームの処理限界を超えるようです。
一つの壁・床を描写する事に五つのpointクラスを作成しているので・・・。たぶん、毎フレーム平気で1000近いpointクラスを扱っているんですよね。そりゃ無理もあります^^;

解決方法としては、壁の向こうの見えない壁は描写しない(線ベクトルと面のあたり判定が必要。今のところ、やり方が分からない)。
または、$convに相応するクラスを複数用意して、処理を分散する必要があります。

ちなみに、マッキーさんの螺旋迷路をちゃんと描写したいときには、とりあえず視界を阻めるのが手っ取り早いです。
for (yy=y開始点; yy<y開始点+3 && yy<=$map.Height; yy++) {
for (xx=x開始点; xx<x開始点+3 && xx<=$map.Width; xx++) {
みたいに書き換えます。

ベクトルは難しい~↓

マップを複数まとめて処理するのは、後々の汎用性が悪くなるので止めておこうと思います。ご意見ありがとうございました♪

返信