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