|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Движение компонента
Я взялся за новый проект, поэтому у меня будет туча вопросов, но чуть позже
Вопрос такой: нужно организовать плавное перемещение компонента (12 пикселей/сек) к заданной точке. Вот пример: http://files.mail.ru/FRGADK (Для того чтобы запустить пример, щёлкните любую карточку) Можно ли сделать что-нибудь подобное на Дельфи? З.Ы. Пример написан на GMK (Game Maker). Если не ты, то кто? (с) Терри Пратчетт Не забывайте ставить плюсы и говорить спасибо! |
#2
|
||||
|
||||
Цитата:
Цитата:
jmp $ ; Happy End! The Cake Is A Lie. |
#3
|
||||
|
||||
Понимаешь, неизвестна ни стартовая позиция, ни конечная точка.
А движение должно идти по прямой. Как решить такую задачу? (Жалко, что я не знаю как работает Step_Towards из GMK...) Если не ты, то кто? (с) Терри Пратчетт Не забывайте ставить плюсы и говорить спасибо! |
#4
|
||||
|
||||
Стартовая позиция (по крайней мере в примере) известна - начальная координата.
Конечная позиция тоже (например рандом). Иначе как пойти в магазин если ты не знаешь где магазин и где ты?)) Составляешь уравнение прямой и прибавляешь соответствующие числа: Код:
var k, b, x, y:extended; ... //Стартовая инициализация: x:=x1; //Y не нужно, он будет все время пересчитываться "с нуля" для повышения точности ... //уравнения прямой вида y=kx+b: k:=(Y1-Y2)/(X1-X2); // x1,x2,y1,y2 - координаты первой и второй точек b:=y1-k*x1; ... //дальше прибавляем по X например 1, а по Y находим из уравнения: x:=x+1; y:=k*x+b; //можно еще так: если |K|<1 то прибавляем по X и ищем Y, иначе //прибавляем по Y и ищем X. Тогда будет отрабатываться лучше. //А еще лучше вычислять скорость по осям X и Y в зависимости от K, //исходя из того, что K - тангенс угла наклона скорости к оси OX: { // Инициализация после подсчета K: Vx:=1*cos(arctan(k)); // В данном случае 1 - скорость по прямой в Пикс/срабатываний таймера vy := k * vx; ... x:=x+Vx; y:=y+Vy; } //и двигаем: Image1.Left:=round(x); Image1.Top:=round(y); Проект - движущаяся картинка: едет в направлении, заданном тыканьем мышки на форме. jmp $ ; Happy End! The Cake Is A Lie. Последний раз редактировалось Bargest, 05.01.2011 в 17:56. |
#5
|
||||
|
||||
Bargest
Замечательно! Спасибо большое! Цитата:
Кстати, в примере забыл сделать остановку картинки Ну это ничего, это я и сам могу сделать В общем, спасибо и +1. Если не ты, то кто? (с) Терри Пратчетт Не забывайте ставить плюсы и говорить спасибо! |