Игра html5 canvas - как добавить поддержку сетчатки
Я создаю игру на холсте HTML5 для iPhone. Я хотел бы поддержать отображение сетчатки и не сетчатки.
Мой вопрос в том, как я могу поддерживать отображение сетчатки и не сетчатки?
I.E., какова общая реализация для этого? Я пишу игру, используя измерение iPhone, а затем добавляю поддержку сетчатки? Или я могу создать размер сетчатки для игры и добавить поддержку не сетчатки? Лучше ли иметь два изображения, одну сетчатку - одну сетку? или просто масштабировать изображение сетчатки вниз? Есть ли у меня отдельные размеры холста для сетчатки и не сетчатки? Нужно ли масштабировать ввод мыши?
В принципе, я понятия не имею об общей идее/логике для реализации обоих.
Cheers,
J
Ответы
Ответ 1
Вы используете devicePixelRatio для разделения экранов сетчатки от обычных дисплеев
Ваши игровые логические координаты (позиции спрайтов и т.д.) должны работать независимо от координат экрана, которые будут всегда умножаться на экране сетчатки.
Ваши графические активы должны иметь две версии. Версия с высоким разрешением и 50% уменьшенная нормальная версия. Когда вы работаете на экране сетчатки, вы рисуете холст размером 2 раза, измените размер с помощью CSS и на этом холсте используйте активы с высоким разрешением.
Ответ 2
Новая статья только что была опубликована по этой теме на html5rocks.com:
увеличьте ширину и высоту холста с помощью devicePixelRatio/webkitBackingStorePixelRatio, а затем используйте CSS, чтобы масштабировать его до нужного размера логического пикселя. Принимая наш вышеприведенный случай, когда Chrome сообщает о файле webkitBackingStorePixelRatio 1 и devicePixelRatio из 2, мы бы масштабировали размеры холста на 2/1, т.е. Умножали их на 2, затем мы использовали бы CSS для его уменьшения.
Ответ 3
Я знаю, что это старый пост, но я подумал, что обновляю его с помощью решения, которое я реализовал.
1: Я использовал два набора изображений:
- один для отображения не сетчатки (размер 1:1),
- и еще один набор для сетчатки, который в два раза больше.
в зависимости от того, какое устройство используется, зависит от того, какой набор загружен.
2: Затем я изменяю размер холста (это ключ к нему)
NON RETINA
var canvas = document.createElement('myCanvas');
canvas.width = 320;
canvas.height = 480;
canvas.style.width = "320px";
canvas.style.height = "480px";
СЕТЧАТКИ
var canvas = document.createElement('myCanvas');
canvas.width = 640;
canvas.height = 960;
canvas.style.width = "320px";
canvas.style.height = "480px";
Обратите внимание, что canvas.style.width
и height
одинаковы независимо от того, используете ли вы сетчатку или нет.
И это действительно все, что есть!