Scene2d LibGDX Java. Работает ли addActor (myactor) внутри других классов?

Если я объявлю Stage «myStage» внутри основного класса моей игры, а затем передам его конструктору моего Player (который расширяет Actor). Могу ли я затем использовать эту копию myStage для добавления других актеров на главную сцену (т. е. добавления массива маркеров внутри класса Player или даже таких вещей, как кнопки из класса Button) из кода внутри класса Player.

Или это вызывает проблемы? Почему я должен добавить код addActor() только из класса, в котором этап был объявлен в первом экземпляре?


person I_Keep_Trying    schedule 11.11.2015    source источник


Ответы (1)


Я предполагаю, что ваш код выглядит примерно так (плюс-минус):

public static void main(String [] args)
{
    ...
    Stage myStage = new Stage();
    Player myPlayer = new Player(myStage);

    myStage.addActor(myPlayer);
    ...
}

...

public class Player extends Actor
{

    Stage myStage;        

    public Player(Stage _stage)
    {
        myStage = _stage;

        myStage.addActor(<another Actor object>);
    }
}

Поскольку все объекты в Java являются ссылками, когда вы передаете myStage в myPlayer, вы не копируете myStage, вместо этого вы передаете ссылку на уже объявленную и инициализированную сцену.

Короче говоря, вы можете без проблем вызвать myStage.addActor() из класса Player. Однако я бы порекомендовал взглянуть на структуру вашего класса, чтобы убедиться, что объекты (например, ваш проигрыватель) инкапсулируют только свою собственную функциональность. Например, если кнопки предназначены только для управления, возможно, их следует добавить на сцену отдельно от основного метода в виде класса пользовательского интерфейса, расширяющего Актера.

person RScottCarson    schedule 11.11.2015
comment
Фантастический ответ. Вы прояснили мое недоразумение с первой попытки :) когда я вернусь домой, приведу код в действие - person I_Keep_Trying; 11.11.2015