![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 16.05.2011
Сообщений: 86
|
![]()
Здравствуйте,
Вообщем "допиливаю напильником" свои пазлы. Есть один нюанс: Если картинка разбивается на большое количество ячеек(TImage-в них png-шки), то при перемещении мышью(по сэндеру) текущего TImage явные тормоза. Если картинка разбивается где-то до 300-400 ячеек - ещё вроде терпимо, а на большее кол-во уже фигня. Вообщем, чем большее ТИмеджей, тем тормознутей они таскаются. Пробовал деактивировать все кроме текущего(который перемещаем) - не помогает, и ещё некоторые способы - короче тормоза Есть ли какое-нибудь решение этой беды. |
![]() |
![]() |
![]() |
#2 |
Высокая репутация
СуперМодератор
Регистрация: 27.07.2008
Сообщений: 15,810
|
![]()
Надо на канве рисовать, а не городить огород с тысячами имеджей.
E-Mail: arigato.freelance@gmail.com
|
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 16.05.2011
Сообщений: 86
|
![]()
А как тогда узнать по какому кликнули, один может нарисоваться поверх другого, они ж при разбитии рандомно раскидываются(в твоём случае будут рисоваться)
|
![]() |
![]() |
![]() |
#4 |
Высокая репутация
СуперМодератор
Регистрация: 27.07.2008
Сообщений: 15,810
|
![]()
Так каждая пазла в своей ячейке? Тогда определить можно посредством простого расчета координат.
E-Mail: arigato.freelance@gmail.com
|
![]() |
![]() |
![]() |
#5 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
![]()
Да, рисовать на канвас. И 400 пазл по-моему запредельно, пол дня собирать
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
![]() |
![]() |
![]() |
#6 | |
Пользователь
Регистрация: 16.05.2011
Сообщений: 86
|
![]()
Каким образом.
Попался пользователь псих с кучей свободного времени ![]() Выбрал сложный уровень, в реальном времени показывается на сколько ячеек будет разбито изображение. Изображение, допустим разбилось на 700 ячеек(пазликов) В моём случае- динамически создаётся аналогичное кол-во TImage Все 700 рандомно раскидались по форме + перевернулись на 90..270 градусов, размеры всех ячеек одинаковые, кроме последнего правого рядя и самого нижнего. Мы можем кликнуть на любой, левой кнопкой - таскаем, правой - поворачиваем. Если все 700 нарисовать на канве(не важно какой(формы, битмапа...)) Один, а то и более может нарисоваться сверху другого, точно по тем же координатам и всё - ку-ку, как его выбрать, перевернуть, если его пиксели перерисованы другой ячейкой. Если бы все рисовались отдельно друг от друга, то не вопрос - координаты + ширина и высота каждого будут лежать в массиве, щёлкнул мышью по нарисованному, проверил координаты, ага это такой-то,... ассигнул в единственный TImage и таскай себе. Цитата:
................................... ................................... ............................. Вариант с канвой вроде как и логичный, но ИМХО не подойдёт. Последний раз редактировалось Stilet; 10.10.2015 в 08:34. |
|
![]() |
![]() |
![]() |
#7 |
ПШП
Участник клуба
Регистрация: 15.07.2013
Сообщений: 1,926
|
![]() |
![]() |
![]() |
![]() |
#8 | |
Форумчанин
Регистрация: 30.06.2015
Сообщений: 353
|
![]() Цитата:
Массив/списка записей/классов в которых координаты, TGraphic, и прочее. Пробегаете по массиву. Вызываете функцию проверяющую HitTest, если попалось - прерываете цикл, запоминаете на кого тыкнули, если надо перемещаете в начало массива/списка. Ничего сложного по сути. |
|
![]() |
![]() |
![]() |
#10 |
Высокая репутация
СуперМодератор
Регистрация: 27.07.2008
Сообщений: 15,810
|
![]()
Если у вас ячейки могут быть в произвольных координатах (не в сетке), то это получается набор спрайтов. Заводите динамический массив или список, для каждой ячейки сохраняете координаты, размеры, картинку. Отрисовывается все это перебором и выводом на BitMap, который после отрисовки визуализируется на форме (рисовать сразу на форме не советую, будет не быстрее кучи имеджей).
Определить ячейку куда кликнули аналогичным образом - пробежаться по всем и посмотреть, в какую область попадают координаты мышки. Только цикл не от начала к концу, а от конца к началу. Случай, когда одна ячейка перекрывает другую. Советую ту ячейку, которую двигает пользователь, перемещать в конец списка, тогда она всегда будет сверху (если рисовать от начала к концу). Если она полностью перекрыла нижнюю ячейку (что маловероятно, это еще постараться надо), тогда это проблемы пользователя, он всегда может сдвинуть верхнюю ячейку и получить доступ к нижней. Если надо реализовать прилипание ячеек друг к другу, то тут тоже ничего сложного, такой же цикл по всем ячейкам и поиск той, которая находится на заданном для прилипания расстоянии. E-Mail: arigato.freelance@gmail.com
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Мерцание панельки, при перемещении. | stalker1995s | Общие вопросы Delphi | 12 | 04.08.2013 15:04 |
Много TImage | bunukar | Помощь студентам | 13 | 12.04.2011 11:31 |
Перезапись при копировании/перемещении | Shouldercannon | Общие вопросы Delphi | 4 | 12.09.2010 02:32 |
Моргает label при перемещении | Maxs | Компоненты Delphi | 21 | 26.11.2009 19:57 |
Процедура при перемещении формы | Alex Cones | Общие вопросы Delphi | 7 | 28.07.2009 09:11 |