2016-12-27 2 views
0

просто интересно, как вы меняете экраны в libgdx (экран реализует экран). Я попробовал и настроил его, чтобы изменить экран на screentap на телефоне, или когда в ПК нажимается космос, но игра никак не реагирует. Есть идеи? классИзменить экран libgdx, не работает

игры:

package com.kapres.bounce; 

import com.badlogic.gdx.Game; 

/** 
* Created by KnutAndre on 12/20/2016. 
*/ 

public class BounceGame extends Game { 
@Override 
public void create() { 
    showMenuScreen(); 
} 

public void showMenuScreen(){ 
    setScreen(new MenuScreen(this)); 
} 

public void showGameScreen(){ 
    setScreen(new GameScreen()); 
} 
} 

Экранное меню:

package com.kapres.bounce; 

import com.badlogic.gdx.Gdx; 
import com.badlogic.gdx.Input; 
import com.badlogic.gdx.InputAdapter; 
import com.badlogic.gdx.Screen; 
import com.badlogic.gdx.graphics.Color; 
import com.badlogic.gdx.graphics.GL20; 
import com.badlogic.gdx.graphics.glutils.ShapeRenderer; 
import com.badlogic.gdx.utils.viewport.FitViewport; 

/** 
* Created by KnutAndre on 12/26/2016. 
*/ 

public class MenuScreen extends InputAdapter implements Screen { 

BounceGame game; 

ShapeRenderer renderer; 
FitViewport menuViewport; 

public MenuScreen(BounceGame game) {this.game = game;} 

@Override 
public void show() { 
    renderer = new ShapeRenderer(); 
    menuViewport = new FitViewport(Constants.WORLD_WIDTH, Constants.WORLD_HEIGTH); 
    renderer.setAutoShapeType(true); 
} 

@Override 
public void render(float delta) { 
    menuViewport.apply(true); 

    Gdx.gl.glClearColor(Constants.BACKGROUND_COLOR.r, Constants.BACKGROUND_COLOR.g, Constants.BACKGROUND_COLOR.b, 1); 
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 

    renderer.setProjectionMatrix(menuViewport.getCamera().combined); 

    renderer.begin(); 
    renderer.set(ShapeRenderer.ShapeType.Filled); 
    renderer.setColor(Color.GREEN); 
    renderer.circle(Constants.WORLD_WIDTH/2, Constants.WORLD_HEIGTH/2, Constants.START_BUTTON_RADIUS, 50); 
    renderer.end(); 
} 

@Override 

public void resize(int width, int height) { 
    menuViewport.update(width, height, true); 
    // menuViewport.getCamera().position.set(Constants.WORLD_WIDTH/2, Constants.WORLD_HEIGTH/2); 
} 

@Override 
public void pause() { 

} 

@Override 
public void resume() { 

} 

@Override 
public void hide() { 
    renderer.dispose(); 
} 

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

@Override 
public boolean keyDown(int keyCode) { 
    if (keyCode == Input.Keys.SPACE){ 
     game.showGameScreen(); 
    } 
    return true; 
} 

@Override 
public boolean touchDown(int screenX, int screenY, int pointer, int button){ 
    game.showGameScreen(); 
    return true; 
} 

}

Экран игры:

package com.kapres.bounce; 

import com.badlogic.gdx.Gdx; 
import com.badlogic.gdx.Screen; 
import com.badlogic.gdx.graphics.GL20; 
import com.badlogic.gdx.graphics.glutils.ShapeRenderer; 
import com.badlogic.gdx.utils.viewport.FitViewport; 


/** 
* Created by KnutAndre on 12/20/2016. 
*/ 

public class GameScreen implements Screen{ 

ShapeRenderer renderer; 
FitViewport gameViewport; 
Ball ball; 

@Override 
public void show() { 
    renderer = new ShapeRenderer(); 
    renderer.setAutoShapeType(true); 
    gameViewport = new FitViewport(Constants.WORLD_WIDTH, Constants.WORLD_HEIGTH); 
    ball = new Ball(gameViewport); 
    Gdx.input.setInputProcessor(ball); 
} 

@Override 
public void render(float delta) { 
    gameViewport.apply(true); 

    Gdx.gl.glClearColor(Constants.BACKGROUND_COLOR.r, Constants.BACKGROUND_COLOR.g, Constants.BACKGROUND_COLOR.b, 1); 
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 

    renderer.setProjectionMatrix(gameViewport.getCamera().combined); 

    renderer.begin(); 
    ball.render(renderer, delta); 
    renderer.end(); 
} 

@Override 
public void resize(int width, int height) { 
    gameViewport.update(width, height, true); 
    ball.init(); 
} 

@Override 
public void pause() { 

} 

@Override 
public void resume() { 

} 

@Override 
public void hide() { 

} 

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

ответ

0

Похоже, вы забыли установить входной процессор

Gdx.input.setInputProcessor(var); 

Вы должны вызвать этот метод в методе MenuScreenshow(). Таким образом, двигатель будет знать ваш процессор ввода *.

код будет выглядеть следующим образом:

public class MenuScreen extends InputAdapter implements Screen { 

    ... 

    @Override 
    public void show() { 
     Gdx.input.setInputProcessor(this); 
     ... 
    } 

    ... 
} 

* The InputAdapter это просто класс, который реализует интерфейс InputProcessor.

Существует также класс под названием InputMultiplexer, если вам потребуется больше одного входного процессора одновременно.

Docs:

InputProcessor

InputAdapter

InputMultiplexer

0

Не забудьте позвонить super.render() в вашем render() метод BounceGame класса (это не представлено на ваших фрагментах), например:

@Override 
public void render() { 
    super.render(); 
    if (Gdx.input.isKeyJustPressed(Input.Keys.ESCAPE)) { 
     Gdx.app.exit(); 
    } 
} 

Это делает экран, если он не пустой (например, setScreen(new MainScreen()) метод был вызван раньше). render() метод из суперкласса Game:

@Override 
public void render() { 
    if (screen != null) screen.render(Gdx.graphics.getDeltaTime()); 
} 
Смежные вопросы