Вторник, 12.12.2017, 09:23
Поиск
Никнэйм
Сертификат на никнейм Olelucoye, зарегистрирован на Тимофеев Константин Михайлович
Зарегистрируй свой никнейм
Обратная связь
olelucoye.tk@yandex.ru
Реклама AdSense
Реклама
Друзья сайта
  • Лига медицинского права
  • Гостиница "Зай"
  • FAQ по системе
  • Инструкции для uCoz
  • Главная » Статьи » libGDX

    libGDX. Scene2D.

    libGDX. Scene2D.

    Scene2D - пакет классов libGDX для создания двумерных сцен игр и графических интерфейсов. Scene2D - использует иерархическую структуру сущностей:

    Actor - узел, имеющий положение, прямоугольный размер, масштаб, поворот, цвет. У актера имеется собственная система координат, не зависящая от системы координат родителя.

    Group - группа это актер, который может содержать других актеров.

    Stage - сцена, содержит камеру, SpriteBatch и корневую группу. Сцена обрабатывает отрисовку актеров, а также является потомком InputProcessor и обрабатывает клики и касания на актеров.

    Когда происходит событие ввода, Stage посылает его актерам. Если не один из актеров не отреагировал на событие, Stage возвращает false. В случае использования InputMultiplexer, передается управление следующему обработчику.

    Класс Stage имеет метод act, который принимает на вход время прошедшее с отрисовки последнего кадра delta. Он вызывает метод act каждого из актеров, что позволяет актерам предпринять некоторые действия. Вызов act не является обязательным для Stage, но если его опустить актеры не будут осуществлять преобразования.

    Также у Stage есть метод draw, который также как и предыдущий метод вызывает такой же метод у всех дочерних объектов - актеров. В этом методе актер отрисовывается, поэтому его нужно переопределить.

    Для определения на какого актера произошло нажатие, у Stage и Actor есть метод hit. При вызове этого метода, Stage перебирает метод hit всех дочерних актеров, передавая координаты нажатия. Актер возвращает себя, в случае если координаты нажатия попадают на актера.

    Переопределенный класс Actor будет выглядеть примерно так:

    public class MyActor extends Actor{
            TextureRegion region;
            
            public MyActor(){
                region = new TextureRegion(...);
             }
            
            @Override
            public void draw(Batch batch, float parentAlpha){
                batch.draw (region, getX(), getY(), getOriginX(), getOriginY(), getWidth(), getHeight(), getScaleX(), getScaleY(), getRotation());
            }
            
            @Override
            public Actor hit (float x, float y, boolean touchable) {
                return x >= 0 && x <width && y >= 0 && y < height ? this : null;
            }
        }

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

    Обработчик касаний:

    actor.addListener(new InputListener() {
        public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) {
            ...
            return true;
        }
        public void touchUp (InputEvent event, float x, float y, int pointer, int button) {
            ...
        }
    });

    Обработчик жестов:

    actor.addListener(new ActorGestureListener() {
        public boolean longPress (Actor actor, float x, float y) {
            ....
            return true;
        }
        public void fling (InputEvent event, float velocityX, float velocityY, int button) {
            ....
        }
        public void zoom (InputEvent event, float initialDistance, float distance) {
           ....
        }
    });

    Для определения как будет выглядеть сцена на экране (как будет растягиваться, масштабироваться и т.п) Stage использует viewport'ы. Viewport можно указать в конструкторе сцены, либо установить позже методом setViewport(). 

    ScreenViewport - сцена не будет растягиваться - видна часть сцены которая помещается в размеры основного окна.

    StretchViewport - сцена будет растягиваться под размер основного экрана с нарушением пропорций.

    FitViewport - сцена будет растягиваться по размеру основного экрана без нарушения пропорций по короткой стороне. Оставшееся место на экране заполняется черными полосами.

    ExtendViewport - сцена растягивается по размеру основного экрана без нарушения пропорций по длинной стороне. Одна из сторон сцены будет выходить за пределы размеров экрана.

    У viewport в конструкторе нужно указать размер виртуального экрана. Сначала сцена будет подогнана под этот размер, а затем под размеры основного окна. Для ExtendViewport можно указать максимальные размеры, под которые может быть растянута сцена.

    Пример использования ExtendViewport

     stage = new Stage(new ExtendViewport(640, 480, 800, 480));

     

    В этом случае сцена будет сначала подогнана под размер 640х480, а затем растягиваться по размеру экрана, но не будет растянута больше, чем 800х480.

    Scene2D можно использовать для создания сенсорной системы управления персонажем, которую мы рассмотрим в одной из следующих статей.

    libGDX. Формы столкновений.
    libGDX. Bullet. Динамика твердого тела. Часть 2.
    libGDX. Bullet. Динамика твердого тела.
    libGDX. Обработка столкновений. Библиотека Bullet. Часть 3.
    libGDX. Обработка столкновений. Библиотека Bullet. Часть 2.
    libGDX. Обработка столкновений. Библиотека Bullet.
    libGDX. Интерактивное взаимодействие с 3D объектами.
    libGDX. Отбраковка объектов не попадающих в обзор камеры.
    3D модель  для libGDX. Пишем код.
    3D модель для движка libGDX
    Строим модель с помощью ModelBuilder
    libGDX. Основы 3D программирования.
    Игра Flower. Ловим капли.
    TexturePacker.Создаем атлас текстур.
    Создаем проект на движке libGDX
    Кастомизация EditText
    Кастомизация SeekBar'а
    9-patch изображения для Андроид
    Кастомный ползунок в виде дуги (аналог SeekBar)
    Анимация в Андроид
    Кастомизация элементов управления в Android
    Создание кастомного View-элемента интерфейса.
    Создание виджета - электронные часы с кастомным шрифтом
    Программируем калькулятор на андроид. Урок 1.

    Категория: libGDX | Добавил: Olelucoye (30.05.2015)
    Просмотров: 4211
    | Теги: сцена, STAGE, актер, scene2d, actor, libGDX | Рейтинг: 0.0/0
    Всего комментариев: 0
    Добавлять комментарии могут только зарегистрированные пользователи.
    [ Регистрация | Вход ]
    Меню сайта
    Категории раздела
    Андроид разработка [23]
    libGDX [24]
    Мои андроид проекты [6]
    Excel [7]
    Железяки [5]
    Скрипты в блокноте [4]
    Разное [1]
    Форма входа
    Статистика

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0
    Яндекс Метрика
    Яндекс.Метрика