幻想森林

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
123
返回列表 发新帖
楼主: xyz123

[下载]Shooter Maker 95(STG)(シューティングツクール95)+特別講

[复制链接]

29

主题

108

帖子

1485

积分

⑥精研

积分
1485
 楼主| 发表于 2005-1-20 08:50:36 | 显示全部楼层
実験03:速度の法則は?速度。これも今までなんとなくの設定で済ましてきたと思います。
経験上「何かおかしいなぁ」。と疑問を持った人は多いはず。でも「何がおかしいのか」はよくわかりませんでした。
第3回実験こーなーでは速度を徹底的に検証します。
 
今回は図も多いですが計算がかなり複雑です。自信のある人は電卓を片手に。計算式がわからなくても話の流れはわかると思いますので、数学が苦手でもがんばってついてきてください。
 
<SMALL>(注)一部ツクールのバージョンが古いまま実験を行っているものもありますが、最新のバージョンでも同じデータが取れることを確認済みです。</SMALL>
 
まずは仕様の確認から

<SMALL>マス目、イベントは共に32x32(以下全て同じ)。速度は一番左が0で、1つ右に行くごとに5ずつ増加。
上の図で左から9つ目に位置するイベントが速度40。サイズの関係で見にくいのは申し訳ないが、ちょうど1マス分だけ上に移動しているのがわかるだろうか。速度50のイベントはちょうどその2倍、2マス進んでいる</SMALL>
付属ヘルプの「数値と速度の対応表」によると、速度が40の時1ドットずつ進み、10増える(減る)ごとに2倍(半分)になっていくという。まずはこの仕様について確認を行うことにする。
 
以下のコマンドを組んだイベントを用意する。
SPD
(速度)
0
LPT
0
32
LPE
0
0
STP
0
0
イベントの角度は270度(上向き)。
これらを画面最下部に配置し、異なる数値を設定してグラフを作る。
 
なお今回は1回の表示更新が1フレームにあたるのか、等の時間軸の検証は行わない。今回の実験ではLPT-LPEループ32周を1単位とする<SMALL>(マス目の大きさもあって見やすいから)</SMALL>。
結果は上の図の通り。きれいに指数関数のグラフになっている。
 
速度が40の場合イベントは1ドットずつ進んでいるので、もし完全にマニュアル記載通りの仕様 + 速度の上がり方が一様であるとすると、速度をXとした場合にイベントは1回の表示更新で
 ドット進むことになる。
(もう少しだけわかりやすく言うと、速度の数値を1上げるごとに実際の速さは 2の10分の1乗( = 1.072)倍 になっていきます。10分の5乗はすなわちルート2( = 1.414)です。どうでもいいようですが後々重要になってくるので頭の片隅にでも入れておいてください) 
 
 
なお、最大速度<SMALL>(現在のイベントの速度より最高速度が高い場合に限るが)</SMALL>や加速度を変えてみても結果は同じであった。これは以下最後まで言えることである。
 
何が問題か(1)ところが、イベントの初期設定で速度を決めておいても、それがそのまま採用されない場合がある。  

右図を見てほしい。両方とも速度の設定は一応同じなのだが結果が異なってくる。
右のイベントは上で示したのと同じ組み方であるのに対して、左のイベントは最初から速度を設定しておき、プログラムの最初の1行を抜いてある。
その結果、ステージごとの設定内「敵の移動速度」設定による補正が左側のイベントにかかるのである。
 
そこで速度40のイベントを用いて、移動速度の設定によってどれほど違ってくるのかを調べることにした。

 
移動速度設定
0
1
2
3
4
5
6
7
8
9
10
倍率
1.00
1.25
1.4375
1.625
1.875
2.00
2.25
2.75
3.25
3.75
4.00
 
「倍率」というのは、この実験の最初に作ったイベントの速度に対して何倍で動いているか、というものである。つまり移動速度を0にした場合は初期設定の速度に対して全く補正がかかっていない。
 
5の場合は2倍、10の場合は4倍となった。
 
だが倍率について法則性のようなものがあるのかはわからなかった。5で2倍、10で4倍となったことから最初は
2の5分の1乗( = 1.149)倍ずつ増えていくのかと思ったが、見ての通り全然違う。まああまり突き詰めてもたいした益にならないので、これはひとまず置いておくことに。
 
ひとまずまとめ
移動速度の影響を受けるのは初期設定の速度に対してだけである。制御コマンドで速度を代入した場合等は本来の速さに戻る。
 
また影響を受けるのは敵イベントだけである。敵弾には関係ない。
ヘビ型、鎖型はこれらに含まれるが、中ボス、ボスは影響を受けない。
 
 


何が問題か(2)


次に移動速度の設定によって、最初のグラフがどう変わってくるかを調べてみた。
制御コマンドを組みなおす以外は全て最初と同じやり方で、全速度設定を試してみた。
 
 
まず2倍とわかりやすい速度5から見てみよう。
グラフが上側が移動速度0、下側が移動速度5の設定である。
ちょうど2倍になっているのがわかるだろう。
 
<SMALL>(なお左端のイベントだけグラフからずれて見えるが、これはもとの速度が0であるため。これは気にしないでください)</SMALL>
 
 

 
 
ここで他の速度設定のグラフを見せる前に、少し考えていただきたい。
今まで見てきた実験結果で何かおかしいところに気付かれたであろうか?
 
実はここまでの実験の結果において、すでに1つ重大な問題が示されている。
図が小さいためわかりづらいと思うので、最初のグラフを今度は実際のサイズでよくチェックしてほしい。
(数字はそのイベントの速度である)
 

 
 
何がおかしいか気付かれたであろうか?
 
 
 
一見するときれいな指数関数の曲線。
、、、実はこのグラフが「きれいすぎる」というところに問題がある。
 
速度55のイベントをよく見ていただきたい。きっちりと32x32のマスにはまっているが、実はこれではいけないのである。
速度が10増えるごとに2倍、5増えるごとにルート2( = 1.414)倍速くなるので、速度55のイベントは40の 2.828 倍の速さで進むことになる。40イベントはちょうど32ドット進むので、本来なら55のイベントが進む距離は
 32 * 2.828 = 90.496 ドット
1歩譲って小数点を繰り上げたとしても91ドットでなければならない。だが実際にはマス目から1ドットたりともずれてはいない、すなわち 32*3 = 96 ドットも進んでいる。理論値とは5ドットの誤差があるのだ。
 
同様に計算していくと速度65のイベントでは11ドット、速度75のイベントでは22ドットの誤差が生じる。

これらは何を表しているのだろうか。すぐに考えられるのは
 何らかの補正がかかっている
 もともと規則的に速度が上がっているわけではない 
といった理由だ。こちらの制御コマンドの組み方が間違っていない前提で考えると、このどちらかではないだろうかと仮定するのが最も自然である。
しかしこれをそのまま受け入れてしまうと非常に謎な仕様である。値を変えるとどのような動きをするのだろうか。
 
 
そしてこの後実験はを示すことに、、、!
回复 支持 反对

使用道具 举报

29

主题

108

帖子

1485

积分

⑥精研

积分
1485
 楼主| 发表于 2005-1-20 08:52:02 | 显示全部楼层
実験03:速度の法則は?(続)
 
結果 
速度設定1

速度設定2

速度設定3

速度設定4

速度設定6

速度設定7

速度設定8

速度設定9

速度設定10



  
一言いいですか<BIG><BIG><BIG>なんじゃこりゃー。</BIG></BIG></BIG>
  
 
いやいやいやいや、どう解釈したらいいんですかこれは。明らかにありえないグラフになってしまいました。
 
 
もう少し細かくここまで速度を5ずつ増やして測定を行ってきたが、今度は1ずつ増やして考えてみることにした。
速度40-59でのデータを取る。左端が40、1ずつ増えて右端が59である。

速度設定1

速度設定2

速度設定3

速度設定4

速度設定5

速度設定6

速度設定7

速度設定8

速度設定9

速度設定10

速度設定0。

もしやと思い速度設定0の場合もきっちりはかってみた。左端が速度40、画面上にあるもののうち一番右に映っているものが速度77。やはりおかしい。

  
考察ここまでかなり大掛かりに検証を行ってきたが、そのわりにははっきりと言えることは非常に少ない。最初で示した速度と進むドット数の関係式もこうなると再考せざるを得ない。
何がおかしいのかは現時点では指摘しづらいが、特に最後の実験結果から導き出される結論としては、
(初期値での)速度66-69での動作が異常であるということである。
 
先ほどのグラフをもう一度見ていただきたいのだが、速度設定5のものにおいて右端4つほどの数値が異常に高い。右端のイベントは速度59だが、先のページで述べた通り速度設定5では速度の初期値は2倍、つまり+10の補正がかかる。ということは実質速度69である。
設定6-10のグラフを見ても、異常値を示しているのは全て換算値で速度66-69の部分である。このことから、少なくともこの範囲においては明らかに異常であることが認められる。
 
他にも疑問点は多数あるが、きちんと検証していないのでなんともいえない。もう少し補完する必要がありそうだ。
 
 
なぜこのようなことが起こるのか。これについては機会があれば再び考えることにしたい。
回复 支持 反对

使用道具 举报

29

主题

108

帖子

1485

积分

⑥精研

积分
1485
 楼主| 发表于 2005-1-20 08:54:03 | 显示全部楼层
実験04:弾幕系STGを作れ!STGツクールで1画面中に表示できる敵弾出現量は60まで。これに不満を感じた人は私だけではないはず。
今回はこの仕様の限界に挑戦します、、、が後で期待外れだとか言って石投げないでね。
 
なおこの実験で作ったブツはDLコーナーの「弾幕系テスト」です。DLして参照しつつ読んでもらうと良いかもしれません<SMALL>(設定したイベントには●印をつけておきました)</SMALL>。 
 

作戦
まずは第2回実験こーなーを読むべし。以下の仕様を頭に叩き込んでおこう。
 

敵弾
60
通常の敵
最高で100
中ボス
10
ボス
1
自機武器+爆風
自機を含めて80
 
これらのイベントが全て1画面中に出現可能。
 
つまり敵弾だけなら最高で60だが、敵弾+敵+武器+爆発イベントでは240になる<SMALL>(注:プレイヤー自身を含む)</SMALL>。
タネは簡単である。敵イベント、武器+爆発イベントを敵弾の方に回せばよいのだ。 
 
そこで試験的にゲームを作ってみることにした。以下はほんの一例だと思ってほしい。
なおキャラオーバーしないように最初から各イベントを撃ち分けていく方法もあるが、今回は画面中のイベントを数えて危なくなったら切り替える作戦に出た。 
 

テストゲー作成まずステージ設定で敵の出現数を100、移動速度を0にしておく。
移動速度を0にするのは敵弾とエセ敵弾の速さを統一するためである。(第3回実験こーなー参照。<SMALL>ちなみにDLコーナーのテストゲームは移動速度5になっており、敵イベントを使った敵弾だけ他の速度より10少なくしてある</SMALL>)
 
プレイヤーの武器はてきとーに設定。
当り判定はプレイヤーイベント自身には設定せず、別イベントで判定させることにした。色々便利なのもあるが、爆発イベントに敵弾の代わりをさせる以上は普通にやっていたのでは自機に当たらないので細工することにした。
ステージ開始位置に任意の敵イベントを置き<SMALL>(テスト用では参照しやすいようにしてありますが、普通は無色のパターンを設定)</SMALL>、84:シールド1を発生させることにする。シールド1は自機にぴったりくっつくので当たり判定にはもってこいである。
大きさは自機を中心に16x16。耐久力はとりあえず100、物体接触:死亡で、詳細タブ内の「敵弾吸収」チェックをONにする。
耐久力が99以下になるか、変数24が2になった場合(後述)は分岐してダメージ処理に入る。
今回はダメージを受けた際変数24に1を代入し、各イベントと連動させて弾が消えるようにした。
なお、本当なら変数で残機数を管理し、0になったらプレイヤーイベント(これだけ別階層に置いておく)に攻撃するのだが、今回はテスト用なので無敵でいいや。
<SMALL>(*他にも色々やり方はあると思います)</SMALL>
 
テスト用ということで敵は1匹だけにして、中ボス1にこれもてきとーに設定。
凝った攻撃方法にしようかと一瞬思ったが、めんどくさいのでひたすら敵弾1をばらまく設定にした。手抜きだのう。
まあ、でも、このへんは本当にてきとーでいいんで。今は。
 

ここまでは読み飛ばしてもらってもよかったんですが さてここから本題である敵弾の設定に取りかかる。
作戦の確認。敵弾イベントが50ちょっとになったら敵イベントに移行し、さらに敵イベントが90を超えたら爆発イベントで代用することにする。変数25で敵弾イベント、変数26で敵イベントの数を計測<SMALL>(最初は21、22を用いていたが、うまくいかなかった。妙なタイミングで初期化されるようである)</SMALL>。
ちょうど60、100で切り替えないのは余裕を持たせているということで。ちゃんとしたゲームを作る時に100で切り替えていたら敵本体が出現できないんで。
今回は148:敵21を「敵弾1の予備」、124:爆発17を「敵弾1予備の予備」とした。
 
敵弾1の設定。
出現と同時に変数25に+1。この時点で変数の値が53<SMALL>(てきとーに決めました)</SMALL>以上なら敵弾1予備を発生させ変数に-1、即死亡。
画面外に出たときは変数に-1して死亡。最初変数53で判断しようとしたが敵弾に関してはうまくいかなかったので座標で判断することに。
発射された後でも敵弾数を監視して、もしもの時は敵イベントに切り替えられるよう設定するのもいいと思う。
 
敵弾1予備の設定。
出現と同時に変数26に+1、、、あとはだいたい一緒。
なお普通の敵と一緒の階層にいると同じように被弾してマズイので、当たり判定と敵弾関係はスクリーン3と4の間、その他は2と3の間にした。
 
敵弾1予備の予備は爆発イベントのため普通にやってたら自機に当たらないので、IFPコマンドを利用して自機と一定距離になったら変数24に2を代入、後はイベント84の当たり判定で処理させることにした。
本当はこれも変数で数を管理したほうがいいかもしれないが、今回は省略。
 

リストラ106:中ボス爆発、107:ボス爆発はそのままにしておいたら一気に財政をひっ迫するので即死亡に。
どーせ日頃から使ってないし。(使ってる人ごめんなさい)
 
 

結果
これで一応完成になるんですかね。なにはともあれ動かしてみましょう。
 
せっかくなんでデフォルトのままでばら撒いた場合と比べてみましょうか。
 


使用前


使用後
「弾幕系テスト」で敵弾1の移動制御コマンドの最初にLPT-LPEの2行を足すと、「使用前」と同じ設定になります。
 
 
まあまあの迫力は出ますね。今回の設定だと最大で180くらい画面上に弾が出るはずですが。
 
 

考察
あとは製作者次第一つの例ではあるが、「200近くの弾をばら撒く」という行為が可能であることがわかった。
 
しかし無理をしているのは否めない。敵イベントや武器+爆発イベントを横取りしているわけなので、使いどころを考えないと肝心の武器や敵本体が出現できなくなる。派手な攻撃や爆発はかなり厳しくなるだろう。
また多方向弾や炸裂弾<SMALL>(かな?ぼかーんって鳴ったら弾がいっぱい出てくるやつ)</SMALL>などは同時に多量の弾を発生させるため、今回の方法を使うなら弾制限をぎりぎりにしておくと危ない。状況に応じて制限数を変数で管理するのも1つの方法だろう。 
切り替えを行わずに最初から撃ち分けを行う場合は、どの場面に各イベントがどれだけ登場するかを計算しないと痛い目に合う。
 
また、今回は1つの弾に対して3つイベントを費やしたが、これを採用すると普通にやっていてはイベント数が足らなくなるだろう<SMALL>(特に敵イベントなどは日頃から「足りねぇよ」とか思っている製作者もいるのでは)</SMALL>。SEQコマンドや変数を駆使し、いつもに増してイベント数を節約することが要求される。
 
つまりは製作者の腕次第である。がんばってください。石は投げないでください。
[此贴子已经被作者于2005-1-20 8:56:29编辑过]
回复 支持 反对

使用道具 举报

5

主题

9

帖子

1384

积分

禁止发言

积分
1384
发表于 2005-4-28 14:25:26 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

3

主题

27

帖子

742

积分

⑤进阶

海贼王FANS

积分
742
发表于 2005-4-28 18:47:14 | 显示全部楼层
可惜是日文的
等待汉化版本
谁能在动荡中安静下来而慢慢的澄清! 谁能在安定中变动起来而慢慢的趋进?
回复 支持 反对

使用道具 举报

3

主题

8

帖子

1385

积分

⑥精研

积分
1385
发表于 2005-5-1 00:41:02 | 显示全部楼层
不用那么辛苦了,现在已经有格斗游戏制作大师中文版了.
可以到   http://lib.verycd.com/2004/04/10/0000008979.html  下载.
回复 支持 反对

使用道具 举报

29

主题

108

帖子

1485

积分

⑥精研

积分
1485
 楼主| 发表于 2005-5-27 07:28:33 | 显示全部楼层

回复:(khj28)这样的教程有几个人能看的懂啊,想考我...

以下是引用khj28在2005-4-28 14:25:26的发言:
这样的教程有几个人能看的懂啊,想考我日语水平啊,这样不负责的帖子下次少发...


那麼刪了.....
[此贴子已经被作者于2005-5-27 7:34:49编辑过]
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|幻想森林

GMT+8, 2024-5-20 17:09 , Processed in 0.031151 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表