Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 18.04.2020, 21:33
Новичок на форуме
Отправить личное сообщение для gunner17 Посмотреть профиль Найти все сообщения от gunner17
 
Регистрация: 06.03.2019
Сообщений: 9

Убрать наложения на канвасе
Всем привет! Пишу игрушку на канвасе. Столкнулся с такой проблемой. Персонажи на поле канваса появляются одновременно, но в рандомных местах поля. Персонаж это спрайт, имеет {width:100, height:100}. Math.random задает координаты x, y каждого персонажа. Иногда получается так, что при рандоме 1-го персонажа {x:54, y:65}, у второго {x:58, y:69}. То есть персонажи накладываются друг на друга. как сделать так, что бы они не накладывались?
Ответить с цитированием
  #2 (permalink)  
Старый 18.04.2020, 21:51
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,123

gunner17,
зачем плодить темы?
https://javascript.ru/forum/dom-wind...tml#post521549
Ответить с цитированием
  #3 (permalink)  
Старый 18.04.2020, 22:49
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,123

canvas рандомный вывод блоков без наложения
gunner17,

<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
</head>

<body>
<canvas width="700" height="500" style="border:1px solid #ccc;margin:10px;cursor:crosshair;" id="canvas"></canvas>
<script>
var canvas = document.getElementById('canvas'),
    ctx = canvas.getContext('2d');
var arrayOfSectors = [],
    column = 5,
    row = 4,
    length = column * row,
    sectorWidth = canvas.width / column,
    sectorHeight = canvas.height / row,
    randomWidth = sectorWidth - 100,
    randomHeight = sectorHeight - 100;

function getPos() {
    if (!arrayOfSectors.length) {
        arrayOfSectors = Array.from({
            length
        }, (v, i) => i);

    }
    var i = arrayOfSectors.splice((Math.random() * arrayOfSectors.length | 0), 1)[0];
    var h = i / column | 0;
    var w = i % column;
    var x = sectorWidth * w + Math.floor((Math.random() * randomWidth)),
        y = sectorHeight * h + Math.floor((Math.random() * randomHeight));
    return {x, y}
}

function draw() {
    var {x, y} = getPos();
    ctx.fillStyle = '#66FF00';
    ctx.beginPath();
    ctx.fillRect(x, y, 100, 100)
    ctx.fill();
    ctx.stroke();
}

function loop() {
    ctx.clearRect(0, 0, canvas.width, canvas.height);
    draw();
    draw();
    window.setTimeout(loop, 1000)
}
loop()
</script>
</body>

</html>
Ответить с цитированием
  #4 (permalink)  
Старый 21.04.2020, 22:24
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,123

gunner17,
Добавление непересекаемых блоков на страницу

по ссылке строка 4 добавить https
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рандомные координты на канвасе без наложения gunner17 Элементы интерфейса 1 20.03.2020 00:19
Странное поведение фонта на канвасе Байт Общие вопросы Javascript 3 27.10.2019 12:16
Как убрать кнопки Next/Prev/Finish? AlexPsp Элементы интерфейса 5 01.08.2018 14:16
Убрать display none в последнем элементе SLameN Элементы интерфейса 4 14.08.2015 18:12
Помогите убрать отступ в нижней части сайта Georka Элементы интерфейса 0 25.10.2014 09:25