我是新手,正在学习使用Gamemaker和编程,试图按照Gamemaker RPG教程来学习,同时为了解决之前与碰撞相关的问题(玩家会在墙壁上被卡住,仅能轻微地移动),我查看了另一个关于更好的移动代码的教程。
现在它的工作情况已经有所改善,但我现在遇到了一个问题:玩家在改变方向时,如果他们在墙壁旁边会出现与墙壁水平对齐并冻结的问题。通常我不会问这样一个问题,但现在我已经超出了两个教程的范围了,我完全不知道如何查找解决这个问题的方法,所以任何帮助都将非常感谢!
-
视频:
https://www.youtube.com/watch?v=1J5EydrnIPs&t=1s
https://www.youtube.com/watch?v=oqYyD4KB7pw
玩家代码(墙壁是标准的):
[Create]
move_speed = 1;
xspd = 0;
yspd = 0;
tilemap = layer_tilemap_get_id("Tiles_Col"); (//这个是碰撞墙壁的图层)
[Step]
//获取输入
right_key = keyboard_check(vk_right);
left_key = keyboard_check(vk_left);
up_key = keyboard_check(vk_up);
down_key = keyboard_check(vk_down);
//获取x & y速度
xspd = (right_key - left_key) * move_speed;
yspd = (down_key - up_key) * move_speed;
//碰撞检测
if place_meeting(x + xspd, y, tilemap)
{
xspd = 0;
}
if place_meeting(x, y + yspd, tilemap)
{
yspd = 0;
}
//玩家动画
if (xspd !=0 or yspd != 0)
{
if (yspd > 0) sprite\_index = spr\_player\_walk\_down;
else if (yspd < 0) sprite\_index = spr\_player\_walk\_up;
else if (xspd > 0) sprite\_index = spr\_player\_walk\_right;
else if (xspd < 0) sprite\_index = spr\_player\_walk\_left;
}
else
{
if (sprite\_index == spr\_player\_walk\_down) sprite\_index = spr\_player\_idle\_down;
else if (sprite\_index == spr\_player\_walk\_up) sprite\_index = spr\_player\_idle\_up;
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;
}
//移动玩家
x += xspd
y += yspd
[End Step]
with (all)
{
depth = -bbox\_bottom;
}
评论 (0)