2015-04-01 4 views
1

Я делаю игру libgdx как упражнение. Его довольно простой, что-то вроде «побега» вида игры. Просто экраны с фоном, некоторые предметы и стрелки влево/вправо.Вход - Обработка действий в LibGdx

Как libgdx все упрощает, я блуждал, если есть простой способ обработки действий. Теперь это всего лишь куча «if else» в методе onClick(). Теперь это прекрасно, но с десятками или мешками предметов он будет грязным и, вероятно, лагги при щелчке.

public void onClick(int scrX, int scrY){ 
    pX = (scrX/viewW)*WORLD_W; 
    pY = (scrY/viewH)*WORLD_H; 
    if (pX > 10 && pX < 20 && pY > 10 && pY < 20) { 
     if (stage.getInfo().getLeft() == true) { 
      Gdx.app.log("Click", "Left"); 
      stage = new StageGame(stage.getInfo().getLeftStage()); 
     } 
    } 
    else if(pX > 80 && pX < 90 && pY > 10 && pY < 20) { 
     if (stage.getInfo().getRight() == true) { 
      Gdx.app.log("Click", "Right"); 
      stage = new StageGame(stage.getInfo().getRightStage()); 
     } 
    } 
} 

Я думал о переключении здесь, но мне все равно придется использовать некоторые условия. Другая идея была матрицей, скажем, 100x100. На каждом этапе он будет считаться из файла. После щелчка x и y будет легко переведено в значения сетки и произойдет правильное действие. Но это полезно только для статической игры, а не для использования памяти и обработки этой матрицы.

I'm pretty shure thats all wrong, но я не могу найти что-то, что я не могу назвать: P Help pls!

+0

Матрица экранных объектов - неплохая идея, если вы уверены, что у вас будет точно матрица MxN. Другой способ, возможно, список, чтобы сделать его более flixibile. Список списков на самом деле. Кроме того, я не использовал его, но libGDX имеет некоторую функцию карты, поэтому проверьте ее - возможно, вы можете это использовать. – MilanG

ответ

0

Я думаю, вы можете использовать инфраструктуру Libgdx Actors (ака Scene2d), чтобы помочь организовать ваши экранные элементы. Актеры могут иметь место на экране и свои собственные обработчики onClick. Libgdx позаботится о том, чтобы выяснить, какой Актер был нажат, и вызовет его обработчик. См. When to use actors in libgdx? What are cons and pros? и https://github.com/libgdx/libgdx/wiki/Scene2d

Как не важно, вам не нужно беспокоиться о производительности обнаружения щелчка, если на экране нет тысячи объектов (а затем у вас есть другие проблемы). Я бы гораздо больше беспокоился о том, чтобы код поддерживался и отлаживался на данный момент.

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