LINUX.ORG.RU

Мысштабирование игры под различные девайсы. Что не так с андроидом?

 , , ,


1

1

Пишу игрушки на HTML5 фиксированного размера под десктоп и мобильные платформы. То, что в файрфоксе в CSS свойство zoom не определено - меня сейчас не сильно беспокоит. Меня беспокоит, почему в десктопном хроме размеры экрана определяются корректно, а вот в мобильном нет... $(window).height() даёт вообще чёрти что, window.screen.availHeight - уже по-лучше, но всё равно не спасает положение. Посмотрите, пожалуйста, мой скрипт, и подскажите, что я делаю не так.

$(document).ready(function() {
	function applyScale() {
		var scaleFactor = 1, scaleFactorX = 1, scaleFactorY = 1;
		var width, height;

		// why adnroid is so strange?
		if (isAndroid()) {
			var width = window.screen && window.screen.availHeight || $(window).width();
			var height = window.height && window.screen.availWidth || $(window).height();
		} else {
			var width = $(window).width();
			var height = $(window).height();
		}

		if (width < 1450) {
			scaleFactorX = width / 1450;
		}

		if (height < 1024) {
			scaleFactorY = height / 1024;
		}

		scaleFactor = scaleFactorX < scaleFactorY ? scaleFactorX : scaleFactorY;

		if (scaleFactor < 0.1) {
			scaleFactor = 0.1;
		}

		$('body').css('zoom', scaleFactor);
	}

	$(window).resize(function() {
		applyScale();
	});

	applyScale();
});
var width, height;

// why adnroid is so strange?
if (isAndroid()) {
	var width = window.screen && window.screen.availHeight || $(window).width();
	var height = window.height && window.screen.availWidth || $(window).height();
} else {
	var width = $(window).width();
	var height = $(window).height();
}


Я не знаю ваших хтмэлев, но на мой взгляд width и height остаются неинициалированными.
В условии вы инициализируете локальные переменные, которые по выходу из скоупа уничтожаются.

andreyu ★★★★★
()
Последнее исправление: andreyu (всего исправлений: 1)
Ответ на: комментарий от andreyu

В js область видимости на блоки if, for etc не распространяется. То есть как входит, так и выходит. Но я вначале не писал бы var width, height; в данном примере.

EmgrtE ★★★★
()

Там есть еще outerHeight и, кажется innerHeight. Не помню уже, давненько не юзал такое в jquery.

Поправка, innerHeight не применим к объектам window и document.

EmgrtE ★★★★
()
Последнее исправление: EmgrtE (всего исправлений: 1)

В общем, зайюзай просто window.innerHeight на ванильке. Сто процентов, что в chrome получешь внутреннюю область окна.

EmgrtE ★★★★
()
Ответ на: комментарий от ii8_

Тут бывалые поговаривают, что ООП ненужно

Ага, аналитики уровня ЛОР

Valkeru ★★★★
()
Ответ на: комментарий от NightmareZombie

Это нормальная ситуация для JavaScript. Переменные существуют на уровне функций, а не блоков.

Спасибо, не знал этого. Но это жесть.

andreyu ★★★★★
()
Ответ на: комментарий от EmgrtE

В js область видимости на блоки if, for etc не распространяется. То есть как входит, так и выходит. Но я вначале не писал бы var width, height; в данном примере.

Угу, не поленился и проверил.

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

К этому сначала не можешь привыкнуть, а потом отвыкнуть. Заразная вещь )) . Там много нюансов, но оно не ругается до тех пор пока все не поламается и интерпретатор просто не в силах будет исправлять.

В общем, js не лучший пример для разработки, наверное.

EmgrtE ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.