我想知道为什么敌人在回打击中跑得如此迅速,为什么碰撞在y轴上存在问题。

create

target_x = x;

target_y = y;

alarm[0] = 60;

tilemap = layer_tilemap_get_id("Tiles_Col");

// 回打击

kb_x = 0;

kb_y = 0;

Alarm 0 - (为了让敌人走迷你路线并检测玩家)

if (instance_exists(obj_player) && distance_to_object(obj_player) < distance_to_player)

{

target\_x = obj_player.x;

target\_y = obj_player.y;

}

else

{

target\_x = random_range(xstart - 100, xstart + 100);

target\_y = random_range(ystart - 100, ystart + 100);

}

alarm[0] = 60;

步骤

if (alarm[0] >= 0)

{

target\_x  = x + kb\_x;

target\_y  = y + kb\_y;

}

var _hor = clamp(target_x - x, -1, 1);

var _ver = clamp(target_y - y, -1, 1);

// 不要与自己撞击

move_and_collide(_hor * move_speed, _ver * move_speed, [tilemap, obj_enemy_parent]);

碰撞事件与obj attack(这正在工作)

if (alarm[1] < 0)

{

hp -= other.damage;

image\_blend = c\_red;

kb\_x = sign(x - other.x);

kb\_y = sign(y - other.y);

alarm[1] = 20;

}

Alarm 1

image_blend = c_white;

if (hp <= 0)

{

instance\_destroy();

}

编辑(我忘了关于玩家碰撞的问题)

基本上我是使用一个tiles实例进行的。

obj_player

create

move_speed = 1;

tilemap = layer_tilemap_get_id("Tiles_Col");

hp = 10;

hp_total = hp;

damage = 1;

facing = 0;

步骤

var _hor = keyboard_check(ord("D")) - keyboard_check(ord("A"));

var _ver = keyboard_check(ord("S")) - keyboard_check(ord("W"));

move_and_collide(_hor * move_speed, _ver * move_speed, tilemap, undefined, undefined, undefined, move_speed, move_speed);

if (_hor != 0 or _ver != 0)

{

if (_ver>0) sprite_index = spr_player_walk_down;

else if (_ver < 0) sprite_index = spr_player_walk_up;

else if (_hor > 0) sprite_index = spr_player_walk_right;

else if (_hor < 0) sprite_index = spr_player_walk_left;

facing = point_direction(0, 0, _hor, _ver);

}

else

{

if (sprite_index == spr_player_walk_right) sprite_index = spr_player_idle_right;

else if (sprite_index == spr_player_walk_left) sprite_index = spr_player_idle_left;

else if (sprite_index == spr_player_walk_up) sprite_index = spr_player_idle_up;

else if (sprite_index == spr_player_walk_down) sprite_index = spr_player_idle_down;

}

if (keyboard_check_pressed(ord("J")))

{

var _inst = instance_create_depth(x,y,depth,obj_attack);

_inst.image_angle = facing;

_inst.damage *= damage;

}