Andengine AnimatedSprite спира да анимира, когато onTimePassed достигне, за да зареди ресурсите на играта (Splash/Loading Scene)

Така че създавам начален екран, който във фонов режим зарежда ресурсите на игрите. По време на началния екран това е анимиран спрайт, който трябва да стои в центъра на екрана и да анимира, докато всички ресурси се заредят и мога просто да превключвам сцени към сцената на менюто. В момента обаче спрайтът анимира за кратко време, след което замръзва и просто седи, без да прави нищо за няколко секунди, след което зарежда сцената на менюто (тези „няколко секунди“ променят продължителността в зависимост от това колко бърз е телефонът, когато се изпълнява включен, например телефонът ми (нов) е като част от секундата, но телефонът на приятелите ми (стар) отнема 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
Трябва да заредим всички ресурси, докато splash работи на устройството. - person Rama; 17.04.2014
comment
Така че трябва да вмъкна този раздел от код в onCreateResources, преди или след като заредя и създам своя начален екран? Работи ли в друга нишка? - person Kardelio; 17.04.2014
comment
БЛАГОДАРИМ ВИ ЗА ПОМОЩТА, но... Сега има начален екран направо от самото начало, но не е анимиран... :/ Мисля, че е много близо до това, което искам, но искам зареждането да се случи като пръскането екранът стои там и е анимиран толкова дълго, колкото е необходимо, за да завърши зареждането - person Kardelio; 17.04.2014
comment
просто добавете този код във вашия onCreateResources(), поставете вашите splash ресурси както е. Ако ресурсите отнемат повече време, по-добре е да увеличите времето за timehandler в onPopulateScene. - person Rama; 18.04.2014