SanchelliosProg
@SanchelliosProg
Java, Android, Software Testing

Как заставить работать клавиатуру в игре, которая написана с помощью libgdx?

Здравствуйте, Друзья.

Вчера решил освоить libgdx, потому что очень хочется в свободное время пописать игры, короче, поразвлекаться. Но моё настроение было подпорчено ужасной вещью.

Решил я начать с малого и прошёл вот этот вот урок. Код всей программы в самом низу странички из этой ссылки.

Обратите нимание на метод render() и на вот эти строчки:
// обработка пользовательского ввода
        //обработка ввода мыши
        if(Gdx.input.isTouched()) {
            Vector3 touchPos = new Vector3();
            touchPos.set(Gdx.input.getX(), Gdx.input.getY(), 0);
            camera.unproject(touchPos);
            bucket.x = touchPos.x - 64 / 2;
        }
        //обработка ввода с клавиатуры
        if(Gdx.input.isKeyPressed(Keys.LEFT)) bucket.x -= 200 * Gdx.graphics.getDeltaTime();
        if(Gdx.input.isKeyPressed(Keys.RIGHT)) bucket.x += 200 * Gdx.graphics.getDeltaTime();

Проблема именно с двумя последними строчками из этого куска кода. Суть в том, что программа совершенно не реагирует на любое нажатие с клавиатуры.

Есть ли какие-то идеи? Может, кто-то сталкивался с проблемой?

ОС: Mac OS X Yosemite;
IDE: IntelliJ IDEA
  • Вопрос задан
  • 768 просмотров
Решения вопроса 1
iundersun
@iundersun
я раньше работал c InputProcessorom
он имеет подходящие методы для обработки как мыши/клавиатуры, так и тачскрина
вот пример:
public class GameScreen implements Screen, InputProcessor{

	//вызывается при создании нового экрана (Screen)
	public void show(){	
			//говорим что будем отбрабатывать нажатия тут
			Gdx.input.setInputProcessor(this); 
	}
	
	//работаем с клавиатурой
	public boolean keyDown(int key){
			if(key==Keys.LEFT)) bucket.x -= 200 * Gdx.graphics.getDeltaTime();
			if(key==Keys.RIGHT)) bucket.x += 200 * Gdx.graphics.getDeltaTime();
	}
	
	//работаем с мышей/тачскрином
	public boolean touchDown(int screenX, int screenY, int pointer, int button){
			Vector3 touchPos = new Vector3(screenX, screenY);
            camera.unproject(touchPos);
            bucket.x = touchPos.x - 64 / 2;
	}
	
	public void render(float delta)
	{
		Gdx.gl.glClearColor(1.0F, 0.0F, 0.0F, 1.0F);
		Gdx.gl.glClear(16384);
		
		//рисуем что-то
	}
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы