Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.09.2012, 00:29   #31
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Это не площадка для споров на косвенно связанные темы, ...русским языком напечатал.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 08.09.2012, 07:47   #32
Виталий Желтяков
Старожил
 
Аватар для Виталий Желтяков
 
Регистрация: 19.04.2010
Сообщений: 2,702
По умолчанию

Цитата:
Вы как-то говорили слова с таким смыслом: "Начальная картинка грузится быстро, чтобы у игрока сложилось впечатление... etc"
То есть, по вашему, надо, чтобы стартовая страница грузилась долго?
Цитата:
Вообщем, мы не поймём друг друга
Я Вас прекрасно понял, а Вы меня нет.

По вашим рассуждениям, идеальная игра это та, которая не предвзято удовлетворит желания пользователя. Так как люди всегда смотрят на вещи субъективно, то такая игра должна быть свободной (open source).
Как я понимаю, Вы просто не знаете историю свободных игр.

В начале 2000-х в рунете было около десятка свободных игр, где сами игроки создавали тот "виртуальный" мир, который хотели. Все эти игры вымерли за 1-2 года из-за неспособности конкурировать с коммерческими проектами. Они вымерли потому, что в их сообществах не было достойных креативщиков и из-за этого игра выглядела убого и страшно.
Виталий Желтяков вне форума Ответить с цитированием
Старый 08.09.2012, 23:39   #33
Виталий Желтяков
Старожил
 
Аватар для Виталий Желтяков
 
Регистрация: 19.04.2010
Сообщений: 2,702
По умолчанию

06.09.12 – День 170
При редактировании стартового меню обнаружил, что кнопки с двумя строками текста отображаются неправильно (не центрируются по вертикали). Пришлось потрать уйму времени для нахождения корректного (для моего случая) способа отображения кнопок. Я остановил свой выбор на способе с использованием line-height и внутреннего блока. Не совсем красиво, но работает.

Контейнер
Код HTML:
.conteiner: {line-height:60px;}
Внутренний блок
Код HTML:
.block: {display:inline-block; vertical-align:middle; line-height:1.2;}
Получилось в итоге довольно неплохо.
Изображения
Тип файла: jpg enter-menu.jpg (34.9 Кб, 288 просмотров)
Виталий Желтяков вне форума Ответить с цитированием
Старый 08.09.2012, 23:43   #34
Виталий Желтяков
Старожил
 
Аватар для Виталий Желтяков
 
Регистрация: 19.04.2010
Сообщений: 2,702
По умолчанию

06.09.12 – День 170 (продолжение)
Протестировал возможность использования текстур с шумом дабы предать кнопкам и фону эффект реальности. Тесты дали отрицательные результаты. Текстуры малого разрешения смотрятся плохо. Использовать текстуры высокого разрешения накладно – лишняя нагрузка на стартовую страницу. К тому же hover-эффект притормаживал.

Для новичков отмечу, что иногда приходиться в процессе разработки проекта отказываться от части идей в угоду общей эффективности. Пример отказа от текстур с шумом тому доказательство.

Приступил к самой «весёлой» части – отладка модулей регистрации, авторизации и настроек аккаунта. Это тривиальная (стандартная) задача для web-программиста, которая решается достаточно легко для общего случая. Но это для общего случая, а у нас FullAjax-система.

FullAjax-системы – это системы, где почти всё клиент-серверное взаимодействие идёт при помощи запросов из JS (можно ещё через фреймы, но это плохой способ). Преимуществами таких систем являются:
  • Малый трафик;
  • Отсутствие перезагрузки страницы.
Сейчас для игр важно только второе преимущество. Благодаря отсутствию перезагрузки у игрока создаётся впечатление, что он работает с обычным приложением, с полноценной игрой. Это очень важный момент. Не FullAjax-система на фоне современных игр будет изначально смотреться уродливо.

Но у FullAjax-систем есть недостатки:
  • Нет истории переходов (действий). Кнопка «Назад» становиться бесполезна;
  • Нет стандартных индикаторов загрузки данных, необходимо делать свои;
  • Более сложная организация системы.
Чуть позже я рассказу, как правильно, организовать FullAjax-систему, а пока посмотрим, как это влияет на организацию стартового меню.
Виталий Желтяков вне форума Ответить с цитированием
Старый 08.09.2012, 23:44   #35
Виталий Желтяков
Старожил
 
Аватар для Виталий Желтяков
 
Регистрация: 19.04.2010
Сообщений: 2,702
По умолчанию

06.09.12 – День 170 (продолжение)
В FullAjax-системах все запросы направляются к одному исполняющему файлу, у меня index.php. Конечно, можно сделать систему с несколькими исполняющими файлами, но это грозит проблемами с синхронизацией и очередью обработки. В итоге получается, что один исполняющий файл обрабатывает все возможные случаи. Часть случаев легко укладывается в возможности API (интерфейса взаимодействия), а вот с другой частью возникают проблемы.

Разберём возможные случаи работы с аккаунтом:
  1. Авторизация (передача серверу логина и пароля, установка кук и занесение в сессию пользовательских данных);
  2. Инициализация стартовой страницы по запросу пользователя из игры (передача данных с сервера);
  3. Регистрация (передача серверу регистрационных данных, создание аккаунта, установка кук и занесение в сессию пользовательских данных);
  4. Изменение регистрационных данных (передача новых данных и пароля, изменение аккаунта, изменение кук);
  5. Выход из аккаунта (закрытие сессии, обнуление кук, инициализация стартовой страницы);
  6. Инициализация игры при входе (передача серверу кук логина и пароля, занесение в сессию пользовательских данных, передача игровых данных);
  7. Инициализация игры при потере сессии (передача серверу кук логина и пароля, занесение в сессию пользовательских данных, передача игровых данных);
  8. Инициализация стартовой страницы при отсуствии/потере кук (закрытие сессии, инициализация стартовой страницы).
Вся проблема кроется в порядке проверки этих пунктов.

Определяющими факторами являются: наличие кук, наличие в сессии пользовательских данных и факт первоначальной загрузки страницы. Если при загрузке страницы, кук логина и пароля нет (или они обнулённые), то производим инициализацию стартовой страницы. Если есть, то инициализацию самой игры (игроку незачем видеть всегда стартовую страницу, лучше сразу его перебрасывать в игру). Если сессия в процессе игры оказалась потерянной, то производим действия аналогичные первоначальной загрузки страницы. Остальные действия производим по командам пользователя за исключением одного: «Инициализация стартовой страницы при отсуствии/потере кук». Здесь самый тонкий момент. Если добавить проверку кук, то нам придётся при каждом запросе пользователя обращаться к БД для проверки данных. Это ресурсоёмко. Задумаемся о том, насколько важна нам эта проверка. Без этой проверки пользователь может подобрать сессионную куку и выполнить действия за другого пользователя. Не безопасно, но вероятность подбора сессионной куки равна отношению числа сессий пользователей к 32^36, что является невероятно малым.

Короче на проверку кук можно не отвлекаться. Да, в нашем проекте есть дыра, но вряд ли ей кто-нибудь воспользуется.

Также есть ряд действий (например, регистрация), которые выполняются при отсутствии пользовательских данных в сессии. Их необходимо обрабатывать первыми, так как иначе до них не дойдёт очередь.

Получается следующая схема обработки поступающих данных:
  • Вначале проверяем запрос на команды без сессионых данных. Если это они, то выполняем их, иначе идём дальше.
  • Вначале проверяем наличие в сессии данных пользователя. Если их нет, то переходим к инициализации.
  • Затем проверяем является ли поступивший запрос результатом старта страницы (запрос инициализации).
  • Если у нас запрос инициализации, а кук нет, то перебрасываем на стартовую страницу.
  • Если у нас запрос инициализации, и куки есть, то проверяем данные и перебрасываем в игру.
  • И только после этих проверок мы можем сказать, что у нас пользовательская команда, и можем её выполнить.
Понимаю, представить это сложно, но нужно.

Последний раз редактировалось Виталий Желтяков; 09.09.2012 в 08:50. Причина: Критическое исправление
Виталий Желтяков вне форума Ответить с цитированием
Старый 09.09.2012, 15:02   #36
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Нарисуй блок-схему, с ней больше читающих поймут.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 09.09.2012, 16:49   #37
Виталий Желтяков
Старожил
 
Аватар для Виталий Желтяков
 
Регистрация: 19.04.2010
Сообщений: 2,702
По умолчанию

06.09.12 – День 170 (продолжение)
На блок-схеме это будет выглядеть так:
Изображения
Тип файла: jpg block-author.jpg (25.3 Кб, 277 просмотров)
Виталий Желтяков вне форума Ответить с цитированием
Старый 09.09.2012, 16:50   #38
Xezon
Mazafaka stenograf
Форумчанин
 
Аватар для Xezon
 
Регистрация: 12.01.2012
Сообщений: 229
По умолчанию

Виталий, у меня вопрос, с помощью какого ПО, вы, создаете игру, то есть, ПО которое отвечает за графику, и текстуры ко всему вы все рисовали сами, или скачали часть?
Xezon вне форума Ответить с цитированием
Старый 09.09.2012, 19:48   #39
Виталий Желтяков
Старожил
 
Аватар для Виталий Желтяков
 
Регистрация: 19.04.2010
Сообщений: 2,702
По умолчанию

Цитата:
Виталий, у меня вопрос, с помощью какого ПО, вы, создаете игру, то есть, ПО которое отвечает за графику, и текстуры ко всему вы все рисовали сами, или скачали часть?
Для 3D моделирования в основном используется Blender.
Абсолютное большинство моделей мои, накоплены за много лет. Остальные бесплатные.
С текстурами так же - либо бесплатные, либо мои.
Для создания текстур и постобработки используется только Gimp.
Для написания кода - RJ TextEdit.
Для работой с Mysql - HeidiSQL.
Виталий Желтяков вне форума Ответить с цитированием
Старый 13.09.2012, 21:09   #40
Виталий Желтяков
Старожил
 
Аватар для Виталий Желтяков
 
Регистрация: 19.04.2010
Сообщений: 2,702
По умолчанию

10.09.12 – День 171
Проделал большую работу – подключил и протестировал модуль авторизации, истории, регистрации, справки в главном меню. Модули авторизации и регистрации взяты из предыдущего проекта и адаптированы под текущий.

Я использую стандартную схему авторизации «логин» - «пароль». Авторизацию через сервисы ключей (OpenID, ключи соц.сетей) не планирую, так как для соц.сетей будут организованны отдельные сервера игры. В моей схеме в куках клиента и на сервере сохраняется логин, шифрованный пароль и ID пользователя. Пароль шифруется при помощи случайной соли и криптографического алгоритма md5, т.е. я храню в пароль в не открытом виде.

Насколько надёжен такой способ авторизации? Если не рассматривать возможности взлома на физическом уровне и уровне ОС, то злоумышленнику нужно либо украсть/подобрать пароль в явном виде, либо украсть куки. Это он может сделать либо имея физический доступ к браузеру пользователя, либо прослушивая канал пользователя. От первого мы никак защититься не можем, а от второго не будем. Мы можем использовать шифрованный канал, но так как я планирую интеграцию игры с соц.сетями, то все критические действия (денежные переводы) будут осуществляться средствами соц.сети по их шифрованным каналам.

Прошу обратить внимание на два момента:
  • Игра работает только при включённых куках. Все, кто куки отключает, играть не смогут. Куки у меня сохраняются на 4 месяца, т.е. коротких сессий у меня нет. Причина такого подхода – использование стандартного сессионого механизма, в котором возможна потеря текущей сессии.
  • На клиенте в куках я храню ID пользователя в открытом виде. Он нужен для оптимизации запросов к базе и проверки на потерю/подмену сессии. В рунете существуют много параноиков, которые считают, что хранение в куках ID пользователя – это дыра в безопасности. Это не так. При правильной организации (использование других параметров идентификации) это всего лишь немного данных о пользователе.

Также, естественно, добавлены функции проверки вводимых данных. Проверка двойная. На клиенте проверка осуществляется при помощи следующей функции JS:
Код:
<input type=text id=authlogin name=login maxlength=20 onKeyUp='CheckMsg(this);' />
//-------------------------- Проверка сообщения ------------------------------//
function CheckMsg(element) {
	// Считываем вводимое значение
	var msg = $(element).val();
	if (msg == "") {
		$(element).setClass('msggood');
		return false;
	}
	else {
		var check = /[^(\w)|(\А-Яа-я-&=.,@():;!?\[\])|(\s)]/;
		// Проверка длины сообщения
		if (msg.length > $(element).attr("maxlength")) {
			$(element).setClass("msgbad");
			return false;
		}
		// Проверка на допустимые символы
		else if (check.exec(msg) != null) {
			$(element).setClass("msgbad");
			return false;
		}
		else {
			$(element).setClass("msggood");
			return false;
		}
	}
}
//----------------------------------------------------------------------------//
Эта функция проверяет вводимые данные и если данные не соответствуют формату, то она меняет стиль поля ввода на красный (см. рисунок). Также имеются информационные стилизованные сообщения об ошибках и будут интерактивные подсказки (забыл их подключить). Короче, я уделяю (и советую всем) особое внимание процессу авторизации и регистрации в плане уменьшения ошибок пользователя.
Изображения
Тип файла: jpg author.jpg (24.3 Кб, 246 просмотров)
Виталий Желтяков вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Электронный дневник на Joomla sashmedv WordPress и другие CMS 6 26.01.2012 12:53
Что нужно знать для разработчика игр. 13th Свободное общение 38 14.01.2012 17:32
Дневник изучения С++ Arcanis Общие вопросы C/C++ 2 26.05.2011 12:09
Дневник в Delphi TaYgA Помощь студентам 18 12.10.2009 17:56