2013-03-14 4 views
1

Я собираю свою игру, которую я написал для android. Это было написано простым холстом, чтобы изучить основы. Чтобы получить его на более высокий уровень, я напишу его с помощью libgdx. Для этого я подумал о stage, где я добавляю свой Actors (Монстры, навыки, если они активны, характер и, возможно, частица). Я читал, что это хороший способ создать 2D-игру.threading в libgdx и общие вопросы для перемещения спрайтов

Дополнительная информация об этом. Это 2D RPG, основанный на квадратной системе. Каждый шаг - это один шаг к следующему квадрату (возможно, на основе плит, основанный на подошве).

В старой версии я использовал потоки для каждого монстра, чтобы они могли обрабатывать и реагировать так, как они хотят ». Возможно ли это в libgdx или мне нужно обрабатывать его по-другому?

Если я хочу переместить символ с одного на следующий квадрат, у меня было рассчитанное время, когда я переместил спрайт с одного квадрата на другой, изменив его пиксельную позицию. В libgdx у меня будет камера с квадратами как init. Так (40f, 30f), например. Он работает, чтобы переместить символ в пределах thread, как я это делал в старой игре? Так что я знал, что это займет 500 мс от одного квадрата к следующему, поэтому каждые 50 мс необходимо, чтобы ppuX составлял + 0.1f. В зависимости от этого я также обновил спрайт. Поэтому, если он быстрее перемещается, спрайт становится быстрее изменен.

Я также запрограммировал навыки таким образом. Например, огненный шар - это изображение, которое перемещается нитью, пока оно не ударит.

Просмотреть изображение прототипа. Picture of the prototype with canvas

ответ

3

Это, наверное, можно, но назначая поток для каждого субъекта является очень плохой идеей - так плохо, на самом деле, что он имеет соответствующую запись TheDailyWTF:

http://thedailywtf.com/Articles/Sprite_Threading.aspx

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

Как правило, libgdx поддерживает модель «основной петли», используя класс ApplicationListener (в частности, метод render()). There is a number of tutorials, чтобы начать работу, including one for Android.

Я знаю, что подход может показаться более ограниченным вначале, но он обеспечивает гораздо более надежный код.

+0

Я знаю об этом учебнике, но мне интересно, как я получаю своих монстров, чтобы рассчитать следующий шаг, если они сделали свой первый шаг. Могу ли я просто запустить исчисление в этом рендеринге, если его действие будет выполнено? Поэтому я всегда проверяю логический «moveone», который устанавливается, если hes в следующем блоке.и если moveone я рассчитать следующий шаг? Все в этом потоке в 'stage.act()'? – BennX

+1

Я не уверен, понимаю ли вы вас (если нет, пожалуйста, перефразируйте ответ), но я думаю, ваш вопрос состоял в том, как заставить ваших монстров (сущностей) «знать», что они должны двигаться. Ну, так как вы будете работать в одном потоке, вам не нужно иметь флаг 'moveDone' - монстр либо переместился, либо нет, нет промежуточного состояния. Вы можете, например, переместите все свои монстры в один блок в метод «render», а затем выполните дополнительную логику. Отвечает ли это на ваш вопрос? –

+0

Более или менее. Я получил квадратную систему и всегда хочу, чтобы они вычислили следующий ход. Поэтому, если они находятся в квадрате (переход сделан), я хочу рассчитать лучший следующий квадрат, чтобы перейти к. Это даже с хорошим алгоритмом KI позже. – BennX

1

В LibGdx, визуализации) метод (класс Game будет называться непрерывно. В этом методе вы можете сделать 4 вещи.

1) Процесс ввода
2) Обновление спрайты/актеры
3) Проверьте столкновение
4) делают мир

Вам не нужно создавать отдельный поток для перемещения игровых объектов.

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