XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
NightRaven

offline
Опыт: 719
Активность:
Управление на стрелках
управление на стрелках:
Искал везде, нашел много, но всё-равно не смог применить с моими изменениями.
Вот чего не хватает в любом примере, (но что мне жизненно необходимо)):
1. Как сделать, что бы при скорости юнита, равной 0,при нажатии стрелок "влево" или "вправо" юнит делал шаг влево или вправо (именно шаг, не поворот(!)
- 1.2. при нажатии на стрелку "вниз", юнит делал один шаг назад, но при ужержании кнопки 3-4 секунды, разворачивался и шёл назад (как в обычном примере).
2.Камера: Как сделать, что бы камера не была закреплена за спиной юнита а при ддвижении мышки вращалась как и мышь во всех направлениях. Соответственно при этом значения кнопок "Влево, вправо, вперёд, назад" меняются в зависимости от расположения камеры.

Надеюсь, что вам не составит труда помочь мне)

P.S. Так же могу прикрепить пример Kiwi, хотя он уже есть где-то на форуме/сайте.

NightRaven добавил:
Кстати, когда юнит идёт вперёд камера переносится на "вид с сзади".
Старый 10.08.2007, 19:52
beavis

offline
Опыт: 675
Активность:
Цитата:
1. Как сделать, что бы при скорости юнита, равной 0,при нажатии стрелок "влево" или "вправо" юнит делал шаг влево или вправо (именно шаг, не поворот(!)

У тебя есть юнит у которого присутствует анимация шага влево или вправо?
Если есть, то напишу тебе как сделать.
Цитата:
1.2. при нажатии на стрелку "вниз", юнит делал один шаг назад, но при ужержании кнопки 3-4 секунды, разворачивался и шёл назад (как в обычном примере).

Здесь также нужна анимация шага назад, другими способами, получится коряво.
Цитата:
2.Камера: Как сделать, что бы камера не была закреплена за спиной юнита а при ддвижении мышки вращалась как и мышь во всех направлениях. Соответственно при этом значения кнопок "Влево, вправо, вперёд, назад" меняются в зависимости от расположения камеры.

Насколько я знаю, управление камерой с помощью мыши невозможно.
Хотя возможно я ошибаюсь...
Наверное я разачоровал тебя своими ответами...
Старый 11.08.2007, 00:46
TNT
О_о
offline
Опыт: 11,019
Активность:
NightRaven,
1. Так же как вперёд/назад, только надо перемещать юнит с помощью полярок на Facing unit() -/+ 90.
2. Помойму так как ты сказал низя камеру вертеть...

Cinderella добавил:
beavis, несложно заставить играть анимацию юниту.
Старый 11.08.2007, 00:52
beavis

offline
Опыт: 675
Активность:
Цитата:
несложно заставить играть анимацию юниту.

Что ты имеешь ввиду.
Старый 11.08.2007, 01:03
DFlyer
<3 MJ
offline
Опыт: 42,879
Активность:
Cinderella
Бивис имеет ввиду, что у юнита должна быть анимация шагов в бок.
Старый 11.08.2007, 01:10
beavis

offline
Опыт: 675
Активность:
Хотя, насчет движения камеры с помощью мышки у меня есть одна идея, но вот дойдет до меня она не скоро, если вообще дойдет.
Старый 11.08.2007, 01:54
NightRaven

offline
Опыт: 719
Активность:
Спасибо всем, попробую разобраться. Если "неразберусь", тогда напишу).
Цитата:
Сообщение от beavis
Хотя, насчет движения камеры с помощью мышки у меня есть одна идея, но вот дойдет до меня она не скоро, если вообще дойдет.

Если дойдёт, сообщи мне плиз).
Старый 11.08.2007, 02:56
beavis

offline
Опыт: 675
Активность:
Да без проблем.
Старый 11.08.2007, 10:28
YasonDelAlt

offline
Опыт: 862
Активность:
В варе не существует функций для получения положение мыши, следовательно и управление камерой с помощью мыши стандартными средствами сделать не возможно. Советую почитать эту статью.
Старый 11.08.2007, 15:39
NightRaven

offline
Опыт: 719
Активность:
YasonDelAlt, спасибо тебе тоже),до этой статьи я думал, что знаю Delphi лучше)), поэтому поворачивать камеру получилось только с помощью с помощью waradd.exe.

А вот на счёт полярных - не особо, попробую уещё с триггерами чё-нить намудрить...
Старый 11.08.2007, 20:23
TNT
О_о
offline
Опыт: 11,019
Активность:
DFlyer, я понял, вот и говорю, на модели сделать анимацию и проиграть триггерно.
Старый 11.08.2007, 21:57
NightRaven

offline
Опыт: 719
Активность:
Так как тему я уже создал, напишу следующие вопросы сюда).

Собственно вот первый вопрос: можно ли сделать что бы вокруг героя всегда перемещались 8 областей и что бы например как на рисунке впереди и сзади героявсегда были зелёные области, по бокам от героя красные и по диагонали синие?
Картинка- скриншот:
DEAD URL

P.S. Сам пытался делать с помощью полярок, но ничего нормального не получилось((
P.S.P.S.Если это реально - пожалуйста сделайте пример или объясните как так сделать, естественно кто сможет ответить внесу в титры и тому огромный респект))). Заранее спасибо всем!
Старый 20.09.2007, 08:26
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
именно с помощью полярок это и делается.

green regions

- (hero position) offset by 128.00 towards (Facing angle of hero) degrees
- (hero position) offset by 128.00 towards (Facing angle of hero+180.00) degrees


red regions

- (hero position) offset by 128.00 towards (Facing angle of hero - 90.00) degrees
- (hero position) offset by 128.00 towards (Facing angle of hero + 90.00) degrees


diagonal regions

- (hero position) offset by 181.02 (по теореме пифагора) towards (Facing angle of hero + 45.00) degrees
- (hero position) offset by 181.02 towards (Facing angle of hero - 45.00) degrees
- (hero position) offset by 181.02 towards (Facing angle of hero + 135.00) degrees
- (hero position) offset by 181.02 towards (Facing angle of hero - 135.00) degrees


FellGuard добавил:
во избежание утечек делается 2 точки: point_hero, point_move
Периодический триггер -
Код:
set point_hero = Position of Unit

    set point_move = *написано выше, как задавать точки*
    Move region (region_1, point_move)
    custom script: call RemoveLocation(udg_point_move)
...
    set point_move = *написано выше, как задавать точки*
    Move region (region_n, point_move)
    custom script: call RemoveLocation(udg_point_move)

    custom script: call RemoveLocation(udg_point_hero)


FellGuard добавил:
вместо 128.00 кстати надо взять расстояние от героя до центра ближайшей области (по горизонтали или вертикали), 128.00 я взял от балды - это расстояние между линовкой местности (см скрин в предыдущем посте). тогда расстояние между героем и областью по диагонали будет считаться так (sqrt(x*x+x*x) | x = расстояние до области по горизонтали)
Старый 20.09.2007, 09:24
NightRaven

offline
Опыт: 719
Активность:
FellGuard, спасиб и респект тебе, сейчас пойду воплощать в проект)) Внесу в титры как и обещал)
Старый 20.09.2007, 11:29
ScorpioT1000
Работаем
offline
Опыт: отключен
Не над полярки, полярки фтопку. Как джон советовал:
local real x = GetLocationX(unit) + dist * Cos(angle * bj_DEGTORAD)
local real y = GetLocationY(unit) + dist * Sin(angle * bj_DEGTORAD)
Старый 20.09.2007, 19:07
NightRaven

offline
Опыт: 719
Активность:
ScorpioT1000, можешь пример выложить, а?
Старый 20.09.2007, 20:16
ScorpioT1000
Работаем
offline
Опыт: отключен
Я скора охрененную наработку выложу. Там камера и управление типа вовки.. тока без исп. поворота мышью..=(
Старый 20.09.2007, 20:21
NightRaven

offline
Опыт: 719
Активность:
Цитата:
Сообщение от ScorpioT1000
Я скора охрененную наработку выложу. Там камера и управление типа вовки.. тока без исп. поворота мышью..=(

Ну мышь пока подождет)) КАк скоро сможешь выложить? и можешь послать мне сейчас плиз!?

Только с областями мне тоже нужно вопрос решить - немного для другой цели) Так что если не сложно создай пример пожалуйста!
Старый 20.09.2007, 20:43
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
в связи с превышением Скорпиотом лимита варнов, нагло возьму на себя его инициативу)
если перевести то, что я сказал из гуи-триггерного формата в Jass (а не-полярки это именно он), то получим
» следующее
Код:
//первый вариант ф-ии. более понятен
function PlaceRegions takes unit u, rect r, real distance, real angle returns nothing
  local real x = GetUnitX(u) + distance * Cos((GetUnitFacing(u)+angle) * 0.017453)
  local real y = GetUnitY(u) + distance * Sin((GetUnitFacing(u)+angle) * 0.017453)
  call MoveRectTo(r,x,y)
endfunction

//второй вариант той же ф-ии. Не создает локалок, надо взять одну на выбор и вставить в нестандартный код карты.
function PlaceRegions takes unit u, rect r, real distance, real angle returns nothing
  call MoveRectTo(r,GetUnitX(u) + distance * Cos((GetUnitFacing(u)+angle) * 0.017453),GetUnitY(u) + distance * Sin((GetUnitFacing(u)+angle) * 0.017453))
endfunction

//---------------------------------------------------------------
//алгоритм перемещения всех областей, одна за другой, использует формулу из 
//этого (http://xgm.ru/forum/showpost.php?p=315853&postcount=13) поста. Пишется в периодическом гуишном триггере
...
set var_hero = герой

set var_rect = область 1
custom script: call PlaceRegions(udg_var_hero,udg_var_rect,дистанция 1 в виде числа,угол 1 в виде числа)

set var_rect = область 2
custom script: call PlaceRegions(udg_var_hero,udg_var_rect,дистанция 2 в виде числа,угол 2 в виде числа)
...
set var_rect = область n
custom script: call PlaceRegions(udg_var_hero,udg_var_rect,дистанция n в виде числа,угол n в виде числа)

Отредактировано FellGuard, 25.09.2007 в 20:15.
Старый 21.09.2007, 21:14
NightRaven

offline
Опыт: 719
Активность:
FellGuard, отлично, спасибо, попробую воплотить это в карту только завтра, т.к. щаз уже ничего не могу делать)) Как только что нибудь не получится отпишусь здесь)))
Старый 21.09.2007, 23:45
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 13:51.