Приветствую Вас Гость
Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]

  • Главная страница
  • Форум (Новoe на форуме)
  • Быстрый старт
  • Блог
  • Видео уроки
  • Каталог файлов
  • Статьи и уроки
  • Юзербары
  • FAQ
  • Обратная связь
  • Для начинающих [9]
    Заморочки [4]
    Для немного понимающих 39длл [9]
    Сложный уровень [4]

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0

    [ Кто нас сегодня посетил ]
    Главная » Статьи » Статьи » Сложный уровень

    Передача координаты через один байт

      От меня давно не было не каких статей- эта вам так, для вкуса на пробу…  Метод передачи координаты одним байтом, ого как замахнулся? Да? Казалось бы, на деле всё проще… Пока что статья теоретическая, но метод свободно использовался в мморпг Век Бивней… Позже напишу скрипты, то есть практическую часть…

    Когда разработка ВБ(Век Бивней) толька начиналась,  я всё время пытался экономить на передачи данных, и мечтал о передачи координаты Х через один байт) Карта в игре была в длину более 20,000пх.  Долго думая, в большой тетрадки я нашел способ! Всё неожиданно просто…


       Представим что карта в игре, 255пх в ширину. Значит  если игра платформер (вид с боку), то передавать координату Х можно будет через 1 байт.  Но 255 нам мало, умножим на 3, и карта получается 760, но теперь игрок может передвинуться не меньше чем на 3пх.  То есть увеличивая минимальный сдвиг игрока (3пх), или минимальную скорость движения- мы увеличиваем карту. Конечно можно сделать карту 1270пх (х5), и будет не плохо…  Некоторым хватает. Но для ВБ этого было мало, и вот что я сделал. Разделил карту по оси Х, на промежутки длиною 255пх, и когда игрок проходил первые 255пх, на сервер отправлялось количество пройденных 255пх за спиной. Назовем его «прибавочный коэффициент» .  Если за спиной есть 255пх, значит прибавочный коэффициент= 1. Грубо говоря как масштаб  1:255.  Сложно понять, но вот набор случаев:

    Игрок стоит на 254пх, а значит прибавочный коэффициент= 0.

    Когда игрок стоит на 260пх,  прибавочный коэффициент= 1

    Когда игрок стоит на 500пх,  прибавочный коэффициент= 1

    Когда игрок стоит на 530пх,  прибавочный коэффициент= 2

    Кто-то скажет- но ведь это 2 байта. Ну смотря как вы пользуйтесь, если у вас один промежуток 255пх, и игрок носиться быстро- то конечно будет получаться почти как 2 байта. Но не забываем то о  чём я писал с начало- минимальный сдвиг игрока, или минимальная скорость… В ВБ минимальная скорость была около 30пх- слишком много конечно, это было видно когда игрок будто не слушался и не хотел останавливаться… Но для некоторых игр- такой способ самое то!

    Что бы рассчитать какого размера будет карта в игре, вот что нужно:  

    (255* минимальную скорость)*255

    Это теоретическая часть, позже, как и говорил- напишу практическую часть и скрипты…

    Вот не большие полезные штуки, если кто собрался экспериментировать:

    прибавочный коэффициент = floor(x/255);

    прибавочный коэффициент отправляется толька при изменении

    Для одной оси, нужно передавать всего 2 переменные: прибавочный коэффициент, и xn  (то что не входит в прибавочный коэффициент,  незабываем учитывать минимальную скорость)

    Что бы «расшифровать» клиенту, пришедши координаты другого клиента нужно :

    прибавочный коэффициент*255 +( xn * минимальную скорость)

    Для тех кто хочет чего то большего, скажу  что можно сделать каждому клиенту свои расчёты, то есть свою минимальную скорость!

    Удачных экспериментов!

    Категория: Сложный уровень | Добавил: zxc76 (29.09.2011)
    Просмотров: 1562 | Комментарии: 6 | Теги: экономия, оптимизация, байт, координата | Рейтинг: 0.0/0
    Всего комментариев: 6
    6  
    По мне дак самое то))) И какая здесь нагрузка, о чём вы?))) Серву не обязательно эти несколько жалких чисел перемножать... Да и если перемножить? там же вообще не много))
    Грубо говоря 50% экономии)

    5  
    Когда я начал писать серв на C++ у меня так же было, правда сначала приходил 1 байт координат с значением от 1 до 256, а за тем второй коэфициент умножения координат. И к примеру если x объекта равен был 760, то все это расчитывалось на серве не сложной формулой: координата + 256 * коэфицент. таким образом 760 это 248 + 256 * 2 Но когда портировал 39dll подумал нафига перегружать серв раз для координат и short подойдет)) извиняте за орг-ие ошипки)))

    4  
    *в пункт Б, на сервер кидаешь скорость обьекта Ноги и координаты пункта Б...
    Опечатка небольшая

    3  
    Вообще то идея хорошая, но согласен с Филом и segg3r ,это только лишняя нагрузка((, Ладно бы на клиент, так и на сервер тоже. Если хочешь сэкономить, то лучше будет мне кажется так. Вкратце:передача координат происходит в случае какого-нить действия, чтобы не грузить трафик координатами объектов, которые тупо стоят(я всмысле люди АФК, а координаты все равно передаются). Потом к примеру можно сэкономить на простом маршруте, к примеру объект(Ноги) получили команду идти с пункта А в пункт Б, на сервер кидаешь координаты обьекта Ноги и координаты пункта Б, он клиентам и все, передача не идет, сэкономишь и разбежка будет небольшая. Ну в общем вот как то так, в зависимости от ситуации=)

    2  
    Действительно Я уже давно перестал гоняться за экономией лишних байтов. Сейчас у большинства людей есть быстрый безлимитный интернет, а нагружать сервер/клиент лишними вычислениями как-то неправильно.

    1  
    один только вопрос... нахрена?

    Добавлять комментарии могут только зарегистрированные пользователи.
    [ Регистрация | Вход ]
    -->


    Логин:
    Пароль:

    Хостинг от uCoz