Когда использовать актеров в libgdx? Какие минусы и плюсы?

Я пишу простой симулятор солнечной системы. Это мой первый проект libgdx. Я использую Stage и Actors для главного меню, и это очень удобно, особенно при обработке сенсорных событий. Но... глядя на примеры, я вижу, что никто не использует актеров в реальной игровой логике. Я сомневаюсь, следует ли мне использовать актера в качестве родителя класса планеты или просто написать свой собственный класс для этого. Планеты нельзя будет трогать, и они будут перемещаться только между кадрами, поэтому третьим параметром действия MoveBy должно быть время между кадрами. Это минусы. Каковы плюсы использования Актеров?


person Lord_JABA    schedule 16.05.2012    source источник
comment
Я считаю, что многие примеры libGDX предшествуют поддержке Stage+Actor, так что это может объяснить, почему они ее не используют.   -  person P.T.    schedule 17.05.2012
comment
Я попал в большой беспорядок, используя Stage для всего, после того, как вообразил, что мне нужно много контента с фиксированной позицией и ячеек, то есть таблиц. Срывать его с каждым кадром становится все более необходимым, и я столкнулся с проблемами, когда пулы libgdx этих ресурсов истощились. Так что спасибо за указание на преимущества RYO   -  person John    schedule 06.05.2018


Ответы (1)


Основными плюсами для Актеров являются Действия, Проверка попаданий и сенсорные события, а также Группы Актеров.

Действия делают быструю и легкую анимацию, если это необходимо вашей игровой логике.

Вы можете вызвать stage.hit(x, y) в любое время, чтобы вернуть первого актора, который возвращает true для любой логики попадания, которую вы написали для него (обычно проверяя границы с помощью x, y, ширины, высоты). верните этого актера или ноль, чтобы продолжить итерацию по методам попадания актеров в поисках актера попадания. Null возвращается, если ни один актер не был поражен.

Hit используется для событий касания сцены. Методам касания актера передаются локальные координаты, а сцена обрабатывает наложение объектов, например. если актер покрывает другого актера так, что другой актер не должен получать touchDown, верните true для покрывающего актера, чтобы остановить вызов touchDown для актеров «ниже». Это также устанавливает «фокус» на актере, который возвращает true, так что будет вызван TouchUp актера.

Вы можете сгруппировать актеров вместе, чтобы выполнять действия, сенсорные события и т. д. для всей группы актеров как единое целое.

Некоторые минусы: актерам требуется сцена, которая несколько ограничивает функциональность. Многие кодеры используют другую логику для определения состояния игрового объекта, а не действия scene2d (например, box2d). Если вы используете Актеры для игровых объектов, вам, вероятно, понадобятся два этапа: один для пользовательского интерфейса и один для игрового мира. Если вы их не используете, вы, вероятно, все равно будете использовать свои собственные SpriteBatch и Camera. И имейте в виду, что у Актеров есть только абстрактный метод Draw, поэтому вам все равно придется создавать логику рисования. Вы, вероятно, сохраните TextureRegion или Sprite в качестве частного поля для Актера. Если вы хотите использовать собственную логику обновления, вы можете переопределить метод act(float delta), чтобы получить время разности (вызовите super.act(delta), если вы используете действия).

Поэтому, если у вас есть собственная логика и вы не будете использовать многое из того, что может предложить Stage, сэкономьте ресурсы и разверните свое собственное решение для конкретного приложения. Если вы можете использовать некоторые плюсы, не ограничивая необходимую функциональность, перейдите на второй этап для игровой логики.

person broken-e    schedule 22.05.2012
comment
Вы можете использовать как Scene2D, так и box2d, хотя, по общему признанию, некоторые вещи могут показаться неудобными. В общем, это вполне возможно, и я действительно это делаю. Для динамических объектов вы просто получаете положение актера из физической модели. Это, конечно, означает, что Action несколько бессмысленны, поскольку движение идет только от физики к Актеру, а не наоборот. Тем не менее, вы по-прежнему получаете обработку ввода, систему событий, обработку камеры и сопоставление координат бесплатно. Действия по-прежнему можно использовать для визуальных элементов без физического тела (например, экипированных предметов, спрайтов эффектов и т. д.). - person Matthias; 22.08.2015