![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
|
Я взялся за новый проект, поэтому у меня будет туча вопросов, но чуть позже
![]() Вопрос такой: нужно организовать плавное перемещение компонента (12 пикселей/сек) к заданной точке. Вот пример: http://files.mail.ru/FRGADK (Для того чтобы запустить пример, щёлкните любую карточку) Можно ли сделать что-нибудь подобное на Дельфи? З.Ы. Пример написан на GMK (Game Maker). |
|
#2
|
||||
|
||||
|
Цитата:
![]() Цитата:
|
|
#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);Проект - движущаяся картинка: едет в направлении, заданном тыканьем мышки на форме. Последний раз редактировалось Bargest, 05.01.2011 в 17:56. |
|
#5
|
||||
|
||||
|
Bargest
Замечательно! Спасибо большое! Цитата:
![]() Кстати, в примере забыл сделать остановку картинки ![]() Ну это ничего, это я и сам могу сделать ![]() В общем, спасибо и +1. |