Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Перемещение. Шаги игрока.


x22n ©   (2003-10-08 13:26:00) 

Хей!
Нужно чтобы игрок в игре ходил не скачками, скажем через 10 точек, а чтобы шаг был плавным. Как это реализовать???
Есть:
/          /          / -это 2 шага скачками, где /-активная позиция, т.е. игрок стоит, ждет приказов
Надо:
/........../ -1шаг, где ........ - медленное передвижение.
Вроде все просто и понятно объяснил, чтобы предвосхитить некоторые вопросы с разъяснением. Какие есть способы зделать это. Жду ответа....


x22n   (2003-10-09 20:22:00) [1]

Большое спасибо тем, кто не поленился написать ответ. Что ж будем усерднее учить delphi и пробовать писать игры...


Mihey   (2003-10-09 20:10:00) [2]

Типа, через таймер лучше всего. Например, есть ряд объектов, которые могут двигаться, например:

a: array [1..10] of TMovingObject;

Нужно приделать объекту (или записи) свойство IsMoving: Boolean, StepOfMoving, NumOfMoving: Integer, где NumOfMoving - число шагов, в нашем случае это 10.

Тады говоришь объекту: a[i].IsMoving := True; Далее, там где рисуется вся сцена (т.е. в приложении только один таймер!) делаешь:

If a[n].IsMoving then
begin
 a[n].StepOfMoving := a[n].StepOfMoving + 1;
 If a[n].StepOfMoving = a[n].NumOfMoving then
  a[n].IsMoving := False;
end;


ha   (2003-10-09 17:51:00) [3]

мыло давай


Nuts   (2003-10-09 16:32:00) [4]

Nuts!
Я умею считать 2=1+1. Как мне посчитать 13+19? Меня интересуют сонкретные алгоритмы. Скинте на мыло плиз.


nexxiss   (2003-10-09 15:47:00) [5]

Попробуй так:
по таймеру - X:=X+0.5;
а затем Round(X); только не переприсваивай значение Х


Zeqfreed   (2003-10-08 21:13:00) [6]

через слип так:

X:=X+1;
sleep(10);
X:=X+1;
sleep(10);
X:=X+1;
sleep(10);
X:=X+1;
sleep(10);
...

или

var
CurrTicks,OldTicks : DWORD;...

procedure DrawScene;
begin
CurrTicks := gettickcount;
if CurrTicks - OldTicks > 10 then
begin
 X := X + 1;
 OldTicks := CurrTicks;
end;
end;


pasha_676   (2003-10-08 17:45:00) [7]


> Через таймер мне не очень охота

А зря. На самом деле, имхо, самый правильный метод. К тому же можно все визуальные объекты завести на таймер и анимировать/двигать и т.д.

Через слип - все таки горбатенько по факту подвисания. Через gettickcount тогда уж.


x22n   (2003-10-08 16:53:00) [8]


>
> TButton ©   (08.10.03 16:13) [4]
> думаю, что через таймер или через слип.


Поясните, пожалуйста, как это через слип? Что это.. Через таймер мне не очень охота, я думал над этим..


x22n   (2003-10-08 16:52:00) [9]


>
> TButton ©   (08.10.03 16:13) [4]
> думаю, что через таймер или через слип.


Поясните, пожалуйста, как это через слип? Что это..


TButton   (2003-10-08 16:13:00) [10]

думаю, что через таймер или через слип.


x22n   (2003-10-08 14:43:00) [11]

Через какие методы это сделать? а?


x22n   (2003-10-08 14:41:00) [12]

Ха, что X:=X+1 десять раз надо сделать ясное дело. Но как сделатьчтобы он десять раз по X:=X+1 ходил?? В этом сложность. Возможно, я очень глубоко ошибаюсь, но это не так просто сделать. Подскажите как, посмотриммм...


pasha_676   (2003-10-08 14:01:00) [13]

Ужас какой. Вы меня извините уж, но в этом форуме черезвычайно распространены темы
"Я не умеют думать, но пишу супер-пупер игру".

Ну подумай чуток... Не ужели не доходит что надо сделать не X:=X+10, а X:=X+1 десять раз в нужный момент времени...


Наверх

Титульная страница Поиск, карта сайта Написать письмо