Пятница, 22 Ноября 2024, 13:49

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Как рассчитать поле?
ozornickДата: Пятница, 30 Августа 2013, 10:45 | Сообщение # 1
уже был
Сейчас нет на сайте
Здравствуйте. Задумка игры на PHP. Допустим имеется карта 100х100. Часть карты должно быть видимо игроку, т.е обычное дело)
Как рассчитать видимое игровое поле размером 5х5...? На ум мало то приходит кроме ужасных вычислений и циклов.
Вот иллюстрация. Примерный вид общей карты и серым указана требуемая видимая часть.
http://yadi.sk/d/vVo_rGY98UhD4


Сообщение отредактировал ozornick - Пятница, 30 Августа 2013, 10:46
HerrPotapovДата: Пятница, 30 Августа 2013, 23:45 | Сообщение # 2
заслуженный участник
Сейчас нет на сайте
Ээээ. Ничего сложного, если известны координаты игрока.

Пример с картинки.
Если область видимости 2 клетки во все стороны, то получаем:

Код
$x = 54; //координаты игрока по оси x (горизонтальная ось)
$y = 54; //координаты игрока по оси y (вертикальная ось)

$upper_left_corner[x] = $x - 2;
$upper_left_corner['y'] = $y - 2;
// верхний левый угол имеет координаты 52/52

$upper_right_corner['x'] = $x + 2;
$upper_right_corner['y'] = $y - 2;
// верхний правый угол имеет координаты 56/52

$lower_left_corner['x'] = $x - 2;
$lower_left_corner['y'] = $y + 2;
// нижний левый угол имеет координаты 52/56

$lower_right_corner['x'] = $x + 2;
$lower_right_corner['y'] = $y + 2;
// нижний правый угол имеет координаты 56/56


Эти расчеты избыточны, для определения прямоугольной области видимости нам нужны только два угла - левый верхний и правый нижний (или наоборот).
Соответственно если нужно проверить находится ли точка с координатами M/N в области видимости:

Код
function is_visible($M, $N) {
    if( $M > $upper_left_corner['x'] AND $M < $lower_right_corner['x'] ) {
      if( $N > $upper_left_corner['y'] AND $N < $lower_right_corner['y'] ) {
        return true;
      }    
    }
    return false;
}


Discord: alpotapov#1741

Интервью с разработчиком WarCastle - Читаем и вникаем!


Сообщение отредактировал HerrPotapov - Пятница, 30 Августа 2013, 23:46
ozornickДата: Суббота, 31 Августа 2013, 09:33 | Сообщение # 3
уже был
Сейчас нет на сайте
Туговато идет) Суть понял. Но в дальнейшем все равно придетсяя пересчитывать, чтобы получить массив со всеми координатами. 52, 52 - 52, 53 - 52, 54 ...
А потом уже показать карту. Я мыслю так.
Код
// Размерность карты
$map_x = 15;
$map_y = 15;
// Размер видимой карты 7ч7
$map_vis = 7;
// Текущая координата
$self = 1157;
$ratio = floor($map_vis/2);
$center =  $self - $ratio;
// Текущий квадрат
$self_quad = array();
$quad_start = $center - ($map_x * $ratio);

for ($i = 0;$i < $map_vis; $i++)
{
  $self_quad = array_merge($self_quad, range($quad_start + ($i * $map_x), $quad_start + ($i * $map_x) + $map_vis - 1));
}
e-lenaДата: Понедельник, 23 Сентября 2013, 12:44 | Сообщение # 4
был не раз
Сейчас нет на сайте
приколько. где в такую поиграть?

миру мир
WoogyДата: Пятница, 29 Ноября 2013, 15:33 | Сообщение # 5
был не раз
Сейчас нет на сайте
Самая большая проблема при создании карты "мира" это нагрузка и визуализация ... Как только решается проблема с нагрузкой (разработана система кэширования , причем она сделана "регионами" ). Настает время сделать мини управление smile



Вообщем на ум приходить AJAX и слои (+ кэш) именно такой способ взял на вооружение я. Так же реализована система перемещения по карте (кликами)
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг