2017-01-07 7 views
-1

Недавно я думал о создании собственной оси x/y, особенно «x», но в той игре, в которой я хочу ее создать, нет значений ниже 0, потому что pointX = 0 на левой границе экрана.Создание оси X и Y для игры

Я хочу создать функцию, которая будет плавно сосчитать все значения зависит от нашей игры разрешение X.

Например:

параметры: минимальное значение, максимальное значение, ScreenX, cursorPosition

if(cursorPosition == screenWidth/2) then 
    return 0 
end 

Когда положение курсора ниже ширины экрана/2, функция плавно рассчитывает значение между -0 и min (минимальное значение будет, когда положение курсора = 0)

и то же самое, когда курсор pos находится выше screenWidth/2, функция будет плавно рассчитывать значение между 0 и максимальным значением (максимальное значение будет когда позиция курсора = наш экранX)

Может ли кто-нибудь объяснить мне, как я могу достичь эффект такой? :)

Привет

+0

Вам понадобится какой-то двухмерный игровой движок Lua. Попробуйте LÖVE. – devRicher

+0

На самом деле я пишу этот код в игру под названием Multi Theft Auto San Andreas, у меня уже есть переменные, такие как screenX или позиция курсора, но я не знаю, как создать правильный шаблон для подсчета этих значений;/ – Koczkodan

+0

Хорошо, я сделал это, спасибо за помощь – Koczkodan

ответ

0

использование линейной интерполяции для изменения динамического диапазона. Предположим, что у вашего вида есть xs,ys разрешение и точка (0,0) - левый верхний угол. так что динамический диапазон по каждой оси:

x = <0,xs-1> 
y = <0,ys-1> 

и вы хотите изменить его на:

x' = <minx,maxx> 
y' = <miny,maxy> 

Так что это:

x' = minx + x*(maxx-minx)/(xs-1) 
y' = miny + y*(maxy-miny)/(ys-1) 

и если вам нужно, чтобы вернуться к по любой причине:

x = (x'-minx)*(xs-1)/(maxx-minx) 
y = (y'-miny)*(ys-1)/(maxy-miny) 

, где (minx,miny) - верхний левый угол и (maxx,maxy) - нижний правый угол. Если вы хотите также изменить знак любой оси, то вы можете, так как minx<maxx не требуется для этого, поэтому просто замените начальные значения так, чтобы minx>maxx.

Не кодирование в lua, но если ваши значения являются плавающими, то будьте осторожны с округлением целых чисел при смешении целых чисел и слияния.