我刚开始制作一个游戏,目前得到了一个可行的基础。其中包括玩家移动、墙壁碰撞和更换玩家服装(在不同颜色的衣服之间更换)。碰撞检测和服装更换工作正常,但是有一点让我困惑,我不知道为什么,当玩家站在原地并按下除左右箭头和 WASD 键之外的键时,角色会掉换衣服,而且从右侧查看。
这是一个 快照影片 以展示其中的问题,展示了墙壁检测和玩家服装更换,然后我按下 Z、回车和 4 键。
玩家对象的创建代码:
//定义变量
xspd = 0
yspd = 0
move_spd = 2
walk_spd = 2
run_spd = 3
x_inter = 真
y_inter = 是
颜色 = 1
玩家对象的步骤事件代码:
//控制
var up_key = 检查键盘(vk_up)或检查键盘(ord(“W”))
var down_key = 检查键盘(vk_down)或检查键盘(ord(“S”))
var right_key = 检查键盘(vk_right)或检查键盘(ord(“D”))
var left_key = 检查键盘(vk_left)或检查键盘(ord(“A”))
//移动
如果(检查键盘(vk_shift)或检查键盘(ord(“X”))]{move_spd = run_spd;
} else {move_spd = walk_spd
xspd = (right_key - left_key)* move_spd
yspd = (down_key - up_key)* move_spd
//碰撞检测
如果(place_meeting(x+xspd,y,obj_wall)){xspd = 0}
如果(place_meeting(x,y+yspd,obj_wall)){yspd = 0
x+=xspd
y+=yspd
如果(place_meeting(x,y,obj_changered)和检查键盘_按下(ord(“Z”))){
颜色 = 2
}
如果(place_meeting(x,y,obj_changeback)和检查键盘_按下(ord(“Z”))){
颜色 = 1
//动画
如果(颜色 = 1){
如果(检查键盘_按下(vk_up或ord(“W”))){sprite_index = spr_bootswu;image_index = 1;}
如果(检查键盘_按下(vk_down或ord(“S”))){sprite_index = spr_bootswd;image_index = 1;}
如果(检查键盘_按下(vk_left或ord(“A”))){sprite_index = spr_bootswl;image_index = 1;}
如果(检查键盘_按下(vk_right或ord(“D”))){sprite_index = spr_bootswr;image_index = 1;
如果(yspd = 0 或检查键盘_释放(vk_up或vk_down或ord(“W”或“S”))){x_inter = 真
如果(xspd = 0 或检查键盘_释放(vk_左或vk_右或ord(“A”或“D”))){y_inter = 真
如果(xspd != 0 或 yspd !=0){
image_speed = 1
如果(xspd> 0 和 x_inter = 真){sprite_index = spr_bootswr;y_inter = 假}
如果(xspd< 0 和 x_inter = 真){sprite_index = spr_bootswl;y_inter = 假}
如果(yspd> 0 和 y_inter = 真){sprite_index = spr_bootswd;x_inter = 假}
如果(yspd< 0 和 y_inter = 真){sprite_index = spr_bootswu;x_inter = 假}
} else {image_(speed = 0;image_index = 0;
如果(xspd = 0 和 yspd = 0){
如果(up_key){sprite_index = spr_bootswu}
如果(down_key){sprite_index = spr_bootswd}
如果(left_key){sprite_index = spr_bootswl}
如果(right_key){sprite_index = spr_bootswr}
}
} else if(color = 2){
如果(检查键盘_按下(vk_up或ord(“W”))){sprite_index = spr_crmsn_bootswu;image_index = 1;}
如果(检查键盘_按下(vk_down或ord(“S”))){sprite_index = spr_crmsn_bootswd;image_index = 1;}
如果(检查键盘_按下(vk_左或ord(“A”))){sprite_index = spr_crmsn_bootswl;image_index = 1;}
如果(检查键盘_按下(vk_右或ord(“D”))){sprite_index = spr_crmsn_bootswr;image_index = 1;
如果(yspd = 0 或检查键盘_释放(vk_up或vk_down或ord(“W”或“S”))){x_inter = 真
如果(xspd = 0 或检查键盘_释放(vk_左右或ord(“A”或“D”))){y_inter = 真
如果(xspd != 0 或 yspd !=0){
image_speed = 1
如果(xspd> 0 和 x_inter = 真){sprite_index = spr_crmsn_bootswr;y_inter = 假}
如果(xspd< 0 和 x_inter = 真){sprite_index = spr_crmsn_bootswl;y_inter = 假}
如果(yspd> 0 和 y_inter = 真){sprite_index = spr_crmsn_bootswd;x_inter = 假}
如果(yspd< 0 和 y_inter = 真){sprite_index = spr_crmsn_bootswu;x_inter = 假}
} else {image_speed = 0;image_index = 0;
}else {color = 1
评论 (0)