玉の発射
投稿者 : Coco(YahooBB218143150160.bbtec.net)
- 2003/12/14(Sun) 12:14
No.4938
|
|
|
|
|
4938.lzh
アクションRPG作ってます。 「スペースキーを押すと玉を発射する。」 ということは出来ました。しかし、 「その玉が一定の距離を進む、あるいは岩や壁に当たると玉が消える」 ということをしようとすると、 どうしても動作が重くなってしまいます。 どうすれば軽くなるでしょうか?
問題のプログラムは添付します。 ちなみに玉のクラスはA_Ballです。
|
Re: 玉の発射
投稿者 : ミウタカ(p13195-adsao02sappo2-acca.hokkaido.ocn.ne.jp)
- 2003/12/16(Tue) 15:48
No.4949
|
|
|
|
僕のパソコンでは、壁にあたって玉が消える処理は重くなりません。 オブジェクトが多いのが重くなる原因じゃないのでしょうか?
|
Re: 玉の発射
投稿者 : 百五十(p2163-ipbf16niho.hiroshima.ocn.ne.jp)
- 2003/12/16(Tue) 20:31
No.4951
|
|
|
|
見当違いでしたらすいません。 A ballは毎フレームfor文で配列を全部確認しているから重くなってるんだと思います。
私のやり方としてはマップの画像ファイルの中で 移動可能なマップと不可のマップを選り分けて配置しておいて、 常に存在しているオブジェクト(フレームマネージャとか)の中に、 function getPt(xx,yy) { var r; r=0 ; if ($map.getAt(xx,yy)>=$pat_Block+0 && $map.getAt(xx,yy)<=$pat_Block+0+50) r=1; return r; }
という関数を作ってます。 ちなみに上では50番までが移動可、不可の区切りとなってます。
if ( $○○.getPt(x+vx,y+vy)!=1 ) それを背景確認のいるときにこんな感じで呼び出して1か0で判断させてます。 ○○は関数のあるオブジェクト名です。
とにかく毎フレーム呼ばれるモノはシンプルに作った方が軽くできると思います。
|
Re: 玉の発射
投稿者 : りょうた(EAOcf-294p121.ppp15.odn.ne.jp)
- 2003/12/16(Tue) 20:47
No.4952
|
|
|
|
ページがロードされたときにフレームマネージャを使って、 2次元配列(Matrixクラス)にマップ座標(mx,my)は移動可能かどうかを真偽値(1/0)でいれておくのも可能だと思います。
これはマップの幅*高さ*マップチップの数だけループをするので、ちょっと時間がかかるため、 読み込んだ後は"Now Loading"などの表示をしないといけませんが。
こんな方法もあるということで。
|
Re: 玉の発射
投稿者 : Coco(YahooBB218143150160.bbtec.net)
- 2003/12/18(Thu) 15:54
No.4961
|
|
|
|
みなさんありがとうございます。 百五十の方法は非常に参考になりましたが マップをまた作り直すのが面倒なので 今回はりょうたさんの2次元配列でやってみたいと思います。
配列にマップ移動可能についての真偽値を入れることは一応できました。 しかし、この配列を使うには自機(あるいは玉)のマップパターン上の座標を知る必要があると思うのですが どうすればその座標を知ることができるのでしょうか?
|
Re: 玉の発射
投稿者 : りょうた(EAOcf-221p133.ppp15.odn.ne.jp)
- 2003/12/19(Fri) 01:26
No.4964
|
|
|
|
マップパターン上の座標ですが、 これは、ワールド座標のx,yを マップチップの幅で割ることで求められます。
trunc(x/$map.pwidth) trunc(y/$map.pheight)
で上手くいくはずです。
($map.pwidth,$map.pheightでよかったかなぁ?上手くいかなければ16とか32とか数値に変えてください。)
|
|