Я не хочу проверять столкновение с радиальными элементами.
Проблема в том, что в настоящее время я проверяю только пиксели в виде прямоугольника, потому что другие изображения являются родными с HTML-элементами.
Я использую холст только для рисования граничного фона, чтобы проверить альфа-прозрачность.
this.checkCollision = function checkCollision() {
var width = 34;
var height = 32;
var image = _context.getImageData(_position.x - (height / 2), _position.y - (width / 2), width, height);
var pixels = image.data;
var size = image.data.length;
// HERE I WANT TO CHECK A RADIAL AREA
for(var index = 0; index < size; index += 4) {
var RED = image.data[index];
var GREEN = image.data[index + 1];
var BLUE = image.data[index + 2];
var ALPHA = image.data[index + 3];
if(_debug) {
document.querySelector('#debug').innerHTML = JSON.stringify({
POSITION: _position,
INDEX: index,
COLOR: {
R: RED,
G: GREEN,
B: BLUE,
A: ALPHA
}
}, 0, 1);
}
if(ALPHA !== 0) {
return true;
}
}
_context.putImageData(image, 0, 0);
return false;
};
Предварительный просмотр
Вот рабочая скрипка:
https://jsfiddle.net/2bLfd6xp/
Как я могу выбрать радиальный диапазон пикселей на getImageData
, чтобы проверить коллизию с альфа-прозрачностью от boundary.png
?
Моя идея состоит в том, чтобы изменить массив данных пикселей отсюда:
var image = _context.getImageData(_position.x - (height / 2), _position.y - (width / 2), width, height);
и удалите невидимый edges
. Но как лучше всего вычислить из массива пикселей на основе прямоугольника радиальную область для удаления этих нежелательных пикселей?
Для образца:
var image = _context.getImageData(_position.x - (height / 2), _position.y - (width / 2), width, height);
var radial_area = selectRadialArea(image, radius);
function selectRadialArea(pixelArray, radius) {
/*
Modify `pixelArray` with given `radius`...
All pixels outside the `radius` filled with `null`...
*/
return theNewArray;
}