【发布时间】:2012-01-19 18:13:10
【问题描述】:
要检测一张图片何时在画布上另一张图片的范围内,我会这样做:
if (herohitboxX <= (villageMain.x + 200) && villageMain.x <= (herohitboxX) && herohitboxY <= (villageMain.y + 200) && villageMain.y <= (herohitboxY) ) { console.log('inside bldg') }
效果很好,但我在弄清楚如何不让玩家走进建筑物/树/对象,但同时让他们仍然远离对象时遇到了很大的问题。
我可以通过在触摸时移动它们来使玩家滑过对象,并阻止它们从那个方向返回,但我不能阻止来自所有 4 个方向的移动....
主要问题是它只检测它们是否重叠,但不会告诉你玩家来自哪个方向。当他们在建筑物内时,简单地否定玩家的移动方向是行不通的(如果他们按下右并接触物体,则向左走,否则如果他们没有接触并按下右,则向右走)。或者,如果他们向上走并触摸建筑物,则发送向下。这不应该工作吗????
我唯一能想到的就是做 4 个细长的矩形/线来代表周边的每一侧,然后就是不允许从它所面对的方向移动。但是必须有一些更简单的方法!它是什么?
存储以前的位置并进行比较??现在没有真正的移动方向可以查看,如果在关键侦听器中检测到您 UP,它会移动背景图像并调整玩家精灵的位置。有小费吗?
【问题讨论】:
-
所以如果我理解正确的话,当玩家和一些障碍物部分重叠时就会出现问题。但如果你的算法是正确的,你应该永远不会达到这样的状态,对吧?
-
@Pumbaa80:听起来可能玩家的起始位置违反了重叠规则。因此,如果我是 user1108224,我会检查以确保您确实初始化了任何重叠的对象。
-
它只是检测它们何时重叠,我将它用于几十个对象来触发游戏内菜单、重新填充统计数据、打开商店菜单以购买/出售物品、通过碰到它们来拾取物品,这些都是在检测到碰撞时触发的。我遇到的问题是我无法阻止碰撞的发生,我想为建筑物和树木等一些物体做这件事。如果玩家从一个对象的左侧接近,当它到达对象时,我不希望玩家能够再向右移动,但仍然希望他们能够移动所有其他方向......跨度>
标签: html canvas controller character collision