对象数组上的html5 javascript冲突
html5 javascript collision over array of Objects
我有一个逻辑问题,也许你们这些聪明人可以帮我解决。我正在用Canvas学习Javascript,并试图用纯Javascript构建一种"刹车"游戏。
http://www.seas.upenn.edu/~cis120e/hw/SwingGame/images/breakout.png
我创建了球拍、球,然后创建了一组块具有不同属性(xPos、yPos、宽度等)的对象,现在我正试图检测球与屏幕顶部块的碰撞。
我就是这样做的:
//This is my block Object definition
function block(x,y,width,height){
this.x = x;
this.y = y;
this.width = width;
this.height = height;
ctxBlock.fillStyle = 'green';
ctxBlock.fillRect(this.x, this.y, this.width, this.height);
}
//This is for draw blocks on the canvas
mattone.prototype.draw = function(){
ctxBlock.fillStyle = 'green';
ctxBlock.fillRect(this.x, this.y, this.width, this.height);
}
//This is the check for collision method
var blocks = [];
function checkCollision(){
for (var i = 0; i < blocks.length; i++){
if(ballY - ballRadius <= blocks[i].y + blockWidth){
ctxBlocks.clearRect(tmpx, tmpy, blockWidth, blockHeight);
speedY = (-speedY);
break;
}
}
checkColl = requestAnimationFrame(checkCollision);
}
基本上,我试图告诉画布,当球的"Y"是"<",然后是块阵列中某个块的"Y)时(循环通过并检查每个块),他必须删除该块并向下反弹。
但它所做的总是取消那一行方块中左边的第一个方块,而不是他碰到的方块。
这应该是我的代码链接*请注意,我在代码中使用了单词mattoni而不是block
祝大家度过美好的一天
非常好!也感谢您提供完整的jsfiddle。我对此进行了更新:
http://jsfiddle.net/43mwc/2/。现在来解释一下:碰撞检查只需要检查每个块的所有边界,而不仅仅是底部。所以我改了这个:
if(ballY - ballRadius <= blocks[i].y + blockWidth){
对此(用你的措辞):
if(ballY-ballRadius <= mattoni[i].y + 10- padding && (ballX - ballRadius) >= mattoni[i].x && (ballX + ballRadius) <= (mattoni[i].x + mattWidth)){
为了解释,您的代码在每个砖块中循环,检查球是否在每个砖块的正下方。整个最底层的一排砖都满足该标准,因此循环中位于最底层的第一块砖上的循环断开(如break;
中所示)。现在,球沿x轴的位置被检查为位于每块砖的左右边缘之间。这里还有一种情况没有涉及:砖块被从顶部击中。我把那个留给你。
您在碰撞检查中只检查了y值,而没有检查x值。每当你击中最后一排的砖块时,最左边的砖块就会被清除,因为它与y值匹配。之后,你就脱离了循环。
其次,您没有跟踪哪个区块已经被清除。因此,最后一行的左砖块在每个循环中都被清除了,而其他砖块没有得到清除的更改,因为在那之后你就脱离了循环。
http://jsfiddle.net/43mwc/3/
- 防止WordPress javascript冲突的良好实践
- IE8/Javascript冲突?IE8正在开发中冻结整个站点-包括Javascript列表
- 对象数组上的html5 javascript冲突
- 插件导致Wordpress图像滑块中的JavaScript冲突
- 与原型javascript冲突
- 响应式菜单和响应式幻灯片之间的 JavaScript 冲突
- Javascript 冲突问题
- Jquery Mobile 与其他 JavaScript 冲突
- 浏览器缓存与我的 javascript 冲突,以将值添加到列表框
- Javascript 冲突 ajax 邮件和脚本
- 窗口加载与 body onload JavaScript 冲突
- 如何进行Javascript冲突
- 包括与外部页面javascript冲突的页面javascript
- 解决Wordpress网站上的javascript冲突
- 正在解决Javascript冲突
- CSS或JavaScript冲突-谷歌地图获胜;t显示
- Javascript冲突倒计时
- Javascript冲突(淡入VS.jQuery Accordion)
- Wordpress中的Javascript冲突
- 解决Javascript冲突/ jquery