Как запрограммировать игровую камеру с прокруткой в ​​Android? - PullRequest
1 голос
/ 25 сентября 2010

В настоящее время я пытаюсь написать простую игру «стреляй в них» с перспективой сверху вниз. Я использую SurfaceView и Canvas для рисования графики на экране, но не могу понять, как сделать «камеру» прокручиваемой. Персонаж игрока всегда находится в центре экрана, а камера (по сути, холст SurfaceView) должна следовать за ним все время (например, как в Alien Swarm). Однако я не могу понять, как это сделать регулярно. Я делаю это прямо сейчас, перемещая каждый другой объект в игровом мире в соответствии с вводом игрока - и рисуя их, если их координаты оказываются на экране. Игрок все время остается с одинаковыми координатами. Есть ли способ фактически переместить (прокрутить) сам SurfaceView? Я видел виджет Scroll и метод SurfaceView.scrollBy (int x, int y), но мои попытки реализовать любой из этих результатов приводят к принудительному закрытию. Любая помощь приветствуется, спасибо заранее!

P.S. Просто примечание - я не заинтересован в использовании open GL для этого проекта.

Ответы [ 2 ]

2 голосов
/ 02 ноября 2012

Как Кирилл указал в своем комментарии, ответ выше не является правильным. Чтобы добиться простой прокрутки камеры, вам нужно

  1. Переведите свой холст в обратные координаты положения игрока
  2. Нарисуйте фон
  3. Перевести обратно на (0,0)
  4. Нарисуй игрока

Итак, чтобы поместить это в код

//Translate to -playerX, -playerY and draw the background
canvas.translate(-playerX, -playerY);
background.draw();

//Translate back to 0,0 and draw the player
canvas.translate(playerX, playerY);
player.draw();

Таким образом, игрок всегда остается на одной и той же позиции на экране, и вы увидите, что фон движется за ним.

Следует отметить, что canvas.translate (x, y) не переводит холст в координаты (x, y). Он переводится на указанное расстояние. Поначалу это может сбить с толку.

Пример:

  1. Вы на (0,0)
  2. Вы называете canvas.translate (2,3)
  3. Вы вызываете canvas.translate (-1, -1)
  4. Вы сейчас на (1, 2)
1 голос
/ 25 сентября 2010

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

draw_the_screen();
canvas.translate(x,y);
draw_the_avatar();

Когда вы переводите, все до этого момента будет переведено. Когда вы рисуете аватар, перевод (скольжение) уже будет иметь место, и он будет заканчиваться там, где вы его рисуете (то есть в центре экрана).

Надеюсь, это поможет.

...