2014-01-04 4 views
4

Я использую фреймворк libgdx для создания игры. Я пытаюсь создать экранные кнопки/элементы управления.Libgdx Создание на экране управления

В настоящее время у меня есть

class LevelOne that implements Screen. 

Этот класс имеет приватный переменный мир (От Box2d)

Я хочу добавить таблицы с Textbuttons или Libgdx Touchpad к миру Box2D. Однако я не уверен, как это сделать.

Далее, я знаю, что я могу добавить таблицу или тачпад в стадию Libgdx. В любом случае, чтобы заставить стадию Libgdx и мир Box2d работать вместе, я могу добавить Touchpad или Table в мир Box2d.

+0

Я хочу добавить таблицу с текстовыми кнопками или сенсорную панель Libgdx в мир Box2d ?????? Не могли бы вы объяснить, почему вы этого хотите? для вашего второго вопроса следуйте по этой ссылке http://stackoverflow.com/questions/10112868/example-of-director-stage-group-actor-box2d-and-gesturedector-libgdx – Pranav008

+0

Я хотел использовать таблицу с кнопками или сенсорной панелью для создавать на экране элементы управления. – Mandeep

+0

ни таблица, ни тачпад не требуют box2d ... – Pranav008

ответ

9

Для управления на экране, вы можете сделать это следующим образом:

Создайте новый кулачок, который будет зафиксирован для управления:

OrthographicCamera guicam = new OrthographicCamera(480, 320); 
guicam.position.set(480/2F, 320/2F, 0); 

Сделайте (libgdx) Прямоугольник для каждого элемента управления:

Rectangle wleftBounds = new Rectangle(0, 0, 80, 80); 
Rectangle wrightBounds = new Rectangle(80, 0, 80, 80); 

Создать новую Vector3 провести свой unprojected контакт координаты:

Vector3 touchPoint = new Vector3(); 

Затем вы можете опрашивать вход, чтобы увидеть, если пользователь прикасается эти прямоугольники:

//in render method 
for (int i=0; i<5; i++){ 
    if (!Gdx.input.isTouched(i)) continue; 
    guicam.unproject(touchPoint.set(Gdx.input.getX(i), Gdx.input.getY(i), 0)); 
    if (wleftBounds.contains(touchPoint.x, touchPoint.y)){ 
     //Move your player to the left! 
    }else if (wrightBounds.contains(touchPoint.x, touchPoint.y)){ 
     //Move your player to the right! 
    } 
} 

Примечание Я проверяю первые 5 сенсорных индексов, то потому что вы наверняка хотите иметь элементы управления, которые в настоящее время используется в то же время (т.е. Прыжки при движении вправо).

Последнее, но не менее, вы хотите, чтобы сделать некоторые интересные графики по сравнению с контролем:

batch.draw(leftRegion, wleftBounds.x, wleftBounds.y, wleftBounds.width, wleftBounds.height); 
batch.draw(rightRegion, wrightBounds.x, wrightBounds.y, wrightBounds.width, wrightBounds.height); 
+0

Это сработало для меня. Тем не менее, я не уверен, как использовать вторую камеру, чтобы элементы управления оставались на экране. Я создал новую орфографическую камеру и новую SpriteBatch (отличную от той, которая использовалась для рисования игрока, врагов, фона и т. Д.). Однако я должен делать что-то неправильно, потому что управление отключается, поскольку первая камера следует за движущимся игроком. – Mandeep

+0

Ничего, я понял. Я создавал копию своего первого объекта камеры и использовал это как вторую камеру. Но мне нужно было создать новый объект второй камеры, который не вызывает функцию camera.setToOrtho(), как первый объект камеры. Он работает сейчас. – Mandeep

0

Если вы хотите включать стадию HUD

Создать матрицу HUD (импорт com.badlogic.gdx .math.Matrix4):

HUDMatrix = camera.combined.cpy(); 
HUDMatrix.setToOrtho2D(0, 0, wwidth, wheight); 

Затем нарисуйте его HUD

batch.setProjectionMatrix(HUDMatrix); 
batch.begin(); 
    stage.draw(batch) 
batch.end();  
Смежные вопросы