Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Коллизия объектов JavaScript - Canvas

Пользователь удален Ученик (162), закрыт 4 года назад
Есть код, который рисует монетки на холсте
function generateCoins() {
if (coin.sx >= 112) {
coin.sx = 0;
}
coin.sx += coin.sw;
for(i = 0; i < 3; i++) {
coins[i] = {
status: true,
x: coin.x * i,
width: coin.width,
id: i
};
coin.y = height - coin.height - land.height;
if (player.x + player.width >= coins[i].x + coins[i].width) {
player.score += 1;
coins[i].status = false;
}
if (coins[i].status == true) {
ctx.drawImage(coin_skin, coin.sx, coin.sy, coin.sw, coin.sh, coin.x * i, coin.y, coin.width, coin.height);
}
}
}

Вот сама коллизия if (player.x + player.width >= coins[i].x + coins[i].width) {
player.score += 1;
coins[i].status = false;
}
Условие некорректное. Оно получается выполняется, когда объект (персонаж) пересек объект (монетку) или находится на ой же позиций по оси X. Мне нужно что бы status просо стал false и когда я пересек объект условие не выполнялось. Иначе если вернуться обратно монетки появляются. Не могу сообразить написать нормальную коллизию
Лучший ответ
Elepsis Eclipse Гений (64081) 4 года назад
if ( coins[i].status && ( player.x + player.width >= coins[i].x + coins[i].width ) ) {

Если статус был true и оно уже один раз сработало, стало false, больше не сработает...
Но напрашивается вопрос, нафига хранить в объекте уже "съеденную" монетку... пересек - посчитал - забыл...

P.s. if (coins[i].status == true)

Вместо этого пишут →    if (coins[i].status )
Остальные ответы
Похожие вопросы