Среда, 13 Ноября 2024, 11:20

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Как сделать управление 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
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг