我正在编写一个类项目(我们必须使用 HTML5 画布构建一个 Frogger 游戏),并且我有一堆对象可以帮助我完成不同的事情,例如碰撞检测、运动等。
下面的对象就是其中之一。每个视图都包含一个 Frame 对象,该对象包含一个函数调用 hitTest,该函数调用检查其帧是否与传入的帧发生冲突。出于某种原因,this.lr
保留了它在游戏开始时最初设置的值,我无法弄清楚为什么它没有根据不断变化的原点进行更新。
function Frame(origin, size) {
this.origin = utility.checkPoint(origin);
this.size = utility.checkSize(size);
var self = this;
this.lr = (function () {
return utility.checkPoint(new Point(self.origin.x + self.size.width, self.origin.y + self.size.height));
}());
this.tr = (function () {
return utility.checkPoint(new Point(self.origin.x + self.size.width, self.origin.y));
}());
this.ll = (function () {
return utility.checkPoint(new Point(self.origin.x, self.origin.y + self.size.height));
}());
/* Returns true if the two frames share any common pixels */
this.hitTest = function (frame) {
var isInXBounds = function (p) {
return (p.x >= self.origin.x && p.x <= self.tr.x);
};
var isInYBounds = function (p) {
return (p.y >= self.origin.y && p.y <= self.lr.y);
};
var isContained = function (p) {
return (isInXBounds(p) && isInYBounds(p));
};
return isContained(frame.origin) || isContained(frame.tr) || isContained(frame.lr) || isContained(frame.ll);
};
}