Я разрабатываю небольшую игру, в которой у меня есть изменяющиеся изображения и панель управления (несколько кнопок), которую пользователь должен нажимать на них в соответствии с изображением. Класс GameView расширяет SurfaceView, поэтому, когда начинается действие, он просто создает игру и устанавливает вид контента (макет с SurfaceView и некоторые кнопки в относительном макете). Игровой вызов loadGameObjects во время обратного вызова setSurfaceSize выглядит следующим образом:
public void setSurfaceSize(int width, int height)
{
synchronized (holder)
{
canvasWidth = width;
canvasHeight = height;
GameView.this.postInvalidate();
loadGameObjects(getResources());
}
}
В методе loadGameObjects я сохраняю ссылку на игровой объект pojo, который не является представлением (но содержит ссылки на изображения) следующим образом:
public void loadGameObjects(Resources resouces)
{
List<GameObject> gameObjects = new LinkedList<GameObject>();
int middleX = getWidth()/2;
int middleY = getHeight()/2;
//Create the backgroung game object
BitmapDrawable background = (BitmapDrawable)resouces.getDrawable(R.drawable.g_monitor);
Bitmap bitmap = Bitmap.createScaledBitmap(background.getBitmap(), getWidth(),
getHeight(), true);
background = new BitmapDrawable(bitmap);
gameObjects.add(new GameObject(this, getContext(), background, new Point(0,0)));
//Create the game object with all its images.
Map<RunningGoblinResourceEnum, BitmapDrawable> goblinImgs = new HashMap<RunningGoblinResourceEnum, BitmapDrawable>();
goblinImgs.put(RunningGoblinResourceEnum.greenGoblinUp, (BitmapDrawable)resouces.getDrawable(R.drawable.goblin_up_green));
//This map get more entries like this...
//ourGoblin is a member var that later will be null in onClick
ourGoblin = new RunningGoblinObject(this, getContext(), goblinImgs,
new Point(middleX, middleY));
gameObjects.add(ourGoblin);
setGameObjects(gameObjects);
}
Во время doDraw вызывается метод «рисования» игровых объектов, чтобы нарисовать себя на холсте.
Моя проблема в том, что когда я нажимаю кнопку, ссылка на ourGoblin игровой объект становится нулевой, хотя она действительна во время метода loadGameObjects.
Может кто-нибудь сказать мне, что мне не хватает?