私は猫を追う犬を含むゲームを持っています。犬が猫div
に触れると、クラスが変化して「死んだ」猫が現れ、その後削除されます。私はまた、死んだ猫の画像のより小さいバージョンを右上隅のdiv
に表示させて、スコアキーパーのようにしたいと思います。 本質的に猫が殺されるたびに、小さな画像がスコアdiv
にポップアップします。 問題は、小さな画像用にprepend
を配置した場合、それぞれの死んだ猫のために1枚だけではなく、無期限に画像を追加し続けることです。私はそれが衝突検出のためのif文の中にあるので推測していますが、私はそれを回避する方法を見つけられません。 私はそれを関数getCollision
の外に移動させようと試みましたが、トリガーを付けようとしました...私がやったことは、私が比較的単純な問題であると思うものを解決するために働くようには見えません。別のdivの変更/削除時に別のdivに画像を追加
誰かが正しい方向に私を助けたり指摘したりすることができれば、私は大いに感謝しています! - 死んだ猫がトリガされる削除のsetTimeout前に発生する可能性がある衝突検出の別の反復
"use strict";
$(document).ready(function() {
console.log("linked");
var $dog = $('.dog'); //global variables
var body = $('body');
var $cat = $('.cat');
function newCat() { //creates a div w/ class cat, appends to body
var cat = $('<div class="cat"></div>');
body.append(cat);
setInterval(function() { //moves cats randomly
cat.css("top", Math.random() * window.innerHeight);
cat.css("left", Math.random() * window.innerWidth);
}, 1500)
}
for(var i=0; i<10; i++) { //create multiple cats
newCat();
}
function getCollision(cat) { //collision detection for elements
$(cat).each(function(index, cat) { //loops through each cat div
var $dogH = $dog.outerHeight(true);
var $dogW = $dog.outerWidth(true);
var $dogX = $dog.position();
var $dogY = $dog.position();
var $catH = parseInt($(cat).css('height').replace('px', ''))
var $catW = parseInt($(cat).css('width').replace('px', ''))
var $catX = parseInt($(cat).css('left').replace('px', ''))
var $catY = parseInt($(cat).css('top').replace('px', ''))
if ($dogX.left < $catX + $catW &&
$dogY.top < $catY + $catH &&
$catX < $dogX.left + $dogW &&
$catY < $dogY.top + $dogW) {
$(cat).addClass('dead');
$('.score').prepend('<img src="images/cat_dead_sm.png" />');
setTimeout(function() {
$('.dead').remove(); //removes dead cat
}, 2500);
console.log('boom');
};
});
};
$(document).mousemove(function(event) { //moves dog div to follow cursor
$('.dog').css({
'top': event.pageY,
'bottom': event.pageX,
'left': event.pageX,
'right': event.pageY
});
$cat = $('.cat')
getCollision($cat); //calls getcollision to check distance
})();
// function keepScore() {
// $('.score').prepend('<img src="images/cat_dead_sm.png" />');
// }
// };
});
ブライアンさんのコメント@に加えて: - あなたは完全に死んだ猫の衝突検出を避けることができ
あるいはさらに良い:私達はちょうどそれがこの問題を回避するために、すでに死んだかどうかを確認する必要があり
あなたはあなたの衝突関数にjQueryオブジェクト全体を渡しているようですが、関数内で引数を文字列として扱っています。get getCollision( '.cat'); // getcollisionを呼び出して距離を確認する '代わりに'を呼び出すことで、次に '特定のcatをターゲットにするには' each() 'を' $(this) 'と併用することをお勧めします。同時に標的化される。あなたがjsfiddleを組み立てることができれば、奇妙に働いた死んだ猫の衝突検知を避けるために、 – Sam0