我有一款遊戲涉及一隻狗追逐貓;在狗接觸貓div
時,班級發生變化,以便出現「死」貓,然後將其移除。我還想在右上角的div
中顯示一個較小版本的死貓圖像,作爲一種得分守護者。 因此,基本上每當一隻貓死亡時,一個小圖像就會彈出div
的分數。 問題是如果我的prepend
放置在現在的小圖像上,它會無限期地添加圖像,而不是每隻死貓只添加一張圖像。我猜這是因爲它是在這個if語句中用於碰撞檢測,但我無法找出解決方法。 我試過把它作爲一個函數,把它移到getCollision
函數之外,試圖附加一個觸發器......我所做的沒有任何事情似乎可以解決我認爲是一個相對簡單的問題。在改變/刪除另一個div時將圖像添加到不同的div
如果任何人都可以幫助或指引我正確的方向,我將不勝感激!下面是代碼:
"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對象傳遞到你的碰撞函數中,但是在函數中你將這個參數作爲一個字符串來處理,試試'getCollision('.cat'); //調用getcollision來檢查distance',然後我會推薦使用'each()'用'$(this)'來定位特定的貓,就像目前看起來有時候所有的'.cat'都有風險同時瞄準。如果你可以組裝一個jsfiddle,它將更容易調試 – Sam0