【发布时间】:2012-08-18 07:47:37
【问题描述】:
我有一个逻辑问题,也许你们聪明的人可以帮我解决。 我正在使用 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”是“
但它所做的总是取消该行块中左侧的第一个块,而不是他触摸的块。
这应该是我的代码link的链接 *请注意我在代码中使用了 mattoni 这个词而不是块
祝大家有个愉快的一天
【问题讨论】:
-
你可能不得不/希望在没有库的情况下编写代码,但值得指出的是,像 Kinetic.JS 这样的东西可以自动处理碰撞检测等事情,所以你不必这样做。
-
可以在
jsfiddle.net中设置代码吗? -
这应该是我的代码jsfiddle.net/43mwc的链接 *请注意我在我的代码中使用了mattoni这个词而不是块
-
顺便说一句,你应该让你击球的位置影响弹跳的角度,否则游戏总是一样的。
标签: javascript canvas collision