hinekure.net が http://hspdev-wiki.net/ から自動クローリングした結果を表示しています。画像やリソースなどのリンクが切れています。予めご了承ください。 |
1ページだけで開発を続けるのは困難でしょう。
ということで、スクリプト部分についての話題はこちらで。
長いスクリプトをアップする場合は、ファイルにしてアップするようにしてください。
長いスクリプトを表示させる場合はスクリプトを直接書き込むのではなく、ファイルをアップして次のように記述してください。
&ref(pic/hsp3.png);~ #region(スクリプト) #code(スクリプト01.as) #endregion
のように記述することで、ダウンロードもスクリプトの表示も同時に出来ます。
スクリプトを直接書き込むとTabがスペースに置き換わってしまったり、
ページの編集がしにくくなったりなどの弊害が発生します。
直接実行できないものや短い説明用のサンプルなど以外はできるだけファイルを使ったほうがいいでしょう。
入力装置
stickでもボタン数は足りますが、getkeyの方が押しやすいキー選べるからgetkeyの方がいいんでしょうか。
つまり敵キャラクターの移動方法についてです。
パタパタ大王さん作成の当たり判定のスクリプトです。
+ | 当たり判定 |
File not found: "当たり判定.hsp" at page "横スクロール型ゲーム"; |
一行だとちょっと見にくいので…
変数の内容 x - 座標 vx - 速度 chipw - キャラクターXサイズ con - 当たり判定の結果
+ | 当たり判定のメイン部分 |
|
+ | 軽い解説 |
当たり判定のルーチンについて経緯と解説を加えます。が、2つの疑問があると他のページで書いたわたくしが解説するということを改めて確認してください。教えることを通じてわたくしも教わりたいと思っています。 右への判定の一行を3つに分けていますが、まずはスクリプトに載っているものを眺めてください。 この一行目がx方向についての条件式で、二行目がy方向についての条件式、三行目が当たっている場合の処理です。 ; : 幅 : if x.0+vx.0+chipw.0 >= x(cnt+1)+vx(cnt+1) : if x.0+vx.0+chipw.0-vx.0+vx(cnt+1) <= x(cnt+1)+vx(cnt+1) : if y.0+vy.0+chiph.0 > y(cnt+1)+vy(cnt+1) : if y.0+vy.0 < y(cnt+1)+vy(cnt+1)+chiph(cnt+1) : x.0+= x(cnt+1)+vx(cnt+1)-(x.0+vx.0+chipw.0) : x.0+=vx.0 : vx.0=0 : con(0)+=(cnt+1) : if flag&4 : else : flag+=4 x.0 x.0+chipw.0 x(cnt+1) x(cnt+1)+chipw(cnt+1) 速度vxを省いた上の一行目を示します。 if x.0+chipw.0 >= x(cnt+1) : if x.0+chipw.0 <= x(cnt+1) : な、なんと、これではx.0+chipw.0とx(cnt+1)が同じ場合しか当たりと判定されません。ひとつ目の条件式はプレイヤーの右端が対象の左端を越えるということですね。しかしこれだけだと、対象の遥か右側にいても当たりと判定されてしまうので、幅を決めようということになります。それがふたつ目の条件式に加わるとこうなります。 if x.0+chipw.0 >= x(cnt+1) : if x.0+chipw.0 <= x(cnt+1)+幅 : これなら幅より右側にいて当たりと判定されることはありません。そして幅を具体的にどういう値にするのかということに考えが移りますが、その前にここで速度vxをまた加えてみたいと思います。この速度vxが持つ意味は、メインルーチンで対象(敵・マップチップ)の速度操作、プレイヤーの速度操作、そしてその後に当たり判定がされて、速度を位置に加算するという関係上、位置と加算して次の新たな位置を示すものです。もし当たっている判定ならその速度vxを0にすることで次の新たな位置に移さないという処理がされているわけです。位置と速度は対にして考えて良いです。 if x.0+vx.0+chipw.0 >= x(cnt+1)+vx(cnt+1) : if x.0+vx.0+chipw.0 <= x(cnt+1)+vx(cnt+1)+幅 : 位置と速度を対にしました。そして幅ですね。因みにこの一行は完成形と幅以外同じです。 if x.0+vx.0+chipw.0 >= x(cnt+1)+vx(cnt+1) : if x.0+vx.0+chipw.0 <= x(cnt+1)+vx(cnt+1)+vx.0 : その幅である+vx.0を左辺に移項させたのがこうです。 if x.0+vx.0+chipw.0 >= x(cnt+1)+vx(cnt+1) : if x.0+vx.0+chipw.0-vx.0 <= x(cnt+1)+vx(cnt+1) : これで対象が止まっていればどんな速さでも長さでも判定できます。つまり動いている対象にはうまく判定できなかったということですw x.0+= x(cnt+1)+vx(cnt+1)-(x.0+vx.0+chipw.0) : x.0+=vx.0 : vx.0=0 : con(0)+=(cnt+1) : if flag&4 : else : flag+=4 次に三行目ですが、プレイヤーの右端と対象の左端の、次の新たな位置同士の差をプレイヤーの位置に加算しています。これでプレイヤーの右端と対象の左端が接するはずです。 |
+ | 当たり判定改良版 |
*atari ;当たり判定 flag=0 : dim con,4 repeat num-1 ; : 幅 : if x.0+vx.0+chipw.0 >= x(cnt+1)+vx(cnt+1) : if x.0+vx.0+chipw.0-vx.0+vx(cnt+1) <= x(cnt+1)+vx(cnt+1) : if y.0+vy.0+chiph.0 > y(cnt+1)+vy(cnt+1) : if y.0+vy.0 < y(cnt+1)+vy(cnt+1)+chiph(cnt+1) : vx.0= x(cnt+1)+vx(cnt+1)-(x.0+vx.0+chipw.0)+vx.0 : con(0)+=(cnt+1) : if flag&4 : else : flag+=4 if x.0+vx.0 <= x(cnt+1)+vx(cnt+1)+chipw(cnt+1) : if x.0+vx.0-vx.0+vx(cnt+1) >= x(cnt+1)+vx(cnt+1)+chipw(cnt+1) : if y.0+vy.0+chiph.0 > y(cnt+1)+vy(cnt+1) : if y.0+vy.0 < y(cnt+1)+vy(cnt+1)+chiph(cnt+1) : vx.0= x(cnt+1)+vx(cnt+1)+chipw(cnt+1)-(x.0+vx.0)+vx.0 : con(1)+=(cnt+1) : if flag&1 : else : flag+=1 if y.0+vy.0+chiph.0 >= y(cnt+1)+vy(cnt+1) : if y.0+vy.0+chiph.0-vy.0+vy(cnt+1) <= y(cnt+1)+vy(cnt+1) : if x.0+vx.0+chipw.0 > x(cnt+1)+vx(cnt+1) : if x.0+vx.0 < x(cnt+1)+vx(cnt+1)+chipw(cnt+1) : vy.0= y(cnt+1)+vy(cnt+1)-(y.0+vy.0+chiph.0)+vy.0 : con(2)+=(cnt+1) : if flag&8 : else : flag+=8 if y.0+vy.0 <= y(cnt+1)+vy(cnt+1)+chiph(cnt+1) : if y.0+vy.0-vy.0+vy(cnt+1) >= y(cnt+1)+vy(cnt+1)+chiph(cnt+1) : if x.0+vx.0+chipw.0 > x(cnt+1)+vx(cnt+1) : if x.0+vx.0 < x(cnt+1)+vx(cnt+1)+chipw(cnt+1) : vy.0= y(cnt+1)+vy(cnt+1)+chiph(cnt+1)-(y.0+vy.0)+vy.0 : con(3)+=(cnt+1) : if flag&2 : else : flag+=2 loop return 変えたところは判定の後の処理部分。速度しか操作していません。わたくしにはもう理想形です。 |
矩形同士限定。
上のパタパタ大王さんのスクリプトをもとに判定部分を別の方法にしたもの。
(差し替え。一般的にはこんな感じで行うと思う。 --naznyark 2006-02-14 (火) 01:33:14)
対応する基礎フォルダにいれて実行してください。 -- naznyark? 2006-03-23 (木) 02:54:44
+ | スクリプト |
mca001.as
|
背景を何層かに分けて奥行きを表現するとちょっと重くなるようです。
解決案
タイトル画面やゲーム開始前のセレクト画面(こんな呼び方であってるのかな?)について。
HSP3 用(ベータ版)
わざわざ作らなくてもその辺にありますが・・・
横スクロール型ゲーム専用でなく汎用品です。
まだまだ機能は少ないですが、実用上の最低限(未満)の機能はあります。 --naznyark? 2006-02-15 (水) 02:16:05
マップデータ仕様を決定。ロード機能追加。 --naznyark? 2006-02-16 (木) 01:36:10
他にも項目あったらどうぞ。
ジャンプアクションゲームの参考になりそうな資料。
小ワザ/アクション/基本動作
小ワザ/アクションゲーム/ジャンプアクションゲーム
衝突判定