如何检测此JavaScript游戏的对象碰撞
How to detect object collision for this JavaScript game
试图整理一个小游戏进行练习,我遇到了一个问题。 关键是抓住哥布林,但我不知道如何让游戏检测到玩家击中了哥布林。
到目前为止,只有当您的位置 Y 和 X 与敌人轴匹配时,您才能检测到触摸。 我怎样才能增加两者的宽度或更好的触摸检测方法。
在这里尝试一下:https://jsfiddle.net/acbkk7cs/4/
风格:
#map{
margin: 0 auto;
height: 510px;
width: 510px;
background-image:url(background.png);
}
.character{
background-image:url(character.png);
z-index:1;
position: relative;
top: 150px;
left: 150px;
height: 32px;
width: 33px;
}
.monster{
background-image:url(monster.png);
position: relative;
height: 32px;
width: 30px;
}
Javascript:
$(document).ready(function(){
var char = {
player : $(".character"),
x: 150,
y: 150
};
var monster = {
npc : $(".monster"),
x: 100,
y: 100
};
var keypush = {};
$(document).on("keydown keyup", function(e){
var keyN = e.which;
keypush[keyN] = e.type === "keydown";
});
function moveCharacter(){
if (keypush[37]) char.x -=2;
if (keypush[38]) char.y -=2;
if (keypush[39]) char.x +=2;
if (keypush[40]) char.y +=2;
char.player.css({transform:"translate3D("+ char.x +"px, "+ char.y +"px, 0)"});
monster.npc.css({transform:"translate3D("+ monster.x +"px, "+ monster.y +"px, 0)"});
var playerPosX = char.player.position().top;
var monsterPosX = monster.npc.position().top;
var playerPosY = char.player.position().left;
var monsterPosY = monster.npc.position().left;
if ( playerPosX === monsterPosX
&& playerPosY === monsterPosY
){
document.getElementById("pos").innerHTML="Touched";
} else {
document.getElementById("pos").innerHTML="Off";
}
//backend logs
console.log(char.x);
}
(function engine(){
moveCharacter();
window.requestAnimationFrame(engine);
}());
});
.HTML:
<div id = "map">
<div class = "character">
</div>
<div class = "monster">
<p id = "pos" style = "color:yellow;font- weight:bold;position:relative;left:5px;font-size:20px;">Position: </p>
</div>
</div>
最简单快捷的方法是计算角色和怪物之间的距离:使用圆圈碰撞摆弄。
var dx = playerPosX - monsterPosX,
dy = playerPosY - monsterPosY,
touchDistance = 30;
if ( Math.sqrt( dx * dx + dy * dy ) < touchDistance )
document.getElementById("pos").innerHTML="Touched";
else
document.getElementById("pos").innerHTML="Off";
在这里,我盯上了touchDistance
,但它的实际值应该是玩家精灵半径和怪物精灵半径之和。如果它们是圆圈,则效果最好:
/**
* (ax,ay) and (bx,by) are the center positions, and ar, br their radii.
*/
function circleCollision( ax, ay, ar, bx, by, br ) {
return Math.sqrt( (ax-bx)*(ax-bx) + (ay-by)*(ay-by) ) <= ar + br;
}
确定碰撞的第二种常见方法是使用"边界框",或者在本例中为矩形/正方形:使用矩形碰撞进行摆弄。
function rectangleCollision( pLeft, pTop, pRight, pBottom, mLeft, mTop, mRight, mBottom ) {
return
( (pLeft >= mLeft && pLeft < mRight ) || (pRight >= mLeft && pRight < mRight ) )
&& ( (pBottom >= mTop && pBottom < mBottom) || (pTop >= mTop && pTop < mBottom) )
}
相关文章:
- Javascript游戏输入失去焦点
- HTML5内存游戏-JavaScript功能
- 正面或反面游戏javascript do/while循环
- 结束一个反应游戏Javascript
- 如何在制作简单的纸牌游戏(Javascript)时给卡牌一个数值
- 根据游戏 JavaScript 中的级别更改背景图像
- 匹配游戏.Javascript.DOM lastChild
- 不可能的井字游戏Javascript
- 第一个编程游戏(javascript/jQuery)的问题
- 随机颜色猜测游戏(JavaScript)
- 井字游戏JavaScript帮助(我没有得到我想要的警报)
- 井字游戏Javascript不会改变玩家
- 井字游戏JavaScript
- 简单纸牌游戏javascript中的indexOf问题
- 游戏JavaScript / JSON链接文本框
- 西蒙游戏javascript,我如何同步按钮的灯不踩在彼此与动画()和延迟()JQUERY
- 井字游戏javascript.如何储存玩家的胜利,并提醒是否有平局
- 内存游戏Javascript中瓦片的悬停状态
- 在游戏 JavaScript 中添加暂停键
- 重新启动逻辑井字游戏(JavaScript)时遇到问题