Skip to content

JavaANAppSurfaceView.surfaceCreated 不移除所有纹理的话, 会有问题吗? #38

@EternalFire

Description

@EternalFire

问题: JavaANAppSurfaceView.surfaceCreated 不移除所有纹理的话, 会有问题吗?

代码版本: 148d54077b1de819cf0958cc198b69ab97d67411

引擎代码: Java/Loon-Lite(PureJava)/LoonLiteCore, Java/Loon-Lite(PureJava)/LoonLiteJavaAN

例子项目: 使用这些目录里面的资源和代码Java/examples/assets, Java/examples/org, Java/Loon-Neo/src/assets, 创建了一个纯JavaAndroid Studio工程. 项目可以运行(拍拍手👏)!

但是, app 退到后台, 再返回前台, 图片不见了

但是, 文字还在, 按钮也在

打断点调试发现 JavaANAppSurfaceView.surfaceCreated 里面会清掉所有纹理.

public class JavaANAppSurfaceView ... {
	@Override
	public void surfaceCreated(SurfaceHolder surfaceHolder) {
		updatePpi();
		start();
		if (_game != null) {
//			LSystem.resetTextureRes(_game); // 注释这行
			if (_game.display() != null) {
				_game.display().GL().update();
			}
			LSystem.d("Created Renderer View");
		}
	}
}

注释以后, app 返回前台图片还在!!!


原例子代码的改动:

原例子有些代码在 LoonLiteCore 引擎里没有. 所以移除一些例子代码.

MultiScreenTest 里面移除了一些:

public class MultiScreenTest extends Screen {

    // ...

    @Override
	public void onLoad() {

        // ...

		if (page == 0) {
			addScreen(page0[index++], new LMessageBoxTest());
//			addScreen(page0[index++], new Live2dTest());
			addScreen(page0[index++], new ActionEventTest());
			addScreen(page0[index++], new EffectTest());
			addScreen(page0[index++], new EmulatorTest());
			addScreen(page0[index++], new TileMapTest());
//			addScreen(page0[index++], new SpriteBatchTest());
			addScreen(page0[index++], new BDFontTest());
			addScreen(page0[index++], new BMFontTest());
			addScreen(page0[index++], new LayoutTest());
			addScreen(page0[index++], new TableTest());
			addScreen(page0[index++], new MenuTest());
//			addScreen(page0[index++], new DecideNameTest());
			addScreen(page0[index++], new ToastTest());
			addScreen(page0[index++], new ListTest());
			addScreen(page0[index++], new SpriteTest());
			addScreen(page0[index++], new LTexturePackTest());
//			addScreen(page0[index++], new NodeTest());
			addScreen(page0[index++], new ScrollTest());
//			addScreen(page0[index++], new CycleTest());
			addScreen(page0[index++], new TextAreaTest());
			addScreen(page0[index++], new ProgressTest());
			addScreen(page0[index++], new ParticleTest());
			addScreen(page0[index++], new SelectIconTest());
			addScreen(page0[index++], new ControlTest());
			addScreen(page0[index++], new JSonResTest());
			addScreen(page0[index++], new SpriteSheetFontTest());
			addScreen(page0[index++], new ParticleConfigTest());
			addScreen(page0[index++], new RippleTouchTest());
			addScreen(page0[index++], new SoundTest());
			addScreen(page0[index++], new GestureTest());
//			addScreen(page0[index++], new PhysicalTest());
//			addScreen(page0[index++], new Node2Test());
			addScreen(page0[index++], new SysInputTest());
			addScreen(page0[index++], new DepthTest());
//			addScreen(page0[index++], new CanvasLayerTest());
			addScreen(page0[index++], new GameMapTest());
//			addScreen(page0[index++], new MovieClipTest());
			addScreen(page0[index++], new TextureImageTest());
			addScreen(page0[index++], new SessionTest());
		} else if (page == 1) {
			addScreen(page1[index++], new Test());
			addScreen(page1[index++], new SliderTest());
			addScreen(page1[index++], new AlertTest());
			addScreen(page1[index++], new AnimationTest());
			addScreen(page1[index++], new FrameLoopTest());
			addScreen(page1[index++], new RocScriptTest());
			addScreen(page1[index++], new ScrollTextTest());
			addScreen(page1[index++], new LightImageTest());
			addScreen(page1[index++], new CountdownTest());
			addScreen(page1[index++], new TitleScreen());
			addScreen(page1[index++], new TDTest());
			addScreen(page1[index++], new LLKTest());
			addScreen(page1[index++], new TextFieldTest());
//			addScreen(page1[index++], new SRPGTest());
			addScreen(page1[index++], new PShadowTest());
			addScreen(page1[index++], new MapTest());
//			addScreen(page1[index++], new ImageTest());
			addScreen(page1[index++], new NaturalTest());
			addScreen(page1[index++], new MenuSelectTest());
			addScreen(page1[index++], new CheckBoxTest());
			addScreen(page1[index++], new TextTreeTest());
			addScreen(page1[index++], new SLGTest());
			addScreen(page1[index++], new I18NTest());
//			addScreen(page1[index++], new ButtleTest());
			addScreen(page1[index++], new HexagonMapTest());
			addScreen(page1[index++], new LabelTest());
			addScreen(page1[index++], new GridTest());
			addScreen(page1[index++], new ElementsOrderTest());
//			addScreen(page1[index++], new QRCodeTest());
			addScreen(page1[index++], new ChopTest());
//			addScreen(page1[index++], new CachePoolTest());
			addScreen(page1[index++], new JSonViewTest());
//			addScreen(page1[index++], new HtmlViewTest());
			addScreen(page1[index++], new CompNewLine());
			addScreen(page1[index++], new CollisionWorldTest());
			addScreen(page1[index++], new GravityTest());
			addScreen(page1[index++], new JigsawTest());
//			addScreen(page1[index++], new TetrisTest());
			addScreen(page1[index++], new ExplosionTest());
			addScreen(page1[index++], new FlappyBirdTest());
		} else if (page == 2) {
			addScreen(page2[index++], new TimerTest());
			addScreen(page2[index++], new SnakeTest());
			addScreen(page2[index++], new TextEffectTest());
			addScreen(page2[index++], new MarginTest());
			addScreen(page2[index++], new DefineMoveTest());
			addScreen(page2[index++], new IntervalTest());
			addScreen(page2[index++], new SchedulerTest());
//			addScreen(page2[index++], new ShaderTest());
//			addScreen(page2[index++], new FrameBufferTest());
			addScreen(page2[index++], new TaichiTest());
			addScreen(page2[index++], new StatusTest());
			addScreen(page2[index++], new DragTest());
			addScreen(page2[index++], new RadarTest());
			addScreen(page2[index++], new PathMoveTest());
			addScreen(page2[index++], new AnswerTest());
			addScreen(page2[index++], new PreloadTest());
		}
    }
}

Activity:

public class MainActivity2 extends JavaANApplication {


    @Override
    public LazyLoading.Data main(JavaANSetting setting) {
        // 配置游戏设置
        setting.appName = "My Loon Game";
        setting.width = 480;
        setting.height = 800;
        setting.fullscreen = false;
        setting.isCheckResize = true;
//        setting.disposeTexture = false;
//        setting.isFPS = true;
//        setting.isDrawCall = true;
//        setting.isMemory = true;

        // 返回游戏主界面
        return new LazyLoading.Data() {
            @Override
            public Screen onScreen() {
//                return new GameScreen();

                return new MultiScreenTest();
            }
        };
    }
}

运行起来的 app :

Image

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions