JavaScript碰撞检测bug
JavaScript Collision Detection bug
大家好我尝试着创造一款马里奥类型的游戏,但却遇到了一些碰撞漏洞也许有人能给我解释一下什么是不正确的,如何解决它
碰撞部分有硬编码值我不能正确地跳上盒子很难解释,如果它不是很难,只是缓存js提琴链接!
控制箭头的空间跳跃,问题在于跳跃游戏逻辑
游戏逻辑
var hero = {
X: 200,
Y: 450,
gravity: 0.05,
gravitySpeed: 0,
speed: 2,
height: 50,
width: 50
}
var box = {
X: 300,
Y: 450,
height: 50,
width: 50
}
var map = {
gravity: 0.5,
groundY: 350
}
var optiones = {
crashWith: function (otherobj) {
var myleft = hero.X;
var myright = hero.X + (50);
var mytop = hero.Y;
var mybottom = hero.Y + (50);
var otherleft = box.X;
var otherright = box.X + (50);
var othertop = otherobj.y;
var otherbottom = box.Y + (50);
var crash = true;
//Hard coded values
var Y = 450,
X = 300,
w = 50,
h = 50
// not tuching
if ((mybottom < othertop) ||
(mytop > otherbottom) ||
(myright < otherleft) ||
(myleft > otherright)) {
crash = false;
// console.log("dont tuch")
hero.Y += hero.gravitySpeed;
hero.gravitySpeed += hero.gravity;
} else {
// collision rules
if (mytop >= othertop && othertop < otherbottom) {
if (hero.X <= X) {
hero.X = X - hero.width
} else if (hero.X > X) {
hero.X = X + hero.width
}
} else if (hero.X >= X && hero.X <= X + w) {
if (hero.Y <= Y) {
hero.Y = Y - hero.height
} else if (hero.Y >= Y) {
hero.Y = Y + hero.height
}
}
}
这里是一个完整的代码,可以在js上查看或播放js小提琴
你的函数说:
function crashwith(otherobj){}
但你心里说
othertop=box.y;
你不是用传递的对象来检查英雄是否崩溃,而是用一个框来检查。这不是我认为函数应该做的。我想你需要:
othertop=otherobj.y;
同时你的崩溃函数必须是
if ((mybottom < othertop) ||
(mytop > otherbottom) ||
(myright < otherleft) ||
(myleft > otherright)) {
Alert("crash");
}
你的逻辑正好相反
现在我尝试这样做
if(myright >= otherleft && mybottom > othertop &&myleft < otherright){
console.log("R______")
hero.X = otherleft - hero.width
}
if(myleft <= otherright && mybottom > othertop && myright > otherleft){
console.log("L______")
hero.X = otherleft + hero.width
}
我怎么理解我不需要这部分
if ((mybottom < othertop) ||
(mytop > otherbottom) ||
(myright < otherleft) ||
(myleft > otherright)) {
crash = false;
相关文章:
- 逐像素碰撞检测弹球
- 砖块和球之间的碰撞检测(使用数字数组)
- 为什么我应该使用带有碰撞检测的四叉树
- 具有多个块的html5画布碰撞检测
- D3js地图标记碰撞检测
- javascript中两个正方形之间的碰撞检测
- 使用canvas+javascript进行2D碰撞检测
- 为什么我的碰撞检测在 Phaser 中不起作用
- 方向碰撞检测
- 圆圈碰撞检测 HTML5 画布
- FPS 游戏中的碰撞检测使用三个.js
- Javascript - 如何设置碰撞检测系统
- 三.js使用光线投射优化碰撞检测
- 对 2 个对象进行碰撞检测
- 如何将碰撞检测添加到我的 JavaScript 游戏中
- 使用边界球体进行碰撞检测
- 碰撞检测问题;对某些条件的奇怪反应
- JavaScript:碰撞检测不起作用
- 碰撞检测在我的游戏中不准确
- JavaScript碰撞检测bug