您好,我正在制作太空射击游戏,我想检查老板和玩家子弹之间的碰撞。我面临的问题是,可以很好地检测到老板子弹与玩家之间的碰撞,但是老板正在与自己的子弹相撞,失去了所有的健康,这只会在动画进入画布的左侧时发生。这是我的代码
function fire_Boss02_first(){
var boss02_bullet_first=bullet_first.clone();
boss02_bullet_first.x=boss02.x+bullet2_boss_stats.offSetX;
boss02_bullet_first.y=boss02.y+bullet2_boss_stats.offSetY;
boss02_bullet_first.st=bullet2_boss_stats;
stage.addChild(boss02_bullet_first);
time=(boss02_bullet_first.y+500)/0.99;
createjs.Tween.get(boss02_bullet_first).to({y:1000},time);
boss02_bullet_first.addEventListener("tick",collisionEvent);
function collisionEvent(event) {
for(var i=0; i<stage.children.length; i++){
if(stage.getChildAt(i).name == "player"){
var intersection = ndgmr.checkRectCollision(stage.getChildAt(i),boss02_bullet_first );
if(intersection != null){
stage.getChildAt(i).st.health = stage.getChildAt(i).st.health - boss02_bullet_first.st.damage;
health_txt.text="ENERGY: "+stage.getChildAt(i).st.health;
if(stage.getChildAt(i).st.health <= 0){
explode = explode_fx.clone();
explode.x=stage.getChildAt(i).x -50;
explode.y=stage.getChildAt(i).y -50;
explode.addEventListener("animationend", endAnimation);
function endAnimation(event) {
stage.removeChild(explode);
}
stage.addChild(explode);
stage.removeChildAt(i);
lives--;
lives_txt.text = "LIVES: " + lives;
}
stage.removeChild(boss02_bullet_first);
intersection = null;
}
}
else if(stage.getChildAt(i).name == "boss02"){
var intersection = ndgmr.checkRectCollision(stage.getChildAt(i),bullet);
if(intersection != null){
stage.getChildAt(i).st.health = stage.getChildAt(i).st.health - bullet.st.damage;
console.log(stage.getChildAt(i).st.health);
console.log(bullet);
if(stage.getChildAt(i).st.health <= 0){
score+=500;
score_text.text="SCORE: "+score;
explode = explode_fx.clone();
explode.x=stage.getChildAt(i).x +50;
explode.y=stage.getChildAt(i).y +50;
explode.addEventListener("animationend", endAnimation);
function endAnimation(event) {
stage.removeChild(explode);
}
stage.addChild(explode);
stage.removeChildAt(i);
}
stage.removeChild(bullet);
intersection = null;
}
}
}
}
}
这是控制台输出。 我正在使用ndgmr.checkRectCollision进行碰撞检测。似乎无法找到该错误。还有其他必要的代码让我知道谢谢。
答案 0 :(得分:0)
我正在研究的最新EaselJS原型中有用的东西:
if ( shipBox.x >= enemyBox.x + enemyBox.width || shipBox.x + shipBox.width <= enemyBox.x || shipBox.y >= enemyBox.y + enemyBox.height || shipBox.y + shipBox.height <= enemyBox.y )
{
return false;
}else{
return true;
}
当我试图绘制边界框时,这同样对我有帮助:
function DrawBoundingBox(collider){
var bb = new createjs.Shape();
bb.graphics.clear().beginStroke("black").drawRect(collider.x, collider.y, collider.width, collider.height);
bb.regX = collider.width / 2 + collider.x;
bb.regY = collider.height / 2 + collider.y;
bb.x = collider.x;
bb.y = collider.y;
stage.addChild(bb);
stage.update();
}