[英]Collision detection in Javascript game made using createJS
您好,我正在制作太空射擊游戲,我想檢查老板和玩家子彈之間的碰撞。 我面臨的問題是,可以很好地檢測到老板子彈與玩家之間的碰撞,但是老板正在與自己的子彈相撞,失去了所有的健康,這只會在動畫進入畫布的左側時發生。 這是我的代碼
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進行碰撞檢測。 似乎無法找到該錯誤。任何其他必要的代碼都會讓我知道,謝謝。
我正在研究的最新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();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.