forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Основной форум (http://forum.boolean.name/forumdisplay.php?f=49)
-   -   Как в scroll map, толькл без либ... (http://forum.boolean.name/showthread.php?t=13205)

IvanNes 25.08.2010 06:55

Как в scroll map, толькл без либ...
 
Привет всем! Как сделать так: мидлете курсором "добавить" точку, и что бы герой к ней шёл (как в примере scrollmap) только без либ:SOS:

psih1 25.08.2010 09:57

Ответ: Как в scroll map, толькл без либ...
 
Юзай скролл мар

12121 25.08.2010 13:27

Ответ: Как в scroll map, толькл без либ...
 
Как я понял задача сводится к поиску кратчайшего пути. Начни отсюда
http://forum.boolean.name/showthread...%E F%F3%F2%E8
а дальше гугл в помощь.

IvanNes 25.08.2010 15:06

Ответ: Как в scroll map, толькл без либ...
 
нет, не совсем но спасибо пригодится))
мне бы нужно сделать так, как реализовано в примере scroll map...
или проще сказать "двигать" героя не клавишами на цифр. клавиатуре, а ставить метку на карте, и чтобы герой к ней пришёл (примерно как в Фоллауте)

Ksanatos 25.08.2010 16:42

Ответ: Как в scroll map, толькл без либ...
 
А что уже имеется?
Собственно в этом нет особых проблем, если тебе нужно, чтоб он шел напрямую(выбор направления и смещение с анимацией), а если нужно чтоб он "ходил с умом", то могу набросать примерчик(если найду свободное время в этом чёртовом будильнике Ж( ).

IvanNes 26.08.2010 06:15

Ответ: Как в scroll map, толькл без либ...
 
ну можно) а что за будильничек?

Trazzy 26.08.2010 09:17

Ответ: Как в scroll map, толькл без либ...
 
Вложений: 1
если я правильно понял IvanNes, то мне тоже интересно узнать как сделать, чтобы герой(G) ходил не только по горизонтали (1;H), вертикали (1;V) и диагонали (1;D), а напрямую к заданой точке (2;A[, B, C, D]) !?..

IvanNes 27.08.2010 05:36

Ответ: Как в scroll map, толькл без либ...
 
да. вот это нужно мне))

12121 27.08.2010 08:43

Ответ: Как в scroll map, толькл без либ...
 
Если надо из точки 0,0 перейти в 100,15 то каждый раз когда к х добавляем 1 к у добавляем 15/100=.15
конечно х и у не целые числа. При выводе на экран округлятся.
В общем виде примерно так: из новых координат вычитаем старые. Находим что больше х или у. Делим меньшее на большее. Получившееся надо добавлять к меньшей координате. К большей добавляем 1 при каждом увеличении.

Ksanatos 31.08.2010 03:25

Ответ: Как в scroll map, толькл без либ...
 
Вложений: 1
12121 Можно поправлю: сначала надо узнать длину линии, разделить её на длину шага и получить кол-во шагов, а уж потом с каждым шагом к х добавляем х2/у2, а к у у2/х2. и лучше х и у присваивать только сами округления, а вычисления проводить на других переменных.
Но так как IvanNes просил как в fallout я и буду делать как в fallout. Ведь если использовать 6-ти угольник, а не квадрат переход плавнее будет.
На рисунке показанно как должны считаться координаты. Хотя там немного неправильно намалявил я. Координата (x,y) это середина 6-ти угольника. Если брать одну клетку за 10 px, то выше упомянутый шаг будет 20(проверил опытным путём). Если найдёшь способ вычислить координату выбранной точки с ачалом координат в середине стартовой ячейки, то я смогу сделать процедуру получше.
Вот процедура:
PHP код:

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

Писал здесь. Не проверял(да и не на чем). Дерзай. Жду ответов.
Примеры ии тебе дали.

Trazzy 31.08.2010 07:39

Ответ: Как в scroll map, толькл без либ...
 
мне нужно было именно как в 12121..
и как я сам не допер?!.

IvanNes 31.08.2010 09:31

Ответ: Как в scroll map, толькл без либ...
 
ууу!! пасибо) ещё использовать её по назначению и будет супер)))
а как сделать чтобы свои координаты брались после нажатия клавиши 5??

12121 31.08.2010 10:42

Ответ: Как в scroll map, толькл без либ...
 
Так свои координаты ты и так знаешь.

Ksanatos 31.08.2010 11:18

Ответ: Как в scroll map, толькл без либ...
 
IvanNes
всмысле где стоишь или куда идти?

12121 31.08.2010 15:47

Ответ: Как в scroll map, толькл без либ...
 
Старые это где стоишь . Новые - куда идти.
рисуй на бумаге с координатами и разбирайся сам . Это лучше чем каждую мелочь спрашивать. И запомнишь на всю жизнь.


Часовой пояс GMT +4, время: 10:26.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot