2017-07-08 3 views
0

注:私はGameMaker 1.4ではなく2を使用しています。違いがあるかどうかは分かりませんが、場合によってはそれを指摘しています。image_angleに関連してオブジェクトを動かす方法は?

私はGameMakerゲームで、オブジェクトをimage_angleに関連して上下に移動させる問題があります。なんらかの理由で、実際にはy軸を横切って移動する必要があり、image_angleは完全に無視されます。これは本当に迷惑で、固定されていなければゲーム全体を変えることができます。

マイコードがステップイベントのでは、次のとおり作成イベントの

// Mouse controls. 
image_angle = point_direction(x, y, mouse_x, mouse_y); 

if(keyboard_check(ord('W'))) 
{ 
    y -= playerSpeed; 
} 

if(keyboard_check(ord('S'))) 
{ 
    y += playerSpeed; 
} 

私のコードは次のとおり

globalvar fuelRemaining; 
fuelRemaining = 60; 

playerSpeed = 3; 

答えて

0
image_angle = point_direction(x, y, mouse_x, mouse_y); 
direction = image_angle; 

if(keyboard_check(ord('W'))){ 
    speed = -playerSpeed; 
} 
if(keyboard_check_release(ord('W'))){ 
    speed = 0; 
} 

if(keyboard_check(ord('S'))){ 
    speed = playerSpeed; 
} 
if(keyboard_check_release(ord('S'))){ 
    speed = 0; 
} 
+0

注:私は本当に必要なのはトップラインに注意を払っています... まだ動作しません... – MobyCoding

0

@Gamioコードは(_released代わりになければならないほとんど正しいです_releaseWSの記号を混同しています)。

image_angle = point_direction(x, y, mouse_x, mouse_y); 
direction = image_angle; 

if point_distance(x, y, mouse_x, mouse_y) < spd 
{ 
    speed = 0; 
} 
else 
{ 
    var spd = 0; 

    if keyboard_check(ord("W")) 
     spd += playerSpeed; // If pressed both W and S, then will stop 

    if keyboard_check(ord("S")) 
     spd -= playerSpeed; 

    speed = spd; 

    if keyboard_check_released(ord("W")) or keyboard_check_released(ord("S")) 
     speed = 0; 
} 

場所Step Endイベント(ないStep)内のコード:ここではいくつかの改善点です。

あなたがspeedせずに、直接COORDSを変更したい場合は、それも可能ですが、(あなたがlengthdir_xを使用してxyデルタとlengthdir_y機能の両方を計算し、現在のCOORDSにこれらのデルタを追加する必要があります)もう少し難しいです。

+0

まあ、ここではvar spdを生成するために必要なのかどうか、キーがリリースされているかどうかを確認する理由もわかりません。2 *各ステップ、私はansverで別々に解決しました。プレイヤーが一度に両方のキーを押してから1つだけをリリースした場合(プレイヤーが気付かないうちに頻繁にそのようなシナリオが頻繁に発生することがある場合は、プレイヤーがキーを切り替える場合もあります)、エンド・ステップ・イベントでこのコードを使用する必要があり、それが何かを防ぐ必要があるならば、私は少し問題を特定するべきです。 –

+0

@VojtěchŠvrčekそれは非常に良い解決策ではありません、それはGamioのコードの改善です。 – Dmi7ry

+0

はあまりにも多くのことを考えていました。しかし、うまくいきます。そして、もし彼らがプロジェクトにペーストコードをコピーすれば、もちろんそれは混乱するでしょう。 –

0

コードでimage_angledirectionを設定しますが、yの座標だけを変更してください。もちろん、xの変更は表示されません。

を使用でき

directionspeed変数を内蔵しており、ゲームメーカーは、自動的に任意のオブジェクトを移動する、またはあなたがxy座標にlengthdir_xlengthdir_y機能を適用することができます。

directionspeed例:

//create event 

playerSpeed = 3; 

//step event 

image_angle = point_direction(x, y, mouse_x, mouse_y); 
direction = image_angle; 
speed = 0; //reset speed at start of each step event 
      //now you wont have to check if key has been released to stop object 

if(keyboard_check(ord('W'))) 
{ 
    //distance between player and target 
    distance = point_distance(x, y, mouse_x, mouse_y) 

    if distance < playerSpeed 
    { 
     //with this, object will move only to mouse position, not further 
     speed = distance; 
    } 
    else 
    { 
     speed = playerSpeed; 
    } 
} 
else if(keyboard_check(ord('S'))) 
{ 
    speed = -playerSpeed; 
} 

lengthdir_xlengthdir_y例:

// create event 

playerSpeed = 3; 

// step event 

image_angle = point_direction(x, y, mouse_x, mouse_y); 

if keyboard_check(ord("W")) 
{ 
    x += lengthdir_x(playerSpeed, image_angle); 
    y += lengthdir_y(playerSpeed, image_angle); 
} 
else if keyboard_check(ord("S")) 
{ 
    x += lengthdir_x(playerSpeed, image_angle-180); 
    y += lengthdir_y(playerSpeed, image_angle-180); 
} 

すべてのゲームメーカー機能は、角度0(360で、度数で角度を使用することに注意してください)を反時計回りに増加させる。 任意の関数は、0〜360の範囲以下の値で正しく動作します。たとえば、-90 = 270 (360-90)および400 = 40 (400-360)です。 ゲームメーカーがtruefalseをチェックする方法に注意してください。 0より大きい値<は、チェック時にfalseとなります。

関連する問題