2014-11-22 88 views
1

我必須在Game Maker中爲此項目工作,並且我想將對象移動到另一個對象。這是迄今爲止我所擁有的。有誰知道我做錯了什麼?敵人現在在玩家周圍旋轉。向某個方向移動對象

draw_sprite(sprite_index,image_index,x,y); 
moveSpeed = 1; 
angle = arctan2(enemy_obj.x - player_obj.x, enemy_obj.y - player_obj.y); 
enemy_obj.x += cos(angle) * moveSpeed; 
enemy_obj.y -= sin(angle) * moveSpeed; 

回答

3

使用內置的GM-功能(此代碼必須被放置在end step事件敵人的對象):

angle = point_direction(x, y, player_obj.x, player_obj.y); 
x += lengthdir_x(moveSpeed, angle); 
y += lengthdir_y(moveSpeed, angle); 

或:

direction = point_direction(x, y, player_obj.x, player_obj.y); 
if point_distance(x, y, player_obj.x, player_obj.y) > 10 // min distance 
{ 
    speed = moveSpeed; 
} 

或者你可以使用運動規劃功能,如mp_potential_stepmp_grid_...A*

P.S.當您使用這樣的代碼

angle = arctan2(enemy_obj.x - player_obj.x, enemy_obj.y - player_obj.y); 

你必須明白,如果是enemy_obj幾個實例,然後將只

+0

爲什麼這個代碼必須在去拍攝的第一個人(用最小的ID) end_step事件而不是隻是步驟事件? – 2015-01-23 04:48:02

+0

因爲所有實例在'step'事件之後和'end step'事件之前改變位置。例如,如果你的對象'obj_player'的速度爲4,位置x = 0,則'step'事件的'x = obj_player.x'爲0,但是'step end'事件爲4.因此,如果我在step事件中執行'direction = point_direction(x,y,player_obj.x,player_obj.y)',它會使用舊的'player_obj'位置,你會看到一些延遲。 – Dmi7ry 2015-01-23 08:25:14