java - LibGDX Actor 绘制覆盖

标签 java android libgdx

我试图重写我的 Player 类,它扩展了 Actor draw 方法,但我收到一条错误消息说

The method draw(SpriteBatch, float) of type Player must override or implement a supertype method

为什么我不能覆盖 Actor 类的默认 draw 方法?这是我在 Player 类中的代码。

public class Player extends Actor {
    @Override
    public void draw(SpriteBatch batch, float parentAlpha) {
        Gdx.app.log(getName(), "Drawing player");
    }

    public Player() {
        setName("mainPlayer");

        playerBounds = new Rectangle(100, 100, 32, 32);
    }
}

这是我在正在绘制舞台的类中的代码。

public class Mainscreen implements Screen {
    // Class TAG
    private static final String TAG = "Main Screen";

    // Screen Variable(s)
    private Awakening g;
    private SpriteBatch sprBatch;
    private OrthographicCamera gameCamera;
    private Player mainPlayer;

    // Screen Stage(s)
    private sMain sMain;

    @Override
    public void dispose() {
        sprBatch.dispose();
        sMain.dispose();
    }

    @Override
    public void hide() {
        g.inputController.removeProcessor(sMain);

        dispose();
    }

    public Mainscreen(Awakening game){
        g = game;

        sMain = new sMain(g, g.configMgr.getWidth(), g.configMgr.getHeight(), true);

        gameCamera = new OrthographicCamera();
        gameCamera.setToOrtho(false, sMain.getWidth(), sMain.getHeight());

        mainPlayer = new Player(g, gameCamera);
        g.setPlayer(mainPlayer);

        sprBatch = new SpriteBatch();

        g.mapMgr.setMap(g, gameCamera, "TestMap", mainPlayer);

        sMain.addActor(mainPlayer);
    }

    @Override
    public void pause() {g.togglePause(true);g.debugOut(TAG, "pause()");}

    @Override
    public void render(float delta) {
        if(!g.isPaused()){

            sMain.act(delta);

            Gdx.gl.glClearColor(.125f, .125f, .125f, 0);
            Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);

            gameCamera.update();

            g.mapMgr.updateNPCS();

            sprBatch.setProjectionMatrix(gameCamera.combined);
            sprBatch.begin();
            g.mapMgr.draw(gameCamera, new int[] {0,1});

            sMain.draw(); // Draw player/NPCs

            //g.getPlayer().draw(sprBatch, 0f);

            g.mapMgr.drawCollisionRectangles(gameCamera);
            sprBatch.end();
        }
    }

    @Override
    public void resize(int width, int height) {g.debugOut(TAG,"resize("+width+","+height+")");}

    @Override
    public void resume() {g.togglePause(false);g.debugOut(TAG, "resume()");}

    @Override
    public void show() {
        g.debugOut(TAG, "show()");

        g.inputController.addProcessor(sMain);
        g.updateInput();
    }
}

我不确定发生了什么,但很确定我可以覆盖之前的绘制。

最佳答案

你必须像这样覆盖它:

@Override
public void draw(Batch batch, float parentAlpha) {
    Gdx.app.log(getName(), "Drawing player");
}

SpriteBatch 更改为 Batch。引用 Actor#draw

关于java - LibGDX Actor 绘制覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20793113/

相关文章:

java - 如何利用分隔符数组在Java中使用多个分隔符分割字符串?

java - 在 JAXB 注释的对象中使用带有 toXML 方法的对象?

android - 如何从通知中打开 fragment

android - 在 sql 数据库和 json 响应之间比较数据的有效方法

java - 如何在java中使用正则表达式分割字符串

java - 什么时候抛出 FileNotFoundException

android - LInkify 阻止 onclick 事件

java - LibGDX - Camera.update() 调用不执行任何操作

java - libgdx 某些按键比其他按键快?

java - Libgdx 和 ProGuard 无法与 Themable Widget Library(桌面)一起使用