代码之家  ›  专栏  ›  技术社区  ›  Henrik

将信息传递给渲染器

  •  2
  • Henrik  · 技术社区  · 6 年前

    在我的 libgdx renderer :

    @Override
    public void render() {
       if (mUpdate) {
          update();
       }
       .
       .
       .    
    }
    

    这个 update render .

    create :

    Gdx.graphics.setContinuousRendering(false);
    

    我放火了 mUpdate = true

    public void invalidate(boolean update) {
        mUpdate = update;
        Gdx.graphics.requestRendering();
    }
    

    现在的问题是 invalidate(false) 可能由非用户操作隐式调用,而非用户操作又可能设置 mUpdate = false . 这会导致 更新 requestRendering ).

    我最好的解决办法是什么?我应该喝点什么吗 AtomicInteger 更新 总是在我的生活中被召唤 提供

    public void invalidate(boolean update) {
        if (update) {
            mUpdateCounter.getAndIncrement();
        }
        Gdx.graphics.requestRendering();
    }
    

    然后

    @Override
    public void render() {
        if (mUpdateCounter.get() > 0) {
            update();
            mUpdateCounter.getAndDecrement();
        }
        .
        .
        .
    }
    

    或者是否可以传递实例信息( mUpdate )每 渲染器

    1 回复  |  直到 6 年前
        1
  •  1
  •   Morchul drojokef    6 年前

    你可以在你的电脑里直接调用update invalidate(boolean)

    if (update)
        update();
    

    如果需要渲染线程,可以使用 Gdx.app.postRunnable() :

    if (update) {
        Gdx.app.postRunnable(new Runnable() {
            @Override
            public void run() {
                update();
            }
        });
    }