弾の形成の補完?

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Ma

弾の形成の補完?

#1

投稿記事 by Ma » 16年前

過去スレあったらすみません><

東方のゲームをやったことがない方がいるとは思うのですが、
ある細長い弾の一部にあたるとその部分だけ消えて、
残りの部分がまた形を修正したかのように、弾になり続けるような効果を出しているのですが、
この実装は簡単でしょうか?

たとえば、100px の長さの弾に 50px 地点ほどで長さ20pxの自機があたったとすると、
40px と 40px の弾に分裂したかと思ったら、長さが約半減した2つの弾になるのです。

これは、ただたんに古い弾を消して、長さが元より短い新しい弾を二つ作り、位置を合わせただけなのでしょうか?

だとすると、自由自在の弾の長さを指定して、グラフィックが自動的にその形に合うように変形するわけですが、
これは、ある方向だけに画像を拡大しただけなのでしょうか?
だとしたら、DXライブラリのどんな関数で実現できるでしょうか?
(以前あった気がしたのですが忘れてしまったので…)

SooA

Re:弾の形成の補完?

#2

投稿記事 by SooA » 16年前

実物を見てみないと何とも言えませんが、
(東方をプレイしたことがありません。)
小さい弾を連ねて描画しているのではないでしょうか?

画像は適当に描いた物ですが、
アルファチャンネルを利用し、
外側に透明度が高くなっていくような
丸や菱形っぽい弾をずらしながら描画すれば
一本のレーザーに見せることも可能だと思いますよ。

Ma

Re:弾の形成の補完?

#3

投稿記事 by Ma » 16年前

画像を追加します。
こんな感じです。
(著作権は、上海アリス幻樂団 にあります。)


>SooA
>小さい弾を連ねて描画しているのではないでしょうか?
お返事ありがとうございます、ですが
画像から見ても分かるように、恐らく違うかと思います。

やはり、弾をふたつにして画像の拡大率と位置を調節して描画したかのように見えるのですけどね。
皆さんにもそう見えるでしょうか?

===以下は、もしそうだとしたら、という話です。===

そうだとすると、DXライブラリで元画像のX軸のみまたはY軸のみに拡大して使用する方法も教えていただけると助かります。<(_ _)>


一応自分で調べた限りでは、
DrawModiGraph において、4つの座標をそれぞれ求めて描画する方法。
かなーと思ったりもしたのですが、計算量が多くなりそうなので、
先にグラフィックを作っておいてから
DrawRotaGraph2
で、中心座標だけで描画したほうが早いかなとも思ってます。

しかし後者は、一時的にグラフィックを作る事で、セーブ機能つきのゲーム(今製作中の)としては、
グラフィックまでも保存しないといけないので、避けたいところでもあります。

御津凪

Re:弾の形成の補完?

#4

投稿記事 by 御津凪 » 16年前

分かれたときの短いレーザーと、そうでないレーザーの端の暗くなっていく色の長さの違いから察するに、
このレーザーは、単に丸い弾を引き伸ばしているものだと思います。
(Ma さんの考えに近いと思います)

しかし、描画システムの変わっている風神録以降は、 SooA さんに近く、
外側につれて透明度と一緒に色も暗くなっている細長い弾を加算合成して並べたものになっていると思います。
(かすりの音で判断)


どちらにおいても、DXライブラリでは重い処理に当たるので、
実際に動かしてみて、もしダメだったら諦める(出す量を控える)か
別のゲームライブラリに乗り換える必要があります。
(描画が重くなる要因はDXライブラリが DirectDraw を使用している点にありますので)

yu

Re:弾の形成の補完?

#5

投稿記事 by yu » 16年前

以前、自分もここの掲示板を利用し、同じ質問をしたなぁ・・・

http://dixq.net/board/log/bbslog_83.html#26494


でも、このときは米粒弾を引き延ばしてレーザーにしているとは知りませんでした。


そして、この後に引き延ばしていると気がついて
レーザー一つに対して消すことが可能な座標を長さに合った分だけ作ってやって、
真ん中の方に当たっていたら、元のレーザーを消してレーザーを2つ登録。(1つ登録だけでいいかもしれません
端に当たっていたらレーザーの長さを短くする。
短くなりすぎたら消す。

という感じに実装したらうまくいきました。
それほど処理も重くはなりませんでした。

今考えると座標を用意するのではなくて、当たったところの座標を元に、
レーザーを分裂、または短くしたほうがよいかと思います。


後、レーザーに太さと長さを持たせるために
DrawModiGraphで描画しないときついかと思われます。

Ma

Re:弾の形成の補完?

#6

投稿記事 by Ma » 16年前

>御津凪
>yu

返信ありがとうございます。
とりあえず、yuさんがおっしゃっている方法がやはり一番DXライブラリに合いそうなので、
この方法を試してみることにします。
ありがとうございました。

閉鎖

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