1

我正在使用 Adob​​e Animate CC 和 JavaScript 编码。我正在尝试使用以下代码检测两个符号之间的冲突:

createjs.Ticker.on("tick", gameLoop, state);

function gameLoop(){

var pt = player.globalToLocal(collect.x, collect.y);
    if(player.hitTest(pt.x, pt.y)){
        alert("hit");           
    }
}

但这并没有做任何事情,声明总是错误的。

我该如何解决这个问题?

4

4 回答 4

0

您可以使用 SetInterval () 函数代替 createJs.ticker 并保持与原来相同的代码。我认为您在 createJs 中犯了错误

于 2018-12-18T11:11:33.767 回答
0

尝试使对象更小。代码应该可以工作。它对我有用。我有一个骑自行车的球员。该程序显示自行车前轮撞到猫时的碰撞。

当我的自行车后轮撞到猫时,它不会显示碰撞警报。

于 2018-12-18T09:52:31.253 回答
0

这是包含 6 个可拖动项目和 2 个放置区域的 Adob​​e Animate CC 示例代码。当画布设置为响应式时,这也有效。在拖放和碰撞检测/命中测试之间将其蚕食到所需的任何东西中应该很容易。

this.block1.on("pressmove", function (evt) {

var p = stage.globalToLocal(evt.stageX, evt.stageY);

evt.currentTarget.x = p.x;

evt.currentTarget.y = p.y;

});

this.block2.on("pressmove", function (evt) {

var p = stage.globalToLocal(evt.stageX, evt.stageY);

evt.currentTarget.x = p.x;

evt.currentTarget.y = p.y;

});

this.block3.on("pressmove", function (evt) {

var p = stage.globalToLocal(evt.stageX, evt.stageY);

evt.currentTarget.x = p.x;

evt.currentTarget.y = p.y;

});

this.block4.on("pressmove", function (evt) {

var p = stage.globalToLocal(evt.stageX, evt.stageY);

evt.currentTarget.x = p.x;

evt.currentTarget.y = p.y;

});

this.block5.on("pressmove", function (evt) {

var p = stage.globalToLocal(evt.stageX, evt.stageY);

evt.currentTarget.x = p.x;

evt.currentTarget.y = p.y;

});

this.block6.on("pressmove", function (evt) {

var p = stage.globalToLocal(evt.stageX, evt.stageY);

evt.currentTarget.x = p.x;

evt.currentTarget.y = p.y;

});





this.on("tick", update.bind(this));

function update() {

var b1 = this.block1.localToLocal(100, 0, this.frontAnswerDrop);

var b2 = this.block2.localToLocal(100, 0, this.frontAnswerDrop);

var b3 = this.block3.localToLocal(100, 0, this.frontAnswerDrop);

var b4 = this.block4.localToLocal(100, 0, this.backAnswerDrop);

var b5 = this.block5.localToLocal(100, 0, this.backAnswerDrop);

var b6 = this.block6.localToLocal(100, 0, this.backAnswerDrop);





if (this.frontAnswerDrop.hitTest(b1.x, b1.y)) {

console.log("b1 collided");

}

if (this.frontAnswerDrop.hitTest(b2.x, b2.y)) {

console.log("b2 collided");

}

if (this.frontAnswerDrop.hitTest(b3.x, b3.y)) {

console.log("b3 collided");

}

if (this.backAnswerDrop.hitTest(b4.x, b4.y)) {

console.log("b4 collided");

}

if (this.backAnswerDrop.hitTest(b5.x, b5.y)) {

console.log("b5 collided");

}

if (this.backAnswerDrop.hitTest(b6.x, b6.y)) {

console.log("b6 collided");

}

}
于 2018-02-24T18:49:20.770 回答
0

您可以使用“setBounds(_x, _y, _wifth, _height)”

player.setBounds(-30 , -30 , 60 , 60);
enemy.setBounds(-30 , -30 , 60 , 60);

然后检查:

bounds = player.getTransformedBounds();

if (bounds.intersects(enemy.getTransformedBounds())) 
{
    // something code
}

西班牙语参考:https ://www.youtube.com/watch?v=AlqiplcnM7s

于 2016-07-15T03:49:41.707 回答