Andengine AnimatedSprite прекращает анимацию, когда onTimePassed нажимает для загрузки игровых ресурсов (сцена заставки/загрузки).

Поэтому я создаю заставку, которая в фоновом режиме загружает игровые ресурсы. Во время заставки это анимированный спрайт, который должен находиться в центре экрана и анимироваться до тех пор, пока все ресурсы не будут загружены, и я могу просто переключать сцены на сцену меню. Однако в данный момент спрайт анимируется в течение короткого промежутка времени, затем зависает и просто сидит без дела в течение нескольких секунд, затем загружает сцену меню (эти «несколько секунд» меняют продолжительность в зависимости от того, насколько быстро работает телефон). Например, мой телефон (новый) работает как доли секунды, однако телефон моих друзей (старый) занимает 4 или 5 секунд).

Я хочу, чтобы спрайт анимировался все время, пока мы видим заставку, пока загрузка происходит в фоновом режиме... Имеет ли это смысл?

Ниже мой класс MainActivity...

public class MainActivity extends BaseGameActivity 
{
protected static int CAMERA_WIDTH = 480;
protected static  int CAMERA_HEIGHT = 800;

protected PhysicsWorld mPhysicsWorld;
SceneManager sceneMan;
Camera camera;

@SuppressWarnings("deprecation")
@Override
public EngineOptions onCreateEngineOptions() 
{
    camera = new Camera(0, 0, CAMERA_WIDTH,CAMERA_HEIGHT);
    float camwid = CAMERA_WIDTH;
    float camhi = CAMERA_HEIGHT;

    CropResolutionPolicy pop = new CropResolutionPolicy(camwid,camhi);

    return new EngineOptions(true, ScreenOrientation.PORTRAIT_FIXED, pop, camera);
}

@Override
public void onCreateResources(OnCreateResourcesCallback pOnCreateResourcesCallback) throws Exception 
{
    sceneMan = new SceneManager(this, mEngine, camera);
    sceneMan.loadSplashResources();
    pOnCreateResourcesCallback.onCreateResourcesFinished();
}

@Override
public void onCreateScene(OnCreateSceneCallback pOnCreateSceneCallback) throws Exception 
{
    pOnCreateSceneCallback.onCreateSceneFinished(sceneMan.createSplashScene());
}

@Override
public void onPopulateScene(Scene pScene,OnPopulateSceneCallback pOnPopulateSceneCallback) throws Exception 
{
    mEngine.registerUpdateHandler(new TimerHandler(2f, new ITimerCallback() 
    {
        @Override
        public void onTimePassed(TimerHandler pTimerHandler) 
        {
            mEngine.unregisterUpdateHandler(pTimerHandler);
            sceneMan.loadFirstTimeRunAllResources();
            sceneMan.createMenuScene();         
            sceneMan.setCurrentScene(AllScenes.MENU_SCREEN);
        }
    }));

    pOnPopulateSceneCallback.onPopulateSceneFinished();
}
}

А ниже приведен код создания сцены-заставки, который создает материал для моей сцены-заставки и сообщает спрайту о необходимости анимации, он находится в другом классе, который обрабатывает загрузку и создание сцен...

public Scene createSplashScene()
{
    //Will only call once!
    //Will never return to this scene
    splashScene = new Scene();
    splashScene.setBackground(new Background(0,0,0));
    AnimatedSprite icon = new AnimatedSprite(0, 0, splashAniTR, engine.getVertexBufferObjectManager());
    icon.setPosition(camera.getWidth()-(camera.getWidth()/2)-(icon.getWidth()/2)+12,camera.getHeight()-(camera.getHeight()/2)-icon.getHeight()/2);
    icon.animate(300);
    splashScene.attachChild(icon);
    return splashScene;

}

person Kardelio    schedule 16.04.2014    source источник


Ответы (1)


загрузить все свои игровые ресурсы в onCreateResources()

this.runOnUpdateThread(new Runnable() {
            @Override
            public void run() {
                sceneMan.loadFirstTimeRunAllResources();    
            }
        });
person Rama    schedule 17.04.2014
comment
Мы должны загрузить все ресурсы, пока заставка работает на устройстве. - person Rama; 17.04.2014
comment
Итак, я должен вставить этот раздел кода в onCreateResources до или после загрузки и создания заставки? Он работает в другом потоке? - person Kardelio; 17.04.2014
comment
СПАСИБО ЗА ПОМОЩЬ, но... Теперь есть заставка прямо с самого начала, но она не анимирована... :/ Я думаю, что это очень близко к тому, что я хочу, но я хочу, чтобы загрузка происходила как заставка экран сидит там и анимируется столько, сколько нужно для завершения загрузки - person Kardelio; 17.04.2014
comment
просто добавьте этот код в свой onCreateResources(), разместите свои заставки как есть. Если ресурсы занимают больше времени, лучше увеличить время для обработчика времени в onPopulateScene. - person Rama; 18.04.2014