4

我正在尝试学习使用 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() {
}

}

4

6 回答 6

10

MainMenuScreen 不是标准类,如果您在链接的教程中进一步阅读,您会看到他们创建了一个额外的类“MainMenuScreen”,只需创建另一个名为“MainMenuScreen”的类并在那里添加教程中的代码。

如果这是您第一次使用 java,您可能想在使用一些外部库之前先搜索一些 java 教程来学习 java 和 oop 的基础;)

于 2013-09-03T19:48:38.953 回答
2

您需要创建一个扩展 libgdx 游戏类的类。

public class MainClass extends Game

然后在您的主类创建方法中,您必须设置屏幕。

setScreen(new MainMenuScreen(this));

并且在您的 mainmenuclass 中,您必须实现 libgdx 的屏幕类。

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);}

我认为这会奏效......

于 2013-10-03T18:55:12.093 回答
1

要开始学习 libGDX,请查看此项目:https ://github.com/edesdan/libgdx-playground 。也许它可以帮助你迈出进入这个世界的第一步。

于 2015-05-27T15:59:44.037 回答
1

你的基本概念不清楚。要在单个应用程序中使用不同的屏幕,您必须扩展Game该类。

public class MyGdxGame extends Game implements ApplicationListener{}

要选择不同的屏幕,请致电:

setScreen(new XYZScreen(this));

this参考 的对象MyGdxGame

现在您必须创建一个新的 XYZ 类名称。然后在新屏幕上做任何你想做的事。

于 2016-04-13T19:15:40.867 回答
1

如果你想使用类 Screen 你应该从类 Game 扩展 mainclass 如果你使用 screen 你不能再使用 applicationlistener 因为在 Screen 中你已经覆盖了所有应用程序监听器函数......

您所要做的就是将应用程序侦听器中的代码移动到“MainMenuScreen”

然后在创建类 Mainclass 时将屏幕设置为“MainMenuScreen”

公共类 MainClass 扩展游戏 {

@Override
public void create() {
    setScreen(new MainMenuScreen());
}}
于 2017-12-29T18:54:55.997 回答
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();
    }
}
于 2018-02-20T01:01:31.020 回答