游戏角色与敌人的碰撞

bilibiligame1renew.rar (860.3 KB)
这是我的项目,我跟着B站视频一步一步做的,不知为何 玩家角色始终无法与敌人发生碰撞。
具体内容是:我希望玩家角色靠近敌人时按下 J键 会对敌人造成伤害,即 敌人会触发一个动画(总之不是静止了 会动),并且敌人被攻击5次就会消失。然而实际结果是,敌人完全没有反应,跟背景一样。
我检查了很多遍,重做了2遍,始终都不行。
希望有人能解压我的项目帮我看看,万分感谢。

:2:enemy.js的onCllisionEnter拼错啦

onCollisionEnter(other, self)

文档:碰撞系统脚本控制
多说一句,用ts吧骚年

1赞

改了也没用,并没有触发这个回调。
刚打开就报错,tiledmap没找到,编辑器里拖好了之后,报错tiledmap.getPlayer not function,是因为楼主用的2.4.3,我降级到2.4.2的原因吗?

原因找到了,hero没有编辑碰撞尺寸,编辑后就可以了
似乎并不是按j键,只要碰到就会触发,这个就看你逻辑了
image

不需要编辑hero的碰撞尺寸啊,那样反而是碰到就触发了。game里边的错误是拖入map后getLayer拼写错了,tiledSize也拼错了。

1赞

我擦,这都不报错吗???

enemy.js里把 onBeginContact修改成onCollisionEnter
// onBeginContact(other,self) { 这个是物理碰撞
onCollisionEnter(other,self) {
console.log(‘敌人’)
if (other.node.group == ‘hero’) {
this.isHit = true;
this.ani.play(‘hurt’);
}
}

确实是,我看了下代码,这里出错了:
image
你的怪物在上方,这里应该给刚体一个y轴的向上的速度
这里你根据你实际设计来,x=0是肯定不对的,你的触碰刚体在人物的脚下,所以这里向上的速度是必须要的

确实是不按J键,碰到就触发,这不是我想要的。

我想要的是按下J键,人物触发动画,动画的某一帧上有一个碰撞,这个碰撞范围是人物的剑扫过的矩形,这一帧对敌人有作用。

我找到了原因,似乎是:人物本身与左右两侧的墙壁有一个碰撞,人物的碰撞区域是脚底到膝盖的矩形,而敌人的碰撞区域是脚底到头顶的矩形,为了使人物攻击时能与敌人碰撞,我给人物和敌人之间的碰撞打了对勾,所以即便我不攻击,人物与敌人也会产生碰撞。 我有了一个简单粗暴的方法,把敌人的碰撞区域缩小为了膝盖到头顶。 但我觉得这应该是个投机取巧的办法,不是很正规。

谢谢您的耐心回复。

确实哎,我加了一个o之后就可以了(按J键敌人有反应)。不过目前又有问题了,人物只是走过去,也能触发敌人反应。
谢谢您的耐心解答。

你看后面一份回复,不用改那个尺寸,只需要在攻击的时候调整碰撞区域,让碰撞区域处于人物的攻击范围中就可以了,我没细调,直接把this.lv.x=0改成了this.lv.y=10是得行得

其实可以这样 你先把人物的碰撞盒隐藏,当你按键的时候你就给他显示,碰撞就会触发了,在触发后作出你需要的效果,然后再次隐藏。如此就能实现按键攻击,不按键的时候直接走过的效果。

1赞