最近我开始涉足游戏开发的编程领域,试图实现我的游戏梦想(同时也是一种在盯着屏幕时让自己感到有成就感的方式),但在编程一些基础功能时遇到了很大困难。

我目前正在纠结于敌人的运动逻辑。过去两天我一直在看YouTube视频和阅读手册。好消息是,读得越多、看得越多,我对这门语言的理解就越深。坏消息是,在几乎零睡眠、花了近20小时看视频和反复试错之后,我显然缺失了一些基础认知,无法理解自己到底错在哪里。

我正在制作一个平台卷轴游戏。我试图编程一个简单的生物,它会在“地面”上一定范围内移动,并在视野范围内开始跟随玩家对象。目前,当我运行程序时,我的敌人对象保持静止,直到它与我玩家对象碰撞,然后程序崩溃(我几乎可以肯定崩溃是因为我还没有写好敌人和玩家对象的战斗代码)。但在之前,我尝试用一种奇怪的方法解决这个问题时,敌人会在碰撞后开始向右跑,远离我的角色对象——当时我跳出了被它卡住的状态。

如果有任何建议、资源,或者能帮我理解我的逻辑哪里不符合程序运作原理,将不胜感激。

创建事件

target_x = x;

target_y = y;

xspd = 0;

yspd = 0;

move_speed = 1;

move_direction = 0;

sight = 300;

//跳跃变量

grav = .25;

tilemap = layer_tilemap_get_id("tile_col");

//击退

kb_x = 0;

kb_y = 0;

alarm[0] = 120;

步进事件

//视野

if (collision_line(x, y, x + sight, y, obj_player, false, true))

{

if (collision_line(x, y, obj_player.x, obj_player.y, tilemap, false, true)) foundplayer = false;

else foundplayer = true;

}

else foundplayer = false;

if (foundplayer = true)

{

move_towards_point(obj_player.x, y, move_speed * 2)

}

//碰撞检测

if place_meeting(x + xspd, y, tilemap)

{

var _pixelcheck = sign(xspd);

while !place_meeting(x + _pixelcheck, y, tilemap)

{

x += _pixelcheck;

}

xspd = 0;

}

if place_meeting(x + xspd, y + yspd, tilemap)

{

var _pixelcheck = sign(yspd);

while !place_meeting(x + xspd, y + _pixelcheck, tilemap)

{

y += _pixelcheck;

}

yspd = 0;

}

//移动

if (alarm[1] >= 0)

{

target_x = x + kb_x;

}

xspd = clamp(target_x - x, -1, 1);

move_and_collide(xspd * move_speed, y, [tilemap, obj_enemy_parent]);

闹钟0

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

{

target_x = obj_player.x;

target_y = y;

}

else {

target_x = random_range(xstart - 200, xstart + 200);

target_y = y;

}

alarm[0] = 120;

闹钟1

if (hp <= 0)

{

instance_destroy();

}

注:

大部分代码我还没有完全编写完成,因为我一直在努力让它按我期望的方式移动。所以除非这些代码是导致对象出错的直接原因,否则不用在意它们(当然,如果你有任何修改建议,也欢迎提出 :))。