You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AndEngine中TimerHandler的onTimePassed未触发问题求助

解决AndEngine TimerHandler onTimePassed不触发的问题

嘿,我刚接触AndEngine的时候也踩过这个一模一样的坑!别着急,咱们一步步排查问题:

首先,你的代码逻辑本身没大问题,但TimerHandler的回调没触发,大概率是场景没被正确激活或者注册时机不对,给你几个关键排查点:

1. 确认你的场景已经成为引擎的当前场景

你在createScene()里注册了TimerHandler,但如果这个场景根本没被引擎加载运行,那它的所有update handler都不会工作。检查你的BaseGameActivity子类里的onCreateScene()方法,是不是返回了这个闪屏场景:

@Override
public Scene onCreateScene() {
    SplashScene splashScene = new SplashScene();
    splashScene.createScene();
    return splashScene; // 必须返回这个场景,引擎才会运行它
}

2. 检查INIT_WAIT的单位和数值

AndEngine的TimerHandler构造函数里的时间参数是秒,不是毫秒!如果你把INIT_WAIT设成了比如2000(想等2秒),那实际会等2000秒——半小时都不会触发回调。正确的定义应该是:

private static final float INIT_WAIT = 2.0f; // 等待2秒

3. 把TimerHandler的注册时机延后到场景附加后

有时候在createScene()里注册handler时,场景还没被附加到引擎上,这时候注册的handler不会生效。可以把注册代码移到onSceneAttached()方法里,这个方法会在场景被成功附加到引擎后调用:

@Override
public void onSceneAttached() {
    super.onSceneAttached();
    // 这里注册TimerHandler才会确保场景已经在运行
    registerUpdateHandler(new TimerHandler(INIT_WAIT, new ITimerCallback() {
        @Override
        public void onTimePassed(TimerHandler pTimerHandler) {
            System.out.println("onTimePassed");
            // 记得用完注销handler,避免内存泄漏
            unregisterUpdateHandler(pTimerHandler);
            // 这里可以添加切换到主场景的逻辑
        }
    }));
}

4. 额外小提示

如果你的Timer需要重复触发,要用另一个构造函数:TimerHandler(float pSeconds, boolean pAutoReset, ITimerCallback pTimerCallback),把第二个参数设为true就会每隔指定时间执行一次回调。

按照上面的步骤排查,应该就能解决你的问题了!

内容的提问来源于stack exchange,提问作者Joe Doe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:39:32