Libgdx主菜单屏幕

5

我正在尝试学习使用libgdx框架。就像libgdx网站上的教程(https://code.google.com/p/libgdx/wiki/ExtendedSimpleApp)所描述的那样,我尝试设置一个小型主菜单。我已经导入了所有必要的类,但在第29行总是出现错误:“MainMenuScreen无法解析为类型”。以下是源代码:

package com.me.mygdxgame;

import java.awt.SplashScreen;

import com.badlogic.gdx.ApplicationListener;
import com.badlogic.gdx.Game;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL10;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.BitmapFont;
import com.badlogic.gdx.graphics.g2d.Sprite;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;



public class MyGdxGame implements ApplicationListener {
private OrthographicCamera camera;
private SpriteBatch batch;
private Texture texture;
private Sprite sprite;
private BitmapFont font;

    @Override
public void create() {      
    batch = new SpriteBatch();
    //Use LibGDX's default Arial font.
    font = new BitmapFont();
    this.setScreen(new MainMenuScreen(this));
}

@Override
public void dispose() {
    batch.dispose();
    texture.dispose();
}

@Override
public void render() {      
    Gdx.gl.glClearColor(1, 1, 1, 1);
    Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);

    batch.setProjectionMatrix(camera.combined);
    batch.begin();
    sprite.draw(batch);
    batch.end();
}

@Override
public void resize(int width, int height) {
}

@Override
public void pause() {
}

@Override
public void resume() {
}

}


你创建了一个叫做MainMenuScreen的类来实现Screen接口吗? - Nibb
6个回答

10

MainMenuScreen不是标准类,如果你在教程中继续阅读,你会发现他们创建了一个额外的类“MainMenuScreen”,只需创建另一个名为“MainMenuScreen”的类,并将教程中的代码添加到那里即可。

如果这是你第一次接触Java,你可能需要先谷歌一些Java教程来学习Java和面向对象编程的基础知识,然后再使用一些外部库;)


谢谢您的快速回复!我知道Java是如何工作的,但是我已经很长时间没有使用Android了:D 另外,我不是以英语为母语的人,所以对于我来说,教程并不容易理解;) - Juerrrgen
1
@BigT 这实际上与Android无关。Libgdx是一个跨平台的游戏引擎,你遇到的问题与Android没有任何关系。 - noone
一如既往地建议您查看Steigert博客,您将快速了解该系统:http://steigert.blogspot.de/ - bemeyer
1
这似乎是一个很好的回答。如果您同意@BigT,您应该考虑接受它。“接受并不意味着它是最好的答案,它只是意味着对于提问者而言它是可行的。”-来自http://stackoverflow.com/tour - fr1tz

2
你需要创建一个继承自libgdx的游戏类的类。
public class MainClass extends Game

在主类的create方法中,您需要设置屏幕。

setScreen(new MainMenuScreen(this));

在您的mainmenuclass中,您需要实现libgdx的screen类。
public class MainMenuScreen implements Screen

你需要创建一个像这样的构造函数。
public MainMenuScreen(Game game) {
    // TODO Auto-generated constructor stub
    this.game = game;
    camera = new OrthographicCamera();
    camera.setToOrtho(false, scrw, scrh);//scrw is your screen width,scrh is screen height
    camera.update();
            batch = new SpriteBatch();
    Gdx.input.setInputProcessor(MainMenuScreen.this);}

我认为这个会起作用...

1
你的基本概念不清楚。 要在单个应用程序中使用不同的屏幕,你需要扩展Game类。
public class MyGdxGame extends Game implements ApplicationListener{}

要选择不同的屏幕,请调用以下命令:

setScreen(new XYZScreen(this));

this 指向 MyGdxGame 对象。

现在你需要创建一个名为 XYZ 的新类。然后在你的新屏幕上进行任何想要的操作。


1

1
如果您想使用Screen类,您应该从Game类扩展主类。如果您使用Screen,则不能再使用ApplicationListener,因为在Screen中,您已经覆盖了所有的ApplicationListener函数...
您需要做的就是将您的应用程序监听器代码移动到“MainMenuScreen”中。
然后,在创建MainClass类时,将屏幕设置为“MainMenuScreen”。 public class MainClass extends Game {
@Override
public void create() {
    setScreen(new MainMenuScreen());
}}

0

我曾在一个小项目中使用过屏幕,这是其中一个屏幕的代码。

package com.sample.Main;

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Screen;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;

public class Mainmenu implements Screen {

    MainGame game;
    SpriteBatch batch;

    Mainmenu(MainGame g){
        game = g;
        batch = g.batch;
    }

    @Override
    public void show() {


    }

    @Override
    public void render(float delta) {

    }

    @Override
    public void resize(int width, int height) {

    }

    @Override
    public void pause() {

    }

    @Override
    public void resume() {


    }

    @Override
    public void hide() {


    }

    @Override
    public void dispose() {

    }

}

这里是运行屏幕的主游戏代码:

package com.sample.Main;

import com.badlogic.gdx.Game;
import com.badlogic.gdx.Screen;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;

public class MainGame extends Game {
    SpriteBatch batch;
    Screen mainscreen;

    @Override
    public void create () {
        batch = new SpriteBatch();
        mainscreen = new Mainmenu(this);
        setScreen(mainscreen);
    }

    @Override
    public void render () {
        super.render();
    }

    @Override
    public void dispose () {
        batch.dispose();
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接