一旦圆圈接触到矩形,矩形应为alpha = 0.1。但如果声明不起作用。它没有碰到
就变成了0.1不透明度/* js
var circle = new lib.mycircle();
stage.addChild(circle);
var rect = new lib.myrect();
stage.addChild(rect);
rect.x=200;
rect.y=300;
circle.addEventListener('mousedown', downF);
function downF(e) {
stage.addEventListener('stagemousemove', moveF);
stage.addEventListener('stagemouseup', upF);
};
function upF(e) {
stage.removeAllEventListeners();
}
function moveF(e) {
circle.x = stage.mouseX;
circle.y = stage.mouseY;
}
if(circle.hitTest(rect))
{
rect.alpha = 0.1;
}
stage.update();
*/
答案 0 :(得分:1)
你使用hitTest的方式不正确。 hitTest
方法不检查对象到对象。它采用x和y坐标,并确定该点在其自己的坐标系中是否具有填充像素。
我修改了你的例子以使它更正确,虽然它实际上没有做你期望的事情:
circle.addEventListener('pressmove', moveF);
function moveF(e) {
circle.x = stage.mouseX;
circle.y = stage.mouseY;
if (rect.hitTest(circle.x, circle.y)) {
rect.alpha = 0.1;
} else {
rect.alpha = 1;
}
stage.update();
}
关键点:
else
语句,以便在hitTest失败时将alpha恢复为1。然后,最重要的一点是我将hitTest更改为矩形。这基本上说:"矩形中提供的x和y位置是否有填充像素?"由于矩形边界是-49.4, -37.9, 99, 76
,因此当圆的坐标在这些范围内时也是如此 - 就在它位于画布的左上角时。如果你用我的代码替换你的代码,你可以看到这种行为。
所以,为了让它更像你想要的工作,你可以做一些事情。
localToLocal
。这会在圆圈中取[0,0]
,并将该坐标转换为矩形的坐标空间。示例:
var p = rect.localToLocal(0, 0, circle);
if (rect.hitTest(p.x, p.y)) {
rect.alpha = 0.1;
} else {
rect.alpha = 1;
}
getObjectsUnderPoint
,传递圆的x / y坐标,并检查矩形是否在返回的列表中。希望有所帮助。正如我在上面的评论中提到的,你不能进行完整的形状碰撞,只能进行点碰撞(对象上的单个点)。