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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.04.2011, 20:26   #1
DimaTs
Пользователь
 
Регистрация: 14.04.2011
Сообщений: 60
По умолчанию Принадлежность точки клетке(изометрия)

имеется поле из клеток 20х20, оно отрисовано на Image, координаты(угла картинки которая является клеткой) хранятся в массиве Field типа AField
Цитата:
type
TField = record
x: integer;
y: integer;
end;

AField = array[0..20,0..20] of TField;
Массив заполнается координатами в соответствии с моей картинкой
Цитата:
procedure TForm1.FieldFill(var Field: AField; BX, BY: integer);
var
I, J, TX, TY: integer;
begin
TX := 0;
TY := 0;

for I:= 0 to 20 do
begin
Field[I,0].x := 0;
Field[I,0].y := 0;
Field[0,I].x := 0;
Field[0,I].y := 0;
end;

for I := 1 to 20 do
begin
for J := 1 to 20 do
begin
if J=1 then begin
Field[I,J].x := TX + Field[I,J-1].x ;
Field[I,J].y := TY + Field[I,J-1].y ;
end
else begin
Field[I,J].x := Field[I,J-1].x + 26;
Field[I,J].y := Field[I,J-1].y + 13;
end;
end;
TX := TX - 26;
TY := TY + 13;
end;

end;
BX, BY - это просто смещение относительно Image

Как определить, какой из клеток(нужны индексы массива) принадлежит точка, полученная по щелчку мыши?
Вложения
Тип файла: rar 1.rar (166.6 Кб, 20 просмотров)
DimaTs вне форума Ответить с цитированием
Старый 16.04.2011, 21:26   #2
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Вся область - карта в пикселах, состоит она из кусочков с определенными размерами. Мышь возвращает координаты на области, ...само собой напрашивается поделить координаты мыши на размеры одной игровой клетки в пикселах и округлить. Чтобы было все еще более точно и клетка выбиралась по центру, нужно смещение к координатам мыши, равное половине размера клетки, для каждой координаты.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 16.04.2011, 22:09   #3
DimaTs
Пользователь
 
Регистрация: 14.04.2011
Сообщений: 60
По умолчанию

я написал
Код:
PosX := (X-20) div 54;
PosY := (Y-400) div 27;
20 и 400 это смещение построения сетки

но проблема в том что у имаджа оси направлены по нормальному, а у моей сетки, совершенно в других направлениях, 1,1, это у меня самая левая клетка
получается что он мне по горизонтали и верртикали клетки считает, даже там где их нет(
Вложения
Тип файла: rar 2.rar (167.0 Кб, 21 просмотров)
DimaTs вне форума Ответить с цитированием
Старый 16.04.2011, 22:20   #4
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Спрячь счет клетки в двойное условие, которое пропускает мышь только когда ее координаты находятся внутри области карты (область Image на форме).
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 16.04.2011, 22:31   #5
DimaTs
Пользователь
 
Регистрация: 14.04.2011
Сообщений: 60
По умолчанию

ну это то понятно)
я про то что самая левая клетка он показывает [0,0] а самая правая [19,0] хотя должен бы показать [19,19] ведь ряд то последний)
я не могу придумать как развернуть систему координат так как она у сетки расположена
DimaTs вне форума Ответить с цитированием
Старый 17.04.2011, 00:18   #6
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Посмотрел исходник, ...имеется в виду совсем изометрия и в координатах тоже. Не знаю на сколько это нужно, но может устроит и такой вариант: http://www.programmersforum.ru/showp...38&postcount=6 ?
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 20.04.2011, 20:50   #7
DimaTs
Пользователь
 
Регистрация: 14.04.2011
Сообщений: 60
По умолчанию

добил таки свою систему координат, короче идея в том что ячейка - это 4 прямые, и точка внутри должна быть выше двух и ниже двух других прямых, это возможно только в одной ячейке. вот и проверяем в цикле каждую
если интересно могу код выложить, мало ли надо кому
DimaTs вне форума Ответить с цитированием
Старый 20.04.2011, 23:05   #8
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Проверка всех линий в цикле - нерационально, понятно, что на клик, а если на движение мыши нужно сразу знать в какой клетке карты? ...должна быть формула, я избавил себя и программу от сложных вычислений, задав координаты как для обычного поля в декартовой системе координат, тем более, что номера ячеек никак не используются в моей игре, и без разницы как они нумеруются, персонаж будет топать в указанную клетку. Может и у тебя та же история?
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 21.04.2011, 13:38   #9
DimaTs
Пользователь
 
Регистрация: 14.04.2011
Сообщений: 60
По умолчанию

ну я вначале хотел делать стратегию, и вот для того чтоб дом построить мне нужен номер ячейки куда я щелкнул, чтоб знать где рисовать
а зачем может потребоваться номер при движении мыши?
DimaTs вне форума Ответить с цитированием
Старый 21.04.2011, 16:02   #10
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Понятно. Тем более не вижу причин выполнять изометрическую систему координат, ...это было бы нужно в случае логической игры, где по перемещению курсора нужно знать клетку на карте. Еще раз посмотрим рисуночек:



Тут совершенно не важно как нумеруются ячейки, а экран все равно прямоугольный. Выходит, что можно сделать черную область непроходимой, а координаты возвращать как для обычной декартовой системы координат и матрицы карты. И не обязательно заполнять карту в виде ромба, все клетки можно заполнять спрайтами. В любой момент изометрическое изображение может смениться видом сверху, ...все зависит от редактора карт. Такая реализация универсальна и оптимизирована.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Принадлежность точки Stereo Паскаль, Turbo Pascal, PascalABC.NET 0 14.12.2010 11:26
ПРИНАДЛЕЖНОСТЬ ТОЧКИ Dar93ina Помощь студентам 1 03.12.2010 16:41
Принадлежность точки к фигуре SeeJay Помощь студентам 9 24.12.2009 14:53
Принадлежность точки Forro Помощь студентам 4 26.05.2008 14:33
Принадлежность точки UnFaithful Паскаль, Turbo Pascal, PascalABC.NET 1 08.01.2008 06:16