actors_ru - oxygine/oxygine-framework GitHub Wiki
Низкоуровневые 2D-фрейморки предоставляют функционал, в котором вам необходимо вручную рисовать изображения для каждого кадра.
Oxygine - это не низкоуровневый 2D-фрейморк поэтому в дополнение к этому он предоставляет свой граф сцены.
Вы можете создать спрайт(Sprite), установить его положение и картинку, прицепить к объекту отображения (называется Сцена/Stage) и "забыть" о нём. Спрайт будет отображаться и обновляться автоматически в каждом кадре. Вы можете сказать спрайту: "повернись на 360 градусов 5 раз за 2 секунды а затем убери себя".
spSprite sprite = new ColorRectSprite;
sprite->setPosition(300, 300);
sprite->setSize(100, 100);
sprite->attachTo(getStage());
sprite->addTween(Sprite::TweenRotation(2*PI), 2000, 5)->detachWhenDone();
Вы можете создать второй "дочерний" спрайт, который будет прицеплен (attach) к существующему и они будут вращаться оба:
spSprite child = new ColorRectSprite;
child->setSize(30, 30);
child->attachTo(sprite);
Исли вы хотите обработать щелчок мыши или касание на "дочернем", подпишитесь на событие щелчка:
void onSpriteClicked(Event*)
{
printf("clicked to child");
}
EventCallback callback = onSpriteClicked;
child->addEventListener(TouchEvent::CLICK, callback );
Если больше не хотите обрабатывать событие щелчка на этом спрайте - удалите обработчик (listener):
child->removeEventListener(TouchEvent::CLICK, callback);
it works only if you create callback with CLOSURE - CLOSURE(someptr, classmethod)
Если вам больше не нужен дочерний объект, просто отцепите (detach) его:
child->detach();
Вам не нужно вызвать delete, потому что спрайты (и другие подклассы Actor) управляются "умными" указателями (smart pointers). Они хранят в себе счётчик ссылок. Спрайт будет автоматически удалён как только вы уберёте последнюю ссылку на него.
Классы Oxygine с префиксом sp - это "умные" указатели. Например spSprite это просто такой typedef:
typedef ox::intrusive_ptr<ox::Sprite> spSprite;
#Актёры
Actor это базовый класс в графе сцены. Его можно перемещать, вращать, масштабировать, анимировать. Актёры могут иметь дочерние объекты актёров. Когда родительский объект меняется, все дочерние объекты меняются вместе с ним.
у класса Actor есть свойства:
- трансформация (transformation) ( например, положение, масштаб, вращение)
- якорная точка (anchor point)
- размер (size)
- имя (name)
- прозрачность (transparency)
- список дочерних объектов (list of children)
- список добавленных твинов (list of added tweens)
- и т.д.
Вы будете часто использовать спрайты Sprites в своей программе. Sprite это подкласс Actor. он используется для изображения картинок и анимации.
Polygon это подкласс Sprite. Используется для отображения произвольного массива вершин.
TextField это подкласс Actor. Используется для отображения текста.
ProgressBar это подкласс Sprite. Используется для отображения прогресса.
ColorRectSprite это подкласс Sprite. Это просто прямоугольник залитый одним цветом.
ClipRectActor это подкласс Actor. Используется для обрезки (clip) изображения дочерних объектов вне своих границ.
Box9Sprite это подкласс Sprite. Используется для масштабирования изображения таким образом что 4 угла остаются нетронутыми, 4 грани растягиваются/сжимаются по одной оси, а центр - по обеим. графически он выглядит приблизительно так:
MaskedSprite это подкласс Sprite. Используется для маскИрования своих дочерних объектов.