Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 |

 

  Вопрос: Перемещение персонажа. Добавлено: 05.05.09 18:22  

Автор вопроса:  AWP | Web-сайт: xawp.narod.ru | ICQ: 345685652 
Собрался тут игрушку писать, в жанре RST.
Вопрос такой, как организовать перемещение Юнитов.

Задаю конечную точку - строятся промежуточные.
Как лучше поступить, прибавлять каждый раз небольшой вектор пока ни достигнет следующий точки или засечь время и рассчитывать координаты исходя из скорости и времени?

Ответить

  Ответы Всего ответов: 27  

Номер ответа: 1
Автор ответа:
 $@ny@PG



ICQ: 468469477 

Вопросов: 71
Ответов: 196
 Профиль | | #1 Добавлено: 05.05.09 18:59
Интересный вопрос...

Ответить

Номер ответа: 2
Автор ответа:
 Unknown_Master



Вопросов: 11
Ответов: 264
 Профиль | | #2 Добавлено: 05.05.09 19:09
Хм... Сложный вопрос.
Но, на мой взгляд, прибавлять вектор будет удобнее

Ответить

Номер ответа: 3
Автор ответа:
 $@ny@PG



ICQ: 468469477 

Вопросов: 71
Ответов: 196
 Профиль | | #3 Добавлено: 05.05.09 19:19
А на чем хоть игрушку пишешь?

Ответить

Номер ответа: 4
Автор ответа:
 Ra$cal



ICQ: 8068014 

Вопросов: 18
Ответов: 817
 Web-сайт: www.rascalspb.narod.ru
 Профиль | | #4
Добавлено: 05.05.09 21:49
для этого вообще строится граф и например волновым алгоритмом находится минимальный путь, а дальше юнит отправляется в путешествие по дугам и точкам графа. по крайней мере так делают нормальные программисты...

Ответить

Номер ответа: 5
Автор ответа:
 AWP



ICQ: 345685652 

Вопросов: 96
Ответов: 1212
 Web-сайт: xawp.narod.ru
 Профиль | | #5
Добавлено: 05.05.09 22:40
"Задаю конечную точку - строятся промежуточные." - какие алгоритмы для построения пути я знаю.
Все промежуточные точки ставятся с каким-то интервалом, в зависимости от формата ячеек карты.
Вот и нужно выбрать самый удобный способ путешествия между этими точками.

Ответить

Номер ответа: 6
Автор ответа:
 Ra$cal



ICQ: 8068014 

Вопросов: 18
Ответов: 817
 Web-сайт: www.rascalspb.narod.ru
 Профиль | | #6
Добавлено: 05.05.09 23:31
или граф, или велосипед. выбор простой.

Ответить

Номер ответа: 7
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #7
Добавлено: 06.05.09 00:12
Это два разных подхода: такт постоянной длины (прибавлять вектор) и такт переменной длины (считать перемещение в зависимости от времени). Проще программировать первый, производительнее второй.

Ответить

Номер ответа: 8
Автор ответа:
 Ra$cal



ICQ: 8068014 

Вопросов: 18
Ответов: 817
 Web-сайт: www.rascalspb.narod.ru
 Профиль | | #8
Добавлено: 06.05.09 00:23
опа, чото я ппц сонный =\ правильнее умножать время между кадрами и умножать на скорость. ибо на разном железе между кадрами будет варьироваться, и получится эффект что на одном компе игра идет слишком быстро. но при умножении на изменение времени у меня наблюдались рывки. помогало только включение вертикальной синхронизации. это все относится к direct x. или игру делаешь через gdi?
зы: теперь вроде прально понял суть вопроса?

Ответить

Номер ответа: 9
Автор ответа:
 AWP



ICQ: 345685652 

Вопросов: 96
Ответов: 1212
 Web-сайт: xawp.narod.ru
 Профиль | | #9
Добавлено: 06.05.09 00:45
не суть через что. Sharp прав, лучше через время сделать. А про "время между кадрами", ну это и так понятно QueryPerformanceCounter без проблем справится.

"но при умножении на изменение времени у меня наблюдались рывки."
Чем время считал, сколько кадров/секунду было?

Ответить

Номер ответа: 10
Автор ответа:
 Ra$cal



ICQ: 8068014 

Вопросов: 18
Ответов: 817
 Web-сайт: www.rascalspb.narod.ru
 Профиль | | #10
Добавлено: 06.05.09 00:54
GetTickCount'ом. Число кадров в секунду немного варьировалось. фпс не помню ибо дело было года 2 назад.

Ответить

Номер ответа: 11
Автор ответа:
 Ra$cal



ICQ: 8068014 

Вопросов: 18
Ответов: 817
 Web-сайт: www.rascalspb.narod.ru
 Профиль | | #11
Добавлено: 06.05.09 01:40
я даж нашел сорцы и они даж скомпилились. сделано по приращению времени движение, не дергается, даже без синхронизации. но трабла в другом. попиксельный колижн детекшн тормозит картинку. попробуйте пролететь одним самолетом чуть выше другого, чтобы наложились прямоугольники.

http://ifolder.ru/11972763

ptPosition.x += cos(Angle) * Speed * Global->dv * Global->FreqResolution;
ptPosition.y += -sin(Angle) * Speed * Global->dv * Global->FreqResolution;

QueryPerformanceCounter(&pGlobal->LastTick);
pGlobal->dv = pGlobal->ThisTick.QuadPart - pGlobal->LastTick.QuadPart;

А это вся формула изменения положения самолета. dv по сути есть dt, но это не суть.

Ответить

Номер ответа: 12
Автор ответа:
 Ra$cal



ICQ: 8068014 

Вопросов: 18
Ответов: 817
 Web-сайт: www.rascalspb.narod.ru
 Профиль | | #12
Добавлено: 06.05.09 01:46
зы: работает это так. запускаете игру, видите бублики, ждете появления фпс. это нужно для настройки как раз FreqResolution. Не помню нах оно вообще, и почему формула такая FreqResolution = 1.0 /frequency.QuadPart; но не суть. главное дождаца появления фпс, потом жать пробел. Если не дождаца самолетики не появятся. Самолетики не в равных условиях. У левого 3 патрона можно одновременно в воздухе иметь, у правого 1. Управление левым - стрелки, стрелять 0 на нампаде. Управление правым - WASD, стрелять пробел.

Ответить

Номер ответа: 13
Автор ответа:
 AWP



ICQ: 345685652 

Вопросов: 96
Ответов: 1212
 Web-сайт: xawp.narod.ru
 Профиль | | #13
Добавлено: 06.05.09 02:43
GetTickCount - тормозная штука, прям как таймер ;)

Юзай.
  1.  
  2. Public Declare Function QueryPerformanceCounter Lib "kernel32" _
  3. (lpPerformanceCount As Currency) As Long
  4. Public Declare Function QueryPerformanceFrequency Lib "kernel32" _
  5. (lpFrequency As Currency) As Long

Ответить

Номер ответа: 14
Автор ответа:
 Ra$cal



ICQ: 8068014 

Вопросов: 18
Ответов: 817
 Web-сайт: www.rascalspb.narod.ru
 Профиль | | #14
Добавлено: 06.05.09 14:41
в пост 11 посмотри =) для вычисления шага времени я и использую перфоманс коунтер. геттик в другом месте используется для служебных так сказать задач

Ответить

Номер ответа: 15
Автор ответа:
 AWP



ICQ: 345685652 

Вопросов: 96
Ответов: 1212
 Web-сайт: xawp.narod.ru
 Профиль | | #15
Добавлено: 06.05.09 23:42
У меня ip не выделенный, всех файловые серваки не работают.
"главное дождаца появления фпс, потом жать пробел. Если не дождаца самолетики не появятся."
Могу поспорить, FPS вычисляется раз в секунду, первую секунду он = 0, а на 0 делить нельзя, скорее всего стоит On error и пропускает старт игры. Хотя могу и ошибаться)

З.Ы.
Что могу сказать про Коллизии, оптимизируй алгоритм.

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам