Как сделать управление click to move?
|
|
zasulio | Дата: Суббота, 21 Марта 2015, 17:35 | Сообщение # 1 |
был не раз
Сейчас нет на сайте
| Подскажите как сделать управление такое же как например в диабло, жмёшь мышкой в определённую точку на местности и персонаж движется к этой точке?
|
|
| |
8Observer8 | Дата: Воскресенье, 22 Марта 2015, 00:21 | Сообщение # 2 |
заслуженный участник
Сейчас нет на сайте
| Очень интересный вопрос. Я даже не могу сообразить, как решить задачу попроще: вывести в консоль координаты точки на плоскости, по которой кликнули правой кнопкой мыши. Помогите, если кто знает. Я думаю, что конечную точку нужно знать. А текущие координаты выводятся так:
Код scene = bge.logic.getCurrentScene()
print( scene.objects['player'].position.x ) print( scene.objects['player'].position.y ) print( scene.objects['player'].position.z )
Зная текущую координату и конечную, можно уже направить объект в конечную точку. Тут я тоже пока затрудняюсь ответить, как это сделать
|
|
| |
zasulio | Дата: Воскресенье, 22 Марта 2015, 11:42 | Сообщение # 3 |
был не раз
Сейчас нет на сайте
| значит полазив по интернету и благодаря подсказкам на различных форумах получилось собрать сборную солянку. Рабочий вариант, но правда всё равно немного не то... объект движется в точку клика только тогда, когда кнопка мыши зажата, а мне нужно чтобы и когда зажата и когда просто сделал одиночный клик и персонаж бежит в место клика.
.py файл https://yadi.sk/d/WY50otbJfRmxt
[img][/img]
Сообщение отредактировал zasulio - Воскресенье, 22 Марта 2015, 11:51 |
|
| |
8Observer8 | Дата: Воскресенье, 22 Марта 2015, 14:42 | Сообщение # 4 |
заслуженный участник
Сейчас нет на сайте
| У меня есть идея передавать mouseOver.hitPosition сообщением, но я не знаю как это сделать
Почему-то выводит в консоль 'moved' два раза
Ground.py
Код import bge from bge import logic from bge import render render.showMouse(1)
def main(): cont = bge.logic.getCurrentController()
mouseOver = cont.sensors['mouseOver'] click = cont.sensors ['click'] if mouseOver.positive and click.positive: logic.sendMessage( 'move', '', 'player', '' ) print( mouseOver.hitPosition ) main()
Player.py Код def main(): print( 'moved' )
main()
Добавлено (22 марта 2015, 14:06) --------------------------------------------- Я немного продвинулся. Теперь объект резко перемещается туда, где сделан клик. Осталось придумать, как сделать, чтобы он передвигался плавно
Ground.py Код import bge from bge import logic from bge import render render.showMouse(1)
def main(): cont = bge.logic.getCurrentController()
mouseOver = cont.sensors['mouseOver'] click = cont.sensors ['click'] if mouseOver.positive and click.positive: x = str( mouseOver.hitPosition.x ); y = str( mouseOver.hitPosition.y ); z = str( mouseOver.hitPosition.z ); logic.sendMessage( 'move', x + ',' + y + ',' + z, 'player', '' ) main()
Player.py Код def main( cont ): obj = cont.owner pos = []
for message in cont.sensors['move'].bodies: pos = message.split( ',' ) obj.worldPosition.x = float( pos[0] ) obj.worldPosition.y = float( pos[1] ) obj.worldPosition.z = float( pos[2] )
Добавлено (22 марта 2015, 14:42) --------------------------------------------- У меня появилась идея ставить по клику пустой куб и делать к нему trackTo
Сообщение отредактировал 8Observer8 - Воскресенье, 22 Марта 2015, 14:46 |
|
| |
zasulio | Дата: Воскресенье, 22 Марта 2015, 20:24 | Сообщение # 5 |
был не раз
Сейчас нет на сайте
| Цитата 8Observer8 ( ) У меня появилась идея ставить по клику пустой куб и делать к нему trackTo да, так и есть а для движения к точке клика можно использовать актуатор motion (по y оси) или актуатор steering где target obgect это и есть тот пустой куб.
|
|
| |
8Observer8 | Дата: Воскресенье, 22 Марта 2015, 22:11 | Сообщение # 6 |
заслуженный участник
Сейчас нет на сайте
| Для steering нужен "Navigation Mesh", что будет лучше смотреться. А я добавил актуатор "Edit Object" и выставил ему "Track To" на объект "markForPlayer" (который невидимый). Вот только проблема есть: когда player занимает место markForPlayer, то начинает трястись. Как это тряску убрать?
|
|
| |
zasulio | Дата: Среда, 25 Марта 2015, 15:46 | Сообщение # 7 |
был не раз
Сейчас нет на сайте
| короче обратился с просьбой к одному человеку , он откликнулся))вот решение https://www.youtube.com/watch?v=q-MBpcZ-8Kk
|
|
| |
8Observer8 | Дата: Среда, 25 Марта 2015, 16:32 | Сообщение # 8 |
заслуженный участник
Сейчас нет на сайте
| Цитата короче обратился с просьбой к одному человеку , он откликнулся))вот решение https://www.youtube.com/watch?v=q-MBpcZ-8Kk +1. Мне очень нравятся его уроки, но последние не смотрел, вот и пропустил. Спасибо, что обратились к нему и не забыли здесь отписаться
Сообщение отредактировал 8Observer8 - Среда, 25 Марта 2015, 16:32 |
|
| |