Как правильно отдалить камеру от вида сцены?

У меня есть сцена, где происходит мой геймплей. Я ищу способ медленно «уменьшать масштаб», чтобы с течением времени было видно все больше и больше пространства. Но я хочу, чтобы HUD и некоторые другие элементы оставались одного размера. Это похоже на функциональность колесика мыши в играх с видом сверху.

Я попытался сделать это, вставив все в группы отображения и переходя xScale, yScale. Визуально, конечно, работает, но игровая функциональность хромает. Например, у меня есть спаунер, который порождает некоторые объекты, его графика масштабируется, но спаунер по-прежнему порождает объекты из исходного положения, а не из нового масштабированного положения.

Нужно ли мне отслеживать каждую позицию X, Y, которую я использую во время игры, а также перемещать их? (Что, вероятно, возможно, но слишком сложно для меня, так как я использую много сенсорных событий для прицеливания, создания пути и т. д.) Или есть более простой способ добиться этого? Пожалуйста, пожалуйста, скажи да :P

Жду ваших ответов, заранее спасибо! :)


person cbt    schedule 13.04.2014    source источник
comment
Я пришел из GameSalad, и у них были camera.width и camera.height, и вы их просто изменили. Например, с 320x480 до 640x960, чтобы все стало меньше. Если у Corona есть что-то подобное, я могу использовать его и соответствующим образом изменить размер элементов HUD, чтобы компенсировать это. Кто угодно?   -  person cbt    schedule 14.04.2014


Ответы (1)


Проблема в том, что вы масштабируете свое изображение, но не координаты своего положения. Вам нужно преобразовать «исходные координаты» в «масштабированные координаты».

Если вы уменьшите размер карты вдвое, вы также должны увеличить количество ходов вдвое. Вам нужно «масштабировать» свои координаты в той же степени, что и ваше изображение.

Например, предположим, что ваш масштабный коэффициент равен 0,5, у вас есть изображение:

local scaleFactor = 0.5
image.xScale = scaleFactor
image.yScale = scaleFactor

Затем вам нужно будет масштабировать количество ходов по этому фактору.

thingThatIsMoved.x = thingThatIsMoved.x + (moveAmount * scaleFactor)
thingThatIsMoved.y = thingThatIsMoved.y + (moveAmount * scaleFactor)

Я надеюсь, что это поможет, я предполагаю, что у вас есть переменная moveAmount и вы обновляете позицию в событии enterFrame().

person Jose Llausas    schedule 11.06.2014