![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#221 |
Новичок
Джуниор
Регистрация: 21.02.2009
Сообщений: 1
|
![]()
Всем привет, у меня такая проблемма-->
Надо реализовать задержку при выполнении части процедуры, но так чтоб она не мешала производить другие манипуляции в программе.. напримере: procedure Primer(A,B:TClass; Memo:TMemo); begin Memo.Lines.Add(ShowMes(A.n,1)); sleep(800); while ((A.i>0) or (B.i>0)) do begin Memo.Lines.Add(ShowMes(A.n,2)); sleep(800); Memo.Lines.Add(ShowMes(A.n,3)); sleep(800); end; end; листинг процедупры находится в отдельном unit'е и вызывается таким образом: procedure TForm1.Button1Click(); var At,Bt:TClass; begin Primer(At,Bt,Form1.Memo1); end; Вобщем вместо Sleep(800), что можно придумать, чтоб оно не мешало работе с программой? |
![]() |
![]() |
![]() |
#222 |
Участник клуба
Регистрация: 29.01.2008
Сообщений: 1,039
|
![]()
Можно попробовать втсавить Application.ProcessMessage в тело цикла, но это мало поможет.
|
![]() |
![]() |
![]() |
#223 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
![]()
Паузы почти секундные, по силам выполнить через Timer.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
![]() |
![]() |
![]() |
#224 |
Участник клуба
Регистрация: 23.07.2007
Сообщений: 1,054
|
![]()
Игра на Canwas. Если игровой мир очень большей, то это дело будет не реально как-то загрузить. На загрузку карты в несколько то экранов уйдет много ресурсов. вот я думаю можно ли как то грузить только то, что находится в ближайшей видимости?
И еще если персонажей очень очень много в мире, то нужно обробатывать их всех на взаимодействие. Как можно сделать, чтобы проверялись на взаимодействие только те, которые находятся не очень далеко?
Писано по д'Эльфийски
|
![]() |
![]() |
![]() |
#225 | ||
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,692
|
![]() Цитата:
Цитата:
00000000 00011100 00012100 00011100 00000000 0 - не загруженый участок карты 1 - находится в памяти 2 - участок в котором находится гг. Можно сделать, чтобы куски грузились в отдельном потоке, тогда можно избежать тормозов при переходе. Хорош для игр от первого лица, если добавить туман, который не позволит увидеть дальше загруженой области. 0000 0100 0000 Если в памяти держать всего один кусок, то придется ждать, пока загрузится следующий кусок, хоть в отдельном потоке, хоть прямо в игре. Но потребление ресурсов снизится. И этот вариант хорошо должен подойти для игр с видом сверху. Еще можно применить частичную загрузку всей карты. Определить на каждом участки карты расстояние до гг. при котором должны грузиться объекты. Например расстояние 50 участков, грузить текстуру низкого качества и город, 20 кусков, грузить 2D деревья и пара крупных камне...(этот способ для вида от первого лица) Последний раз редактировалось Kostia; 24.02.2009 в 10:20. |
||
![]() |
![]() |
![]() |
#226 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
![]()
Очевидно, Лубышев намекает на РПГ, от третьего лица, карта ползет плавно в противоположные стороны перемещению, а персонаж все время в центре экрана.
Если персонаж игрока все время в центре, то самый верный способ следить за радиусом обзора и подгружать ресурсы карты по мере их видимости. Подгрузка секторов карты уместна для 3D игр, где плавающая камера может перемещаться вплоть до режима от первого лица. Если игра однопользовательская, то следить за всеми юнитами не нужно, можно лишь делать иллюзию изменения их состояния, как только взор главного персонажа достигнет их.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
![]() |
![]() |
![]() |
#227 |
Регистрация: 08.03.2009
Сообщений: 7
|
![]()
Всем привет!... Решился написать простенькую стратежку. Начал писать алгоритм на бумаге и возникло пару вопросов. Ломал голову дня 2 ничего оптимального в голову непришло!... вот подумал спросить у профессионалов...
Имеется игровое поле реализованное в квадратной матрице. После реализации алгоритма для поиска пути возникает несколько вопросов по плавному передвижению юниотов. ПРи движениии обьекта из пункта А в пункт Б возникла проблема алгоритма (будем считать что путь перемещения найден и записан к примеру в динамический массив). Пусть свободные ячейки помечены нулём, занятые иными номерами. Наш юнит к примеру имеет номер занятости 2 (если смотреть игровое поле). При плавном передвижении юниота в очередную ячейку(по найденому свободному пути) нееобходима переместить его не за один игровой ход а к примеру за 10 что соответствует его скороси перемещения, те за 10 шагов мы должны переместиться в искомую клетку., казалось бы никаких проблем если бы не 1 но!... Что делать если юнит произвел 4 сдвига (из этих 10) и графически со смещением находиться ещё в начальной позиции матрицы но при этом и до конца не достиг следующей клетки(те следующей ячейки матрицы в его пути). Он как бы находиться и там и там. И происходит некое событие. К примеру если эта клетка ещё не помечена как занятая то на неё могут претендовать другие юниоты как для перемещения так и для иных действий(??? это так ???). Вопрос что делать если в такой ситуации. На эту же (2-ю клетку) претендует другой юнит то есть он тоже хочет проити через неё или он например частично находиться на ней а частично на другой при этом для упращения будем считать что размер обьекта соответствует размеру клетки матрицы... пожалуйста если кто знает как реализоватьь алгоритм или какую - нибудь идею по этому поводу напишите пожалуйста. ПРи этом хочеться отметить что желательно бы учесть тот факт что хочу чтобы это всё выглядело более реалестьично поэтому будем считать что на одной клетке не могут находиться более 1 юниота. Хотелось бы хотяб услышать идею по этой теме или что ещё лучше простенький пример по этому поводу или алгоритм! |
![]() |
![]() |
![]() |
#228 |
Участник клуба
Регистрация: 12.08.2008
Сообщений: 1,977
|
![]()
Допустим размер ячеек 50 х 50.Юнит находится в ячейке с координатами (Х=100,Y=100) и должен переместиться на на соседнюю ячейку
(150,100).По событию (нажатие клавиши вправо) делаете цикл и даете приращение по Х на 5 едениц.Получите плавное перемещение юнита. Примерно так : Код:
И не сомневайся даже ... отдых - кайф, работа - лажа!
|
![]() |
![]() |
![]() |
#229 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
![]()
Maxadal, все очень просто. Физически матрица - модель карты, сектора, грубые для графики. Каждый переход на клетку сопровождается плавным смещением объекта на 1 пиксел по-X и/или по-Y в нужном направлении, причем, графически мы точно знаем размер одной клетки на экране, допустим это 50х50 (таил). Достаточно задать цикл смещения на пол размера тайла, ...считается если объект находится в некоторой клетке со смещением 0, то он будет в ней находиться, пока смещение в цикле не станет больше пол размера тайла, в этом случае будет считаться, что объект перешел на следующую клетку, но при этом получил отрицательное смещение, которое будет стремиться к нулю (центру клетки на экране). Как только смещение стало равным 0, объект останавливается, если это пункт назначения в модели. Посмотри вот этот пост http://programmersforum.ru/showpost....&postcount=164 ...далее после него в разделе есть и пример.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
![]() |
![]() |
![]() |
#230 |
Регистрация: 08.03.2009
Сообщений: 7
|
![]()
Предыдущие 2 ответа на мой вопрос тривиальны и не несут всебе необходимую информацию о сложившейся у меня проблеме ((( ... возможно я что-то не так обьяснил... теперь решил прикрепить 2 изабражения для полной оценки ситуации в ходе программы.. на первом рисунке изображена часть игрового поля (карты)... в ней я взял 3 елемента матрицы.. в верхней и нижней ячейках находиться по юниоту ... во 2-м изображении я показал ход их движения.. допустим юнит перемещаеться за 10 ходов в соседнюю клетку, это его скорость... допустим первым движение начал юниот1(или оба вместе)... так как запись его положения в пустую клетку произойдёт лишь когда он или они сделают по 5 перемещений из 10, то возникает вопрос как помечать и использовать такие клетки(в который он или они перемещаються)???... красный движеться к примеру сначала вниз а потом направо, а синиq только вверх или ещё как-нибудь, при этом нехотелось бы чтобы они находились в одной клетке вместе, как быть с отображением такого участка карты ведь клетка по центру сначала свободна и на неё движуться 2 или 3 юнита... а потом 1 из них перевым записался вэту клетку , что делать второму???... идти назад или как??? нехотелось бы также чтобы изображения этих юнитов накладывались друг на друга, или если юнит двидежеться к примеру со смещением влево на 5 шагов то он естественно будет "задевать" соседние элементы, что если на них переместиться некий обьект???
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Хорошие уроки | Render | Общие вопросы Delphi | 9 | 15.09.2012 07:13 |
Акцесс вопросы новичков | Yaga | Помощь студентам | 4 | 02.06.2008 00:16 |
Учебники для новичков в програмировании | Рар | Общие вопросы Delphi | 6 | 08.01.2007 08:07 |