2016-01-15 6 views
1

Я искал учебники и материал за последние пару дней. Я много лет программировал, но до сих пор я никогда не сталкивался с созданием игры.JavaFX-холст 2D-игра: Shift background vs. painting

Я в процессе создания только небольшой 2D-игры с использованием Java-холста, но я пытаюсь выбрать правильный метод при рисовании карт плитки.

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

Мне было просто любопытно, если есть способ нарисовать всю карту за видовым окном и сдвинуть так, чтобы ее нужно было нарисовать один раз, а затем отобразить объекты над картой на каждую частоту кадров.

Любые мнения были бы высоко оценены. Всем спасибо!

+0

Я не уверен, что я понимаю ваш вопрос. Разве что вид игры меньше, чем в игровом мире, и вы хотите только нарисовать то, что видно по соображениям производительности? – Cypher

+0

Простите, что это немного запутанно, но да, взгляд на игру меньше, чем в игровом мире, и поэтому я в настоящее время рисую только то, что видно по соображениям производительности. Да, , но мне было любопытно, можно ли рисовать всю область один раз, а затем сдвинуть ее по холсту. Таким образом, единственная вещь, которую визуализирует каждая частота кадров, - это сущности, а не каждая плитка. Это может быть невозможно ... но я не знаю, и я не могу найти ответ. –

+0

Я просто замечаю, как в играх с масштабированием вы можете видеть всю область карты по мере увеличения и уменьшения масштаба, но не всех объектов. Как только вы приближаетесь к сущности, они оказываются на расстоянии и становятся видимыми. Поэтому я пытаюсь понять, как это делается. Может быть, по мере того, как вы уменьшаете масштаб изображения, это увеличивает расстояние отображения карты, а расстояние рендеринга объектов полностью отличается? я могу попытаться изучить это. –

ответ

3

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

Существует по существу два способа рендеринга JavaFX: граф сцены (несколько узлов, автоматический рендер) или холст (одиночный узел, ручная визуализация). Если у вас много объектов на экране, последнее предпочтительнее по соображениям производительности. В противном случае первый, который обеспечивает более высокий уровень подхода к рисованию.

Как стоит мой холст 640x512 и он в настоящее время расписывать все видимые плитки за частоту кадров на видовом экране.

Это прекрасно подходит для использования с холстом JavaFX. JavaFX имеет мощный конвейер рендеринга, который определяет лучший и эффективный способ рендеринга вашего графика сцены. Если пиксель не находится в активном видовом экране (часть фактически отображается), это не будет отображаться. Вы можете прочитать о архитектуре JavaFX here.

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

На нижних уровнях JavaFX или даже ниже Direct3D (Windows), OpenGL (Mac/Linux) справится с этим для вас. Возможно, не совсем так, но они, как правило, используют текстуры кэша для выгрузки шины памяти. В большинстве случаев при попытке оптимизировать рендеринг предпринимаемые шаги фактически замедляют процесс, поэтому в определенном смысле эти шаги просто мешают правильной оптимизации низкого уровня. Таким образом, снижение общей производительности.

Подводя итог, прежде всего, сосредоточимся на завершении логики приложения и только потом беспокоиться об оптимизации. Даже тогда это очень важная проблема, и ее необходимо делать с помощью надлежащих инструментов, которые позволят вам профилировать и точно определить узкое место в вашем приложении.

+0

Спасибо Алмас. Ваш ответ был очень подробным, и я точно пытался это сделать. :) –