首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在没有墙的情况下检测敌人与墙的碰撞

在没有墙的情况下检测敌人与墙的碰撞
EN

Stack Overflow用户
提问于 2020-09-30 05:14:59
回答 1查看 427关注 0票数 0

在youtube上看了肖恩·斯伯丁的gamemaker 2平台教程后,我正试图在一个简单的平台游戏上开发基本的敌人AI。我的代码与他在教程中的代码完全相同,但出于某种原因,当我的敌人检测到与墙的碰撞时,他会像他应该的那样转身,然后检测到另一个没有碰撞的地方,导致他再次转身。

这是我的代码:

代码语言:javascript
复制
// Horizontal collision
if (place_meeting(x+hsp, y, oWall)) {
    show_debug_message(hsp)
    while (!place_meeting(x+sign(hsp), y, oWall)) {
        x += sign(hsp); // slows down I think
    }
    hsp = -hsp;
}

x += hsp; 

-hsp部分是他转身的地方。不知何故,他一这样做就检测到了另一个冲突,即使hsp的值是反转的。有没有人能告诉我为什么会发生这种情况?

( hsp的值在3处初始化,并且仅在倒置时才会发生变化)。

EN

回答 1

Stack Overflow用户

发布于 2020-09-30 14:51:11

它是不是在一段时间后又回到了墙上,还是卡住了,正在快速地左右闪烁?两者都可能涉及到碰撞点没有很好地更新。

当我遇到碰撞问题时,我将使用十字准线精灵,并将其绘制在应该碰撞的相同位置。这样我就可以看到“碰撞点”了。

另一个原因可能是精灵的原点,它决定了xy出现的位置,以及精灵通过旋转与墙本身发生碰撞。请记住,原点位于其碰撞遮罩的中心,以避免卡在墙上。

编辑:另一种可能性:碰撞点仍然检查精灵内部。为此,您也可以尝试使用使碰撞点远离精灵碰撞的偏移量,但要使其工作,您需要保持反向远离您的水平速度。如下所示:

代码语言:javascript
复制
// Horizontal collision
_offset = 15; //moves the collision point away to check in front of the sprite. value depends on the size of the sprite.
_dir = 1; //the direction, should only be 1 or -1
          //hsp should no longer be used to inverse, use a new variable (like _dir) instead
collisionPoint = (hsp + offset) * _dir;
if (place_meeting(x + collisionPoint , y, oWall)) {
    show_debug_message(collisionPoint)
    while (!place_meeting(x+sign(collisionPoint), y, oWall)) {
        x += sign(collisionPoint); // slows down I think
    }
    _dir = -_dir
}

x += hsp * _dir; 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64127745

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档