flash cc createjs hittest无需打击

时间:2016-03-28 07:17:48

标签: createjs

一旦圆圈接触到矩形,矩形应为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();
*/

1 个答案:

答案 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();
}

关键点:

  • 重新介绍了新闻。它工作正常。
  • 将圈子更新移至 hitTest检查。否则,您正在检查上次
  • 的位置
  • 将阶段更新移至最后。它应该是您更新的最后一件事。但请注意,您可以将其完全删除,因为HTML文件中的舞台上有一个Ticker侦听器,可以不断更新舞台。
  • 添加else语句,以便在hitTest失败时将alpha恢复为1。

然后,最重要的一点是我将hitTest更改为矩形。这基本上说:"矩形中提供的x和y位置是否有填充像素?"由于矩形边界是-49.4, -37.9, 99, 76,因此当圆的坐标在这些范围内时也是如此 - 就在它位于画布的左上角时。如果你用我的代码替换你的代码,你可以看到这种行为。

所以,为了让它更像你想要的工作,你可以做一些事情。

  1. 转换您的坐标。使用localToGlobal,或者只是作弊并使用localToLocal。这会在圆圈中取[0,0],并将该坐标转换为矩形的坐标空间。
  2. 示例:

    var p = rect.localToLocal(0, 0, circle);
    if (rect.hitTest(p.x, p.y)) {
        rect.alpha = 0.1;
    } else {
        rect.alpha = 1;
    }
    
    1. 不要使用hitTest。使用getObjectsUnderPoint,传递圆的x / y坐标,并检查矩形是否在返回的列表中。
    2. 希望有所帮助。正如我在上面的评论中提到的,你不能进行完整的形状碰撞,只能进行点碰撞(对象上的单个点)。