Хорошо, это то, что я создал для одного из моих проектов, которые будут работать именно так, как вам нужно ...
Вам нужно создать 4 основных аспекта:
- активность (продлить активность)
- A SurfaceView (расширить SurfaceView реализации SurfaceHolder.Callback)
- Нить (Продлить тему)
- Объекты, которые взаимодействуют между собой (расширяющими вытяжкой)
начнется активность и генерирует SurfaceView, который создает тему. В представлении или в потоке могут содержаться объекты, с которыми вы рисуете/взаимодействуете, а именно с тем, как вы хотите хранить данные на этом этапе, но это проще всего, если вы придумали конструкцию, которая имеет наименьшую связь между классами.
После запуска нитка постоянно до остановки (установка isRunning
ложь):
/**
* Processing loop
*/
public void run() {
while (isRunning) {
try {
sleep(25);
} catch (InterruptedException e) {
Log.e("Thread","Thread Interruption");
e.printStackTrace();
}
update();
}
Log.d("Thread", "Game Loop Stopped");
}
/**
* Main processing of the game loop.
*/
private void update() {
handleInput();
updatePhysics();
updateUI();
updateState();
updateAI();
updateAnimations();
updateSound();
updateVideo();
}
В этом классе вы видите update()
метод, который делает кучу действий каждой итерации нити.
Методы, которые вас будут интересовать, это методы handleInput
, updateUI
и updatePhysics
.
В handleInput
вы выполните обратный вызов SurfaceView, чтобы получить данные, необходимые для обработки информации. Мой handleInput
довольно прост в том, что он просто захватывает MotionEvent
из класса SurfaceView onTouchEvent
(это реализуется при использовании интерфейса SurfaceHolder.OnCallBack).
Метод updateUI
называет SurfaceView-х update
, где она вновь рисует Canvas
с каждым объектом, или воздушный шар
public void update(List<Actor> actors) {
Canvas canvas = null;
try {
canvas = surface.lockCanvas();
synchronized (surface) {
//Blank the Canvas
for (int i = 0; i < actors.size(); i++) {
actors.get(i).draw(canvas);
}
}
} catch (NullPointerException e) {
e.printStackTrace();
} finally {
if (canvas != null) {
surface.unlockCanvasAndPost(canvas);
}
}
}
Здесь мы видим, что он вызывает draw
метод передачи объекта холст для каждого из ваших взаимодействующих объектов. Я назвал свои «Актеры» в коде выше. Как вы решите реализовать draw
зависит от вас, но похоже, что вы будете использовать множество функций canvas.drawBitmap()
.
Возвращаясь к методу Thread's updatePhysics
, вы захотите использовать его для обновления объектов до или после их рисования на экране.Для вас вы захотите, чтобы они изменили свои X и/или Y положения на экране или изменили направление движения после того, как handleInput
решит, что вы попали в воздушный шар.
Его очень сложно объяснить это в ответе StackOverflow. Если вы действительно хотите, я могу попытаться добавить что-то более информативное вместе в этот уик-энд и опубликовать его извне для вас (я могу предоставить диаграммы классов UML среди других данных, таких как примеры изображений, структуры и потоки данных.
Сообщите мне если я могу помочь вам в дальнейшем! Обратите внимание, что это еще не все мои работы. Я использовал много учебников онлайн для базовой структуры Android-игр, но у меня нет доступных ссылок прямо сейчас, чтобы предоставить ссылки.
Я не знаю, у вас есть время прямо сейчас, чтобы написать полное объяснение, но google для учебных пособий для Android. Вам нужно создать поток, который выполняет команды обновления на ваших объектах баллона, а затем попросит их вызвать команду рисования на холст. доступны, и они должны помочь вам. Я могу отправить код позже из моего проекта, который использует большую часть работы, которая вам понадобится позже. – Grambot
Хорошо. Я был бы признателен за некоторый код – jumper0k