ライン
投稿者 : 武良(EATcf-702p158.ppp15.odn.ne.jp)
- 2004/09/22(Wed) 01:52
No.7217
|
|
|
|
|
7217.zip
自機・・・画面中心
防衛・・・自機中心回転 >カーソル右・・・時計回り >カーソル左・・・反時計回り >Zキー・・・レーザー発射 >SPACE・・・新敵出現
敵・・・自機に接近
動きの確認のために上記のようなプログラムを作りました。しかし、敵がレーザーに当たると死ぬという処理ができません。crashtoline を使おうとしたのですが、???でした。 良い解決策はないでしょうか。
|
crashToLineメソッド
投稿者 : nuntora(210-20-67-194.rev.home.ne.jp)
- 2004/09/22(Wed) 03:54
No.7218
|
|
|
|
添付されたプログラムを拝見させていただきました。操作方法も書いていただきプログラムを容易に理解することができました。
crashToLineを使用して敵がレーザーに当たると消滅するような処理を行わせたいとの事ですが、プログラム中にはcrashToLineの記述がありませんでしたので、何が「???」なのかがわかりませんでした。 どのようなことをされてどのような結果が得られたのか、などを書いていただけますと非常に助かります。こちらで試してみたところtekiオブジェクトをcrashToLineで消滅させることができます。
質問format http://tonyu.kake.info.waseda.ac.jp/api/wiki.cgi?page=%bc%c1%cc%e4%a5%d5%a5%a9%a1%bc%a5%de%a5%c3%a5%c8
このまま答えを書いてしまいますと武良さんのためにもならないと思われ、またみなさんが「???」と書けばこちらでプログラムを作成してくれるという風潮になりますとこちらと致しましても対処が困難となります。 ご理解とご協力のほどをお願いいたします。
crashToLineにつきましてはHELPや検索を参考にしてみてください。
HELP http://tonyu.kake.info.waseda.ac.jp/api/wiki.cgi?page=PlainChar%2ecrashToLine
また、推薦記事を載せておきました。併せて参考にして頂けますと幸いです。
のちに「浮動小数点のオーバーフロー」というエラーが出てくると思いますが、記事5142を参考にしてみて下さい。
|
Re: ライン
投稿者 : 武良(EATcf-702p158.ppp15.odn.ne.jp)
- 2004/09/22(Wed) 08:06
No.7220
|
|
|
|
7220.zip
はじめ $laser内に crashtoline(()) $teki.die(); と置いたのですが上手くいかず、消したものをアップしてしまいました。失礼しました。
>こちらでプログラムを作成してくれるという風潮になります
確かにそうです。軽率でした。すみません。
現在 $teki内に crashtoline(()) $teki.die(); を置いたのですが上手くいきません。new appear で出現したオブジェクトの変数の取得が問題なのでしょうか。
|
Re: ライン
投稿者 : N@N(actkyo121224.adsl.ppp.infoweb.ne.jp)
- 2004/09/22(Wed) 14:00
No.7221
|
|
|
|
変数$laserで取得できるオブジェクトは1つしかありません。つまり、同じlaserクラスでも、オブジェクトには作られるたびに異なる変数が割り当てられます。(たぶん、そうだったと思います。)
やはり、laserのほうで判定したほうがよさそうです。 teki内のCrashToLine以下を消し、laserに、 for (t in $chars){ if (t is teki && crashToLine(x,y,x+lsr*cos(i),y+lsr*sin(i),20,t.x,t.y)) t.die(); } を入れると解決できました。
|
Re: ライン
投稿者 : 武良(EATcf-639p94.ppp15.odn.ne.jp)
- 2004/09/22(Wed) 14:06
No.7222
|
|
|
|
7222.zip
自己解決できたのですが、ちゃんと理解はできてません。 添付しますので、そんなもんだよとか修正点とか、解説があればお願いします。
Xキーを押しながらだと回転速度が上がります。
|
Re: ライン
投稿者 : N@N(actkyo055235.adsl.ppp.infoweb.ne.jp)
- 2004/09/23(Thu) 00:39
No.7227
|
|
|
|
7227.lzh
訂正:CrashToLine以下ではなく、それを含む判定文でした。お詫びして訂正いたします。
なるほど。tekiのほうでlaserオブジェクトを探しているのですね。 laserでtekiを探して判定する方をアップしておきます。参考になればと思います。
|
Re: ライン
投稿者 : 武良(EATcf-639p94.ppp15.odn.ne.jp)
- 2004/09/23(Thu) 02:53
No.7228
|
|
|
|
返答ありがとうございます。 N@Nさんのようにlaserで判定した方がいいですね。tekiで判定するとscalexで拡大した部分は当たり判定になりませんでした。
|
for〜in文
投稿者 : nuntora(210-20-67-194.rev.home.ne.jp)
- 2004/09/23(Thu) 03:23
No.7229
|
|
|
|
ちゃんと理解できていないということで、具体的にはどの辺が理解できなかったのかはわかりませんが、返信内容から推察致しますところfor〜in文の役割であろうかと思われます。
推薦記事も載せておきますが、大意はN@Nさんが解説された通りです。
今回の場合、guardオブジェクトからlaserオブジェクトを発生させ、tekiオブジェクトでlaserオブジェクトに当たったのか判定させているようですが、これだけの内容でありましたら、jikiクラスでdrawlineを書かせてtekiに当たったのかどうか判定させても同じような結果を得ることができます。しかし、この場合発生するすべてのdrawLineをJikiクラスで管理しなければなりませんので少し高級になります。 または、jikiからlaserオブジェクトを発生させ、角度変数iを渡す方法も考えられます。laserがDxCharですので、角度のところにiを渡せばlaserクラスが角度を直接受け取ることができます。
|
Re: ライン
投稿者 : 武良(EATcf-639p94.ppp15.odn.ne.jp)
- 2004/09/23(Thu) 04:17
No.7230
|
|
|
|
No.7228記事訂正〜>当たり判定はCrashToLineの幅の違いでした。 nuntoraさま、有り難うございます。指摘のとおりfor〜in文の役割がわかってませんでした。いろいろ試してみます。
|
|