Saturday, October 05, 2013

Телепортаций нам не надо (при управлении игровыми объектами)

Столкнулся с тем, что часто объект управляемый игроком обладает свойством телепортации. Это когда новая координата прикосновения к экрану оказывается довольно далеко от старой.
Тогда объект просто исчезает на старом месте и появляется на новом. Это проявляется в простых играх и примерах, в нормальных играх такого нет конечно.

Ну и мне захотелось пофиксить. Оказалось всё довольно просто.
Надо в коде метода Update данного объекта применить примерно такой код:

      Local currentX: Float = obj.GetPosX()
      Local currentY:Float = obj.GetPosY()
      Local mX:Float = MouseX()
      Local mY:Float = MouseY()
   
      currentX = currentX + (mX - currentX) / 3
      currentY = currentY + (mY - currentY) / 3
   
      obj.SetPos(currentX,currentY)

Делитель (в данном случае 3) определяет скорость перемещения объекта к новому месту. Чем меньше, тем быстрее. Чем больше, тем больше будет отставание объекта от текущей точки ведения по игровому полю.

Код тестовый, поэтому так расписан. Можно обойтись без локальных переменных и всё записать в одну строку.

Кстати, эффект телепортации присутствует и на устройствах с управлением мышью. Для этого надо выйти мышью с одной стороны игрового поля (для оконных приложения) и войти с другой стороны игрового поля.

Особая пикантность отсутствие телепортации в том, что в момент передвижения объекта к новому месту положения, он (объект) может взаимодействовать с другими объектами игрового мира. А уж как это использовать, на то вольна фантазия автора.

No comments: