所以最初我设置了bbox
和sprite_index
的东西(我知道你应该使用面具,但我还没有动画,所以我现在保持简单)。
var sprite_bbox_top = sprite_get_bbox_top(sprite_index) - sprite_get_yoffset(sprite_index);
var sprite_bbox_right = sprite_get_bbox_right(sprite_index) - sprite_get_xoffset(sprite_index);
var sprite_bbox_left = sprite_get_bbox_left(sprite_index) - sprite_get_xoffset(sprite_index);
var sprite_bbox_bottom = sprite_get_bbox_bottom(sprite_index) - sprite_get_yoffset(sprite_index);
以下是hsp代码。这工作得很好。
if (place_meeting(x + hsp, y, argument0)) {
while (!place_meeting(x + sign(hsp), y, argument0)) {
x += sign(hsp);
}
_wall = instance_place(x + sign(hsp), y, argument0);
if (hsp > 0) {
x = (_wall.bbox_left - 1) - sprite_bbox_right;
}
else {
x = (_wall.bbox_right + 1) - sprite_bbox_left;
}
hsp = 0;
}
这是不起作用的代码。正如你所看到的,这是相同的,但对于y。我不明白它是如何做出不同反应的。当我下来与argument0
相撞时,物体快速向右移动(位置x)。当我向上碰撞时,它完全消失了。
if (place_meeting(x, y + vsp, argument0)) {
while (!place_meeting(x, y + sign(vsp), argument0)) {
y += sign(vsp);
}
_wall = instance_place(x, y + sign(vsp), argument0);
if (vsp > 0) {
y = (_wall.bbox_bottom - 1) - sprite_bbox_top;
}
else {
y = (_wall.bbox_top + 1) - sprite_bbox_bottom;
}
vsp = 0;
}
它可以是两件事之一:
如果它可以帮助你我的回答给我+1 XD
这是一个自上而下的游戏还是平台游戏?如果它是一个平台游戏,那么vsp
可能会因为引力而有不同的速度。所以我认为y = (_wall.bbox_bottom - 1) - sprite_bbox_top
在那种情况下不够有效。
也许它甚至不需要,因为while语句中的sign
应该已经正确地与碰撞对齐。也许您可以尝试删除/禁用第二个if语句,看看是否有帮助。