Показать сообщение отдельно
Старый 31.08.2010, 03:25   #10
Ksanatos
ПроЭктировщик
 
Аватар для Ksanatos
 
Регистрация: 31.01.2010
Адрес: Россия, респ. Башкортостан, г. Бирск
Сообщений: 137
Написано 12 полезных сообщений
(для 17 пользователей)
Ответ: Как в scroll map, толькл без либ...

12121 Можно поправлю: сначала надо узнать длину линии, разделить её на длину шага и получить кол-во шагов, а уж потом с каждым шагом к х добавляем х2/у2, а к у у2/х2. и лучше х и у присваивать только сами округления, а вычисления проводить на других переменных.
Но так как IvanNes просил как в fallout я и буду делать как в fallout. Ведь если использовать 6-ти угольник, а не квадрат переход плавнее будет.
На рисунке показанно как должны считаться координаты. Хотя там немного неправильно намалявил я. Координата (x,y) это середина 6-ти угольника. Если брать одну клетку за 10 px, то выше упомянутый шаг будет 20(проверил опытным путём). Если найдёшь способ вычислить координату выбранной точки с ачалом координат в середине стартовой ячейки, то я смогу сделать процедуру получше.
Вот процедура:
procedure way(
  
kx1,ky1 integer// координаты стартовой ячейки, не в пикселях
  
kx2,ky2 integer// координаты конечной ячейки
);
var
  
px1,px2,py1,py2 integer // кооординаты середин ячеек, ценрт равен px1-20 и py1-10
  
linlen,steps_count integer// длина мнимой линии и количество шагов
  
integer;
  
rx,ry real // ну промежуточные переменные. Не смей их удалять, иначе пойдёт град ошибок и несовпадений >>:( 
begin
  px1
:=20;
  
py1:=10;
  
px2:=(kx2-kx1)*30;
  
py2:=(ky2-ky1)*10;
  
linlen:=sqrt(sqr(py2-py1)+sqr(px2-px1)); // вычисляем длину мнимой линии между серединами двух ячеек в пропорции дл.яч./шир.яч.=40/20. Ничего менять тут не надо.
  
steps_count:=trunc(linlen/20);
  
// я не помню после того как процедура заканчивается переменные обнуляются?
  
{*rx:=0;
  
ry:=0;*}
  
repeat
    rx
:=rx+(px2-px1)/steps_count;
    
ry:=ry+(py2-py1)/steps_count;
    
kx1:=trunc(rx);
    
ky1:=trunc(ry);
    
gotoxy(kx1,ky1); // это процедура анимации твоего перса, т.е. сдвиг на одну ячейку.
  
until (kx1=kx2) and (ky1=ky2);
end
Писал здесь. Не проверял(да и не на чем). Дерзай. Жду ответов.
Примеры ии тебе дали.
Миниатюры
Нажмите на изображение для увеличения
Название: DSC02792.JPG
Просмотров: 856
Размер:	817.8 Кб
ID:	11098  
__________________



(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
IvanNes (31.08.2010)