まるちゃん 2019/10/13 20:02

モンスターの配置座標について(今は装飾品を考えてスキルを実装中)

ランダムな対象の修正.txt (ランダムな対象の修正.txt) ダウンロード | VXace スクリプト 【 作成者:まるちゃん 】 | uploader.jp
VXace のデフォルトでは効果範囲をランダムな対象としたときに不具合があります
(僕にとっては不具合で修正するべきものだと思いました)
ランダムな対象のターゲットを作成するときダメージを与える前に
すべての対象を選択してしまうために対象が攻撃で死んでしまうと
ランダムな敵3体に攻撃だったのに2体にしか攻撃しないという事態が起こります
このスクリプトはこれを修正します

今は敵を最大で16体出そうと思ってスクリプトを考えています
モンスターを再配置する.txt (モンスターを再配置する.txt) ダウンロード | VXace スクリプト 【 作成者:まるちゃん 】 | uploader.jp
このスクリプトはデフォルトと同じ座標を取るようになっています
今回はこれを利用して16体の座標をなんとか出力しようと思って考えています
だけど上手くいかなくてどうしようかなぁと思ったので
どうやって出力しているのかまとめようと思いました

VX の敵座標は中心座標を 272 px として敵が5体までのときは
敵と敵との間を 100 px にすることで均等になるように配置しました
敵が6体以上のときは index が 0 のモンスターの X 座標を 50 として
最後の敵の座標を 544 - 50 とすることで均等に分配をしていました

今回は16体を想定しているので2列に分けて作成する予定です
VX の座標を利用して上の列は下の列の間に入れるのでありかなぁ?
でも10体といった偶数になると最後の1体が間に入れる事ができません
下の列を6体として左に詰めて5体、上の列は右に詰めて5体にする
これがすごい面倒だ

VXace ではモンスターの画像の幅を取得することで
モンスターとモンスターの幅が変わります
VX は均等に分けると説明しましたが詳しく言うと
(544 - 50 - 50) / 敵の総数 としたときの数値を間の大きさにしました
VX のほうがわかりやすいのかな?


VXace の敵の配置座標は以前につくったので整理したい
基本幅 = 敵の画像の幅 / 2 + 8
合計幅 = 基本幅 * 2の合計 - 画面の幅
調整幅 = 合計幅 / (モンスターの総数 - 1)

合計幅は 基本幅 * 2の合計 > 画面の幅 のときのみ算出します

index 0 のときのモンスターの X 座標を求めます
調整幅を持つときは index 0 のモンスターの基本幅を X 座標とします
調整幅をもたないとき(基本幅 *2 の合計が画面の幅より小さい時)は
index 0 の X 座標 = index 0 の基本幅 + 合計幅 / 2

index 0 以降のモンスターの X 座標は以下のように算出します
X 座標 = 左隣の X 座標 + (左隣の基本幅 + 自身の基本幅 - 調整幅)


これを利用して2列のモンスター配置を考えると
画面の幅を2列めは 416 (適当に決めた)にして考えれば良さそう?
モンスターの総数は列の総数と考えるべきでしょう
基本幅に 416/544 倍率として考えればいけるかも?
だけど10体といった偶数となったとき列はひし形の形を取ります
下の列の一番右と上の列の一番左が空白となる
でもモンスター画像の幅から算出しているのを考えると少しずらすというのが難しい
それだったら VX のようにモンスターの画像の幅に影響を受けない形がよさそうだ


VX の敵配置の座標
1体 272
2体 222, 322
3体 172, 272, 372
4体 122, 222, 322, 422
5体 72, 172, 272, 372, 472
6体 50, 139, 228, 317, 406, 495
7体 50, 124, 198, 272, 346, 420, 494
8体 50, 114, 178, 242, 306, 370, 434, 498

敵が5体以下のとき
X 座標 = 272 + ( enemy.index * 2 - @enemies.size + 1) * 50
272 は Graphics.width / 2 という意味です。画面の中心座標です

敵が6体以上のとき
X 座標 = 50 + enemy.index * 444 / ( @enemies.size - 1 )
444 は 544 - 50 - 50

敵が10体のときはこうする
上の列:95, 184, 273, 362, 451
下の列:50, 139, 228, 317, 406(, 495)

上の列の X 座標
(50 + 139) / 2 = 94.5
(139 + 228) / 2 = 183.5
(228 + 317) / 2 = 272.5
(317 + 406) / 2 = 361.5
(406 + 495) / 2 = 450.5

多分これが一番やりやすいんじゃないのかなぁ…
でも6体目以降の座標の幅がきれいじゃなくて好きじゃない

数字的な綺麗さを追い求めるのをやめました
座標では小数点を表示しきれないからいい感じにしたかったの
でもそれほど悪くなかったから諦める
モンスター同士の間を以下のように求めました
width = [(Graphics.width / 2 - 50) / (@enemies.size - 1), 50].min
-50 は index 0 の X 座標を 50 と考えているからです
X座標 = Graphics.width / 2 + (index * 2 - @enemies.size + 1) * width
Y座標 = 288 - 32 * (index % (@enemies.size / 8 + 1))

モンスターの最大出現数は1種類に付き26です(アルファベットがつくから)
面倒だから最大出現数を24にしてしまいました

HPゲージはプチレアサイトのやつを使っているのでちょっと変になってます
enemy.screen_y を参照すればいいだけなのでそう難しくありません
意外と面倒そうだ。Sprite で管理をしている

Win + Shift + S キーでスクリーンショットができるみたいだ(Win10)
Alt + Print Screen でツイッターとかで貼り付けすると簡単にできる

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

月別アーカイブ

限定特典から探す

記事を検索