アイワナ製作・Gamemakerを解説するwikiです。

針を止めてみよう

※エンジンによって針の設定などが異なります、
今回のエンジンはyuuutueditionです、違うエンジンの場合は注意して書いてください

凝っているアイワナをやっていると、飛んできた針が止まったりすることがあります、
針を止めると罠の幅も広がったり、色々と便利なものです。
今回は、飛ぶ針を止める処理を書いてみましょう!

まずは飛ぶ針の設定を見てみましょう、

Createコード:
depth=1000002
これは針をタイルの裏に隠す処理です、今回は気にしないでいいと思います、

stepコード:
if(hspeed=0&&vspeed=0&&freetrigger.triggered=trg){
hspeed=h;
vspeed=v;
}
以下省略
これが、今回弄るコードです、

針の止め方ですが、今回はalarmイベントを使って止めてみたいと思います。
まず、飛んだ瞬間にアラームを発動させるようにします、

if(hspeed=0&&vspeed=0&&freetrigger.triggered=trg){
hspeed=h;
vspeed=v;
alarm[0]=time;
}
こう書くとalarm[0]が変数timeの分動きます
alarm[0]のコードは

speed=0;

speedという変数を0にするだけでhspeedもvspeedも0に出来ます
これで止まる処理が書けました・・・と思いきや
実はこれでは針が止まらないんです
さきほど言ったようにhspeedもvspeedも0になると今度は、
Createイベントで針の動かす設定が発動するからです。

if(hspeed=0&&vspeed=0&&freetrigger.triggered=trg){
hspeed=h;
vspeed=v;
alarm[0]=time;
}

ということで、針を飛ばす処理を一回しか行わないようにしましょう

if(flag=0&&hspeed=0&&vspeed=0&&freetrigger.triggered=trg){
hspeed=h;
vspeed=v;
alarm[0]=time;
flag=1;
}

こうすると、flag==0の時のみ処理が行われ、
その処理内でflag=1にしています。

「flagなんて変数使ってないよー」
と思うかもしれませんが、GameMakerでは未定義の変数を0として扱うようになってるんです
ゲームの詳しい設定のErrorsのTreat uninitialized variables as value 0にチェックが入ってるはずです

timeという変数も定義していないと0になりますね
それは恐らく止めないという設定でしょうが、多分バグが有ると思います。
timeを設定してなかったらアラームを使わないようにしましょう、

if(flag=0&&hspeed=0&&vspeed=0&&freetrigger.triggered=trg){
hspeed=h;
vspeed=v;
if(time!=0){
alarm[0]=time;
}
flag=1;
}

こうすれば針が止まる処理が完成です!
バグ等ありましたらコメントでご報告お願いします。

おまけ:場所を指定して針を止める

色んなトリガーオブジェクトを作っていると必要になるかもしれないので参考に

Create:
depth=1000002;

Step:
if(freetrigger.triggered=trg&&x=xstart&&y=ystart&&speed=0){
hspeed=h;
vspeed=v;
}
if(x=stopx&&y=stopy&&speed!=0){
speed=0;
}

stopxとstopyに止まる位置を指定すれば止まります

Wiki内検索

Menu

アイワナ製作@基本・応用wiki




GMの基本的な使い方

GML概要編

GML編---一般的な計算

GML編---ゲーム動作

GML編---ユーザー入力

GML編---グラフィックス

GML編---サウンド

GML編---etc...

GML編---リファレンス

アイワナ製作編

基本応用編

雰囲気関係編

※背景に色がついているものは工事中のページです。
【メニュー編集】

メンバーのみ編集できます

メンバー募集!