|
Языки программирования Изучаем С++, Sql, php, Lua, Python |
|
Опции темы | Поиск в этой теме | Опции просмотра |
21.09.2011, 16:15 | #1 |
Ученый
Регистрация: 19.12.2010
Сообщений: 221
Сказал(а) спасибо: 64
Поблагодарили 12 раз(а) в 9 сообщениях
Записей в дневнике: 2
|
Алгоритм заставляющий моба бежать лицом вперед
Нужно заставить моба бежать лицом вперед. Набросал такой алгоритм:
Код:
float angl = spawnedCreature->GetOrientation() * 180 / M_PI; float len_x = 10 * sin(angl); float len_y = 10 * cos(angl); if (angl > 180) spawnedCreature->GetMotionMaster()->MovePoint(0, spawnedCreature->GetPositionX() + len_x, spawnedCreature->GetPositionY() + len_y, spawnedCreature->GetPositionZ()); else spawnedCreature->GetMotionMaster()->MovePoint(0, spawnedCreature->GetPositionX() - len_y, spawnedCreature->GetPositionY() - len_y, spawnedCreature->GetPositionZ()); |
21.09.2011, 17:41 | #2 |
MaNGOS Dev
Регистрация: 14.03.2010
Сообщений: 38
Сказал(а) спасибо: 23
Поблагодарили 49 раз(а) в 16 сообщениях
|
> float angl = spawnedCreature->GetOrientation() * 180 / M_PI;
радианы переводите в градусы. зачем ? sin/cos работают с радианами Последний раз редактировалось SilverIce; 21.09.2011 в 18:21. |
21.09.2011, 19:35 | #3 | |
Ученый
Регистрация: 19.12.2010
Сообщений: 221
Сказал(а) спасибо: 64
Поблагодарили 12 раз(а) в 9 сообщениях
Записей в дневнике: 2
|
Цитата:
Я кое что накалякал тут на бумашке, как буду дома прийду и проверю, потом покажу add: Сделал вот так: Код:
float angl = angle * 180 / M_PI; if (angl < 90) spawnedCreature->GetMotionMaster()->MovePoint(0, spawnedCreature->GetPositionX() + 5*cos(angl), spawnedCreature->GetPositionY() + 5*sin(angl), spawnedCreature->GetPositionZ()); else if (angl < 180) spawnedCreature->GetMotionMaster()->MovePoint(0, spawnedCreature->GetPositionX() - 5*cos(angl), spawnedCreature->GetPositionY() + 5*sin(angl), spawnedCreature->GetPositionZ()); else if (angl < 270) spawnedCreature->GetMotionMaster()->MovePoint(0, spawnedCreature->GetPositionX() - 5*cos(angl), spawnedCreature->GetPositionY() - 5*sin(angl), spawnedCreature->GetPositionZ()); else spawnedCreature->GetMotionMaster()->MovePoint(0, spawnedCreature->GetPositionX() + 5*cos(angl), spawnedCreature->GetPositionY() - 5*sin(angl), spawnedCreature->GetPositionZ()); Последний раз редактировалось HuntsMan; 21.09.2011 в 21:08. |
|
21.09.2011, 22:19 | #4 |
Гость
Сообщений: n/a
|
для движения вперед, код на java, но принцип одинаков
не важно какое значение угла синус и косинус даст нужный знак. Код:
public void walkForward(float distance) { position.x -= distance * (float)Math.sin(Math.toRadians(yaw)); position.y += distance * (float)Math.cos(Math.toRadians(yaw)); } |
Пользователь сказал cпасибо: | HuntsMan (21.09.2011) |
21.09.2011, 22:57 | #5 |
Ученый
Регистрация: 19.12.2010
Сообщений: 221
Сказал(а) спасибо: 64
Поблагодарили 12 раз(а) в 9 сообщениях
Записей в дневнике: 2
|
Точнее вот так будет:
Код:
spawnedCreature->GetMotionMaster()->MovePoint(0, spawnedCreature->GetPositionX() + 10*cos(angle), spawnedCreature->GetPositionY() + 10*sin(angle), spawnedCreature->GetPositionZ()); |
22.09.2011, 06:44 | #6 |
Ученый
Регистрация: 09.03.2010
Адрес: Кыргызстан
Сообщений: 266
Сказал(а) спасибо: 41
Поблагодарили 115 раз(а) в 34 сообщениях
|
|
22.09.2011, 08:43 | #7 |
Гость
Сообщений: n/a
|
|
22.09.2011, 17:33 | #9 |
Ученый
Регистрация: 09.03.2010
Адрес: Кыргызстан
Сообщений: 266
Сказал(а) спасибо: 41
Поблагодарили 115 раз(а) в 34 сообщениях
|
|
22.09.2011, 17:58 | #10 |
Гость
Сообщений: n/a
|
|
22.09.2011, 18:05 | #11 |
Ученый
Регистрация: 09.03.2010
Адрес: Кыргызстан
Сообщений: 266
Сказал(а) спасибо: 41
Поблагодарили 115 раз(а) в 34 сообщениях
|
|
24.09.2011, 19:29 | #13 |
Ученый
Регистрация: 19.12.2010
Сообщений: 221
Сказал(а) спасибо: 64
Поблагодарили 12 раз(а) в 9 сообщениях
Записей в дневнике: 2
|
И снова я со своей математикой
Вобщем хочу отспавнить мобов вокруг босса. Накалякал такой код: Код:
float angle = 0; for(int i = 0; i < 8; i++) { sLog->outString("Summon %u mobs, gradus: %f", i, angle*180/M_PI); me->SummonCreature(46007, me->GetPositionX() + cos(angle)*15, me->GetPositionY() + sin(angle)*15, me->GetPositionZ(), 1.0f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 10000); angle += M_PI / 4; } То что в лог вывожу: Код:
2011-09-24 20:24:25 Summon 0 mobs, gradus: 0.000000 2011-09-24 20:24:25 Summon 1 mobs, gradus: 45.000000 2011-09-24 20:24:25 Summon 2 mobs, gradus: 90.000000 2011-09-24 20:24:25 Summon 3 mobs, gradus: 134.999997 2011-09-24 20:24:25 Summon 4 mobs, gradus: 180.000000 2011-09-24 20:24:25 Summon 5 mobs, gradus: 225.000003 2011-09-24 20:24:25 Summon 6 mobs, gradus: 269.999993 2011-09-24 20:24:25 Summon 7 mobs, gradus: 314.999983 add: А не, все ок, это я дураг Оказывается у моба вторая модель была модель невидимки, поэтому он и не отображался Последний раз редактировалось HuntsMan; 24.09.2011 в 20:02. |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Алгоритм проверки TargetAuraState в CheckCast() | rsa | Баг-репорты | 7 | 16.03.2011 11:04 |
Обесценить предметы у торговцев и выключить выподение голда в лут, после ликвидации моба. | Ginezes | Флудильня | 5 | 09.11.2010 14:47 |
Алгоритм DistributeArenaPoints() | xmolex | Прочая документация | 1 | 16.10.2010 14:48 |
Лицом к игроку, как??? | Lordronn | Скрипты | 4 | 04.08.2010 12:43 |