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

 動き(移動)


ゲームにおいて、動き(移動)は、もっとも重要です。ということは、動きに関する変数や関数を知っていればいろいろな動き方を表現することができます。
動きと言ってもたんに、上や下へではなく、あるものを追いかけたり、くねくね動かしたりなど、さまざまな動きがあります。
ここでは、まず、オブジェクトを動かすための変数と関数を、記述しておきたいと思います。

 動かす前に知っておきたい変数


 x    Xの座標を示します。

 y    Yの座標を示します。
例: x = 400
   y = 304


 xprevious  直前ステップのx座標を示します。

 yprevious  直前ステップのy座標を示します。
例: xprevious = x2 // 直前ステップのx座標をx2とする
   yprevious = y2 // 直前ステップのy座標をy2とする
   if(collision_line(x,y,x2,y2,block,true,true) == true){ // もし、(x,y)と(x2,y2)の2点の線分の間にblockがある場合が真のとき
   instance_destroy() // このオブジェクトを消す
   }


 xstart  インスタンスが生成した時の x座標を示します。

 ystart  インスタンスが生成した時の y座標を示します。
例: xstart = x3 // 生成時のx座標を変数x3とする
   ystart = y3 // 生成時のy座標を変数y3とする
   direction = point_direction(x,y,x3,y3) // directionを(x,y)と(x3,y3)までの角度にする
   speed = 4 // スピードは4


 vspeed 垂直方向の速度を示します。(+だと下へ、-だと上へ動かすことになります。)
例: vspeed = -10 // 上に10のスピードで動かす。  


 hspeed 平行方向の速度を示します。(+だと右へ、-だと左へ動かすことになります。)
例: hspeed = -10 // 左に10のスピードで動かす。


 direction 現在の進行方向(角度)を示します。(0〜360の値を表記してください。)
         使用するときには大体、speedとセットで使います。  
例: direction = 45 // 角度は45
   speed = 10 // スピードは10


 speed 現在の速度を示します。速度はステップごとに進むピクセル数です。
例: speed = 10 // スピードは10 (1ステップごとに10ピクセル進みます。)


 friction 現在の摩擦を示します。摩擦はステップごとに減速する量です。
例: friction = 0.3 // 摩擦は0.3


 gravity 現在の加速度を示します。これで重力があるように見立てることができます。加速度はステップごとに加速する量です。
        使用する際は、gravity_directionとセットで使用します。
        アイワナでいう、playerにもこの加速度が設定してあります。
        そのほかにも、よくアイワナの耐久の上へ噴射するりんごにもこのような設定がされています。
例: gravity = 0.3 // 加速度は0.3
   gravity_direction = 270 // 加速度の角度は270度


 gravity_direction 現在の加速度の方向を示します。(directionと同じで、270度で下方向になります。)
例: gravity = 0.3 // 加速度は0.3
   gravity_direction = 270 // 加速度の角度は270度

 役に立つ動きに関する関数




 motion_set(方向,速度) インスタンスに指定した速度と方向を設定します。
例: motion_set(90,10) // 10の速度で90度に進みます。


 motion_add(方向,速度) インスタンスの現在の動きに指定した速度と方向を加えます。(ベクトルの加算のようになります)

例: 適当に作ったオブジェクト(ここでは名前はtest00,画像はりんごとします。)のcreateイベントにExecute codeを入れ、
 motion_set(90,2) //速度は2、方向は90度
 alarm[0] = 40

そしたら、alarmイベントでalarm[0]を選択し、Execute codeを入を入れます。
その中に、

motion_add(180,5)

と、記述します。
そしたら適当にルームに配置し、実行してみてください。

こうやって、いろいろな動きの表現のしかたができます。


place_free(x,y) インスタンスが(x,y)に配置されたときに、ソリッドオブジェクトに衝突せずに配置されるかどうかを返します。
例:
x_free = random(800) //  変数x_freeに0から800の数字をランダムに入れる
y_free = random(608) //  変数y_freeに0から608の数字をランダムに入れる
if(place_free(x_free,y_free) == true){ //  もし、(x_free,y_free)に配置されたときに、ソリッドオブジェクトに衝突せずに配置されるかが真の場合
instance_create(x_free,y_free,object_00) // (x_free,y_free)にobject_00を生成する
}

 place_meeting(x,y,obj) インスタンスが(x,y)に配置されたとき、(obj)のインスタンスに衝突するかどうか返します。 objには、衝突するか確認したいオブジェクト名を指定します。 また、objには、インスタンスIDや、特別なオブジェクトのallとotherを使用することが出来ます。

例 : 
Createイベントに入れます↓
image_alpha = 0 //画像の透過度0

STEPイベントに入れます↓

if(place_meeting(x,y,player) == true && image_alpha < 1 && image_alpha >= 0)
{
image_alpha += 0.05
}
if(place_meeting(x,y,player) == false && image_alpha <= 1 && image_alpha > 0)
{
image_alpha -= 0.05
}

こうすることによってこのオブジェクトにplayerが当たるとゆっくり透けていきます。
playerが離れるとゆっくりもとの透過度に戻ります。

 move_towards_point(x,y,sp) (x,y)の位置にspの速度で移動させます。
例 : move_towards_point(player.x,player.y,5) //プレイヤーのx,y座標に5のスピードで移動させます。

 move_bounce_solid(adv) ソリッドインスタンスに対して弾ませます。 adv は、高度な弾みにするかどうかを指定します。(true or false)これは斜めの壁の場合に対応します。
例 : 
Createイベントに入れます。

kakudo = random(360) //変数kakudoは0から360までのランダムな数字
if(kakudo = 0 || kakudo = 90 || kakudo = 180 || kakudo = 270){ //もし変数kakudoが0または90または180または270の場合
kakudo += choose(1,-1) //変数kakudoに1もしくは、-1を加える
}
direction = kakudo 角度は変数kakudoになる

コリジョンイベントに入れます(ここではblock)↓
move_bounce_solid(false) //blockに当たったとき弾ませる。(高度にはしない)

 move_bounce_all(adv) 全てのインスタンスに対して弾ませます。

 position_empty(x,y) (x,y)で指定する位置にインスタンスが無いかどうかを返します。
例: if(position_empty(x,y) == true){
instance_create(x,y,spikeUp)
}

 position_meeting(x,y,obj) (x,y)で指定する位置に(obj)のインスタンスがあるかどうか返します。 objには、オブジェクト名、インスタンスID、またはキーワード(self, other, all)を使用することが出来ます。
例:if(position_meeting(x,y,spikeUp) == false){
instance_create(x,y,spikeUp)
}

Wiki内検索

Menu

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




GMの基本的な使い方

GML概要編

GML編---一般的な計算

GML編---ゲーム動作

GML編---ユーザー入力

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

GML編---サウンド

GML編---etc...

GML編---リファレンス

アイワナ製作編

基本応用編

雰囲気関係編

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

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

メンバー募集!