Для начала некоторые из ваших условий являются общими, поэтому вы можете поделиться этой частью кода, например,
if ( !hubIsClicked && !touchMoveIsDone)
{
if (event.isActionDown())
{
System.out.println("isActionDown, puzzlepiece");
touchMoveIsDone = false;
touchedBoardBlock = getBoardBlockFromPixelCoordinate(X, Y);
}
else if (event.isActionMove())
{
// Puzzle piece
System.out.println("isActionMove, puzzlepiece");
..
}
}
Затем вы говорите о глобальных переменных, но не показываете их.Будьте осторожны, что вы имеете в виду;в Java существуют статические переменные, которые существуют для всех экземпляров класса, а затем переменные экземпляра для каждого экземпляра.Я взял то, что вы сказали, что означает статическое.В вашем случае вы правы в том, что использование статических переменных здесь, как правило, некорректно и может быть улучшено.
Обычно вы не ожидаете, что слушатель сам поддержит состояние;то есть, если бы вы написали реализацию слушателя в отдельном классе, у нее не было бы никаких переменных класса или экземпляра.Несмотря на то, что по своей природе он может быть полезен, слушатель должен принадлежать кому-то, например, деятельности, и для этого владельца разумно поддерживать состояние, а слушатель должен его использовать.
Я показал это ниже в качестве примера:
public class MyActivity extends BaseGameActivity implements IOnSceneTouchListener
{
private boolean hubIsClicked = false;
private boolean touchMoveIsDone = false;
public MyActivity( ... )
{
//blah
}
@Override
public boolean onSceneTouchEvent(Scene pScene, TouchEvent pSceneTouchEvent)
{
// Do something on scene touched event
return false;
}
}
Переменные принадлежат экземпляру действия, и, как и код слушателя, он может использовать их.
Вы должны всегдапомните о продолжительности жизни владельца и отношениях между ним и информацией, которую вы хотите хранить;например, действия уничтожаются, когда пользовательский интерфейс исчезает, но вам, вероятно, не нужно больше удерживать это состояние.
Обратите внимание, что вы можете делать то же самое, если ваш слушатель скорее является внутренним классомчем включены с помощью «орудия», то есть:
public class MyActivity extends BaseGameActivity
{
private boolean hubIsClicked = false;
private boolean touchMoveIsDone = false;
public MyActivity( ... )
{
//example only
addMyExampleListener( new IOnSceneTouchListener()
{
@Override
public void onSceneTouchEvent(Scene pScene, TouchEvent pSceneTouchEvent)
{
//example only
MyActivity.this.hubIsClicked = true;
}
});
}
}
Надеюсь, что помогает!