AS3: области просмотра без конца - PullRequest
0 голосов
/ 26 октября 2011

Я делаю космическую навигационную игру. Итак, все начинается с того, что пользователь на космическом корабле, а затем, когда он нажимает клавишу «вверх», корабль движется вперед, «карта» всегда отличается, у меня есть 5 вариаций звезд и 2 вариации планет, поэтому они в основном «появляются» случайно, пока пользователь перемещается. Я могу определить ключ, код генератора видеоклипов, но я не знаю, как сделать код навигации, я имею в виду, как заставить окно просмотра двигаться, когда пользователь нажимает клавишу, ... Я видел код, который я не очень хорошо понимал, что парень в основном создал гигантский видеоклип, который перемещается в соответствии с нажатой клавишей. Это не сработает в моем случае, потому что я хочу, чтобы он генерировал все случайным образом, и когда пользователь нажимает стрелку вниз, я хочу, чтобы он вернулся, с той же «картой», что и раньше. Пожалуйста, помогите мне, ребята, я совершенно запутался со всей этой областью просмотра. Кроме того, я хочу, чтобы игра работала быстро, я в некотором роде новичок в сценарии действий и не знаю, станет ли он тяжелым, если вы визуализируете объекты, которые не отображаются, и если да, то простой 'obj .visible = false 'работает? Заранее спасибо.

1 Ответ

3 голосов
/ 26 октября 2011

Что я делаю здесь:

Создайте класс Map со свойством camera, который является другим пользовательским классом MapCamera.

MapCamera имеет пять свойств:

  1. _x
  2. _y
  3. map - ссылка на экземпляр Map, владеющий этим MapCamera
  4. offsetX
  5. offsetY

    • Значения смещения представляют интервалы x и y от левого и верхнего краев экрана, которые должны быть установлены равными половине ширины и высоты сцены, чтобы камера правильно центрировалась на сцене.
    • Свойства _x и _y имеют значение private и имеют геттеры и сеттеры.

Геттеры довольно просты:

public function get x():Number{ return _x; }
public function get y():Number{ return _y; }

Установщики - это то место, где будет изменен видовой экран, например:

public function set x(n:Number):void
{
    _x = n;
    map.x = -(_x + offsetX);
}

public function set y(n:Number):void
{
    _y = n;
    map.y = -(_y + offsetY);
}

Отсюда вы добавляете своих детей в контейнер Map и затем можете просто перейти:

map.camera.x = player.x;
map.camera.y = player.y;

Что приведет к тому, что игрок всегда будет в центре экрана.

...