2014-03-11 4 views
0

Я создал экран в своем приложении, который показывает текстовое поле и кнопку, но по какой-то причине я не могу на них нажимать. Есть ли у вас какие-либо идеи, что может быть причиной. Вот мой код (я пропустил объявление переменного):LibGDX - Scene2d не может нажимать на виджеты

public class SentenceScreen implements Screen { 
public SentenceScreen(Game g) { 
    game = g; 
} 

@Override 
public void render(float delta) { 
    // TODO Auto-generated method stub 
    Gdx.gl.glClearColor(0,0,0,0); 
    Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); 

    stage = new Stage(); 

    Skin skin = new Skin(Gdx.files.internal("uiskin.json")); 

    btnLogin = new TextButton("Click me", skin); 
    btnLogin.setPosition(300, 50); 
    btnLogin.setSize(100, 60); 
    stage.addActor(btnLogin); 

    textField = new TextField("", skin); 
    textField.setPosition(100, 50); 
    textField.setSize(190, 60); 
    stage.addActor(textField); 

    stage.act(delta); 
    stage.draw(); 

    Gdx.input.setInputProcessor(stage); 
} 
    } 
+0

Вы называете 'стадии = новый этап()' в '' рендеринга) метода (? этот материал принадлежит методу construcotr или 'show()'! Вы должны сначала пройти некоторые базовые учебники по libgdx, которые я думаю. – Springrbua

+0

Спасибо, я переехал, но все тот же. :? – user43051

ответ

2
stage = new Stage(); 

Skin skin = new Skin(Gdx.files.internal("uiskin.json")); 

btnLogin = new TextButton("Click me", skin); 
btnLogin.setPosition(300, 50); 
btnLogin.setSize(100, 60); 
stage.addActor(btnLogin); 

textField = new TextField("", skin); 
textField.setPosition(100, 50); 
textField.setSize(190, 60); 
stage.addActor(textField); 

Gdx.input.setInputProcessor(stage); 

Все это не должно быть в вашем методе визуализации(). Вместо этого поместите экземпляр в метод show() или в ваш конкатструктор. Это также значительно сократит отставание.

Почему ваши кнопки не работают: вы создаете новый этап для каждого кадра и назначаете ему InputProcessor. В вашем фактическом коде отсутствует момент для обработки фактического ввода.

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

public class SentenceScreen implements Screen { 
public SentenceScreen(Game g) { 
    game = g; 
} 

@Override 
public void render(float delta) { 
// TODO Auto-generated method stub 
Gdx.gl.glClearColor(0,0,0,0); 
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); 

stage.act(delta); 
stage.draw(); 
} 

@Override 
public void show() { 

stage = new Stage(); 

Skin skin = new Skin(Gdx.files.internal("uiskin.json")); 

btnLogin = new TextButton("Click me", skin); 
btnLogin.setPosition(300, 50); 
btnLogin.setSize(100, 60); 
stage.addActor(btnLogin); 

textField = new TextField("", skin); 
textField.setPosition(100, 50); 
textField.setSize(190, 60); 
stage.addActor(textField); 

Gdx.input.setInputProcessor(stage); 
} 
} 
+0

Спасибо, приятель !!! – user43051

+1

@ user43051 это удовольствие! – Ferdz

Смежные вопросы