2013-08-01 2 views
0

Я делаю простую платформу в Java Swing. Естественно, я хочу, чтобы некоторые платформы были слишком большими для одного экрана, и у меня есть следующий вопрос: какой лучший способ сделать фоном перемещение, когда персонаж, управляемый игроком, приближается к краю экрана? На самом деле не только фон, но и весь игровой контент (противники, кирпичи и т. Д.)? Разумеется, должен быть лучший способ, чем просто загрузить новое изображение и перекрасить все, когда персонаж перемещается на 1 пиксель. Надеюсь, я сформулировал это понятным образом, я попытался найти его на этом сайте и других, но пока не повезло. Thx заранее.Как сделать фоновое перемещение в платформенной игре?

+0

Вы используете изображение для фона? Вы должны переопределить метод paintComponent в «JPanel» и рисовать пиксели напрямую, используя класс «Graphics». Однако общее правило не оптимизируется, если вам не нужно - старайтесь, как вы думаете, лучше, и если это не сработает, мы можем помочь вам с меньшим примером того, что вы пробовали. – sdasdadas

ответ

1

Этот тип игровой платформы называется side scroller.

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

Через некоторое время вы обрезаете другую часть изображения и отобразите его в JPanel. Это происходит так быстро, что кажется, что изображение прокручивается.

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

См. Главу 12 из Killer Game Programming in Java. Вероятно, вам сначала понадобится прочитать предыдущие главы, поэтому глава 12 имеет смысл. Если вы хотите сделать много разработки Java-игр, купите книгу.

+0

Хорошо, поэтому я загружаю всю карту в начале, а затем правильно рисую только текущие фрагменты? Только вопрос, что именно вы подразумеваете под словом «После единицы времени вы обрезаете другую часть изображения и показываете его в JPanel».? В частности, какой период времени, или вы просто означает, что я делаю это, когда персонаж приближается к краю экрана? – MountainThatCodes

+0

@MountainThatCodes: Предположим, вы хотите, чтобы ваша игра работала со скоростью 20 кадров в секунду. Это означает, что для генерации кадра требуется 50 миллисекунд. Единица времени составляет 50 миллисекунд. Вы должны определить, сколько вашего фона вы хотите прокрутить, как далеко ваш игровой игрок может двигаться за 50 миллисекунд. –

+0

@MountainThatCodes: Это зависит от того, насколько велика ваша карта. Если это истинный боковой скроллер, где ваш фон повторяется каждые 2000 пикселей, вы можете загрузить все изображение в начале. Если ваш игровой мир огромен, вам придется использовать плитку и создать изображение, немного большее, чем ваш JPanel. –

1

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

@Override 
public void paint(Graphics g){ 
    super.paint(g); 

    Graphics2D g2d = (Graphics2D)g; 
    g2d.translate(character.x,character.y); 

    background.render(g); 
    character.render(g); 
} 

Хотя это требует перекрашивать объекты, которые, возможно, не обязательно переместились. И при работе с большими картами это может стать проблемой. Но я всегда стараюсь отображать только объекты, которые находятся на экране, и некоторые, которые могут частично отображаться на экране. Учебник, который показывает способ сделать это на YouTube

Tutorial