Android - Доступ к кнопкам из SurfaceView - PullRequest
1 голос
/ 12 октября 2011

В настоящее время я работаю над простой игрой 2d tower defense, чтобы изучить некоторые основы разработки игр для Android.Для обработки моей графики у меня есть пользовательский объект, который расширяет SurfaceView, и весь мой рисунок происходит на объекте SurfaceView SurfaceView.Это все работает нормально.

Я бы хотел, чтобы в моей игре было два этапа.«Боевой» этап и «этап строительства».На этапе строительства я пытаюсь добавить кнопку, которую можно нажать, чтобы начать следующий этап боя.Судя по моим исследованиям, кнопки не могут быть добавлены в SurfaceView, но вместо этого я должен поместить SurfaceView и кнопки в относительную компоновку и выровнять вещи таким образом.Однако, поскольку я хочу, чтобы кнопка отображалась только половину времени, я борюсь с лучшим способом условно добавить / удалить кнопку.Я мог бы взломать это там, но я предпочел бы не торопиться и делать вещи полу-правильно, если это возможно.К сожалению, я пока не смог найти хороших примеров того, как это делается.

Есть ли способ «наилучшей практики», или я что-то упустил?Буду очень признателен за любые примеры кода того, как это можно сделать.

Спасибо!

Обновление: я понимаю, что могу использовать макет для хранения SurfaceView и кнопок, которые я хочу отобразить.Моя проблема в том, что кнопки должны быть видны только изредка.Что мне нужно сделать, это установить видимость кнопок в моем родительском макете из моего объекта SurfaceView.Тем не менее, это та часть, с которой я борюсь.

Ответы [ 3 ]

2 голосов
/ 12 октября 2011
GLSurfaceView view = new GLSurfaceView(this);
Button button = new Button(this);
setContentView(view);
addContentView(button,new  ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT ));

попробуйте этот код, я поместил текстовое представление только так, и это сработало

0 голосов
/ 25 апреля 2012

Добавьте кнопку в операцию, которая содержит вид поверхности.Затем вы можете установить его видимым / невидимым, передав сообщения обработчику в потоке, который обновляет представление поверхности.

См. Пример кода LunarLander (хотя в нем используется текстовое представление вместо кнопки, iirc).

0 голосов
/ 26 октября 2011

Нарисуйте кнопку на холсте как растровое изображение, которое вы наложите на остальную часть игры. Это дает вам больше гибкости при разработке внешнего вида вашей кнопки, и вы можете просто использовать оператор if, чтобы проверить, когда кнопка должна быть нарисована. Затем вы используете синхронизированный блок для извлечения touchevents из потока пользовательского интерфейса и проверки, попадают ли они в область экрана, где находится ваша кнопка.

...