Поэтому я создаю заставку, которая в фоновом режиме загружает игровые ресурсы. Во время заставки это анимированный спрайт, который должен находиться в центре экрана и анимироваться до тех пор, пока все ресурсы не будут загружены, и я могу просто переключать сцены на сцену меню. Однако в данный момент спрайт анимируется в течение короткого промежутка времени, затем зависает и просто сидит без дела в течение нескольких секунд, затем загружает сцену меню (эти «несколько секунд» меняют продолжительность в зависимости от того, насколько быстро работает телефон). Например, мой телефон (новый) работает как доли секунды, однако телефон моих друзей (старый) занимает 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;
}