Android масштабируемая и прокручиваемая настольная игра

1

Я разрабатываю настольную игру для Android и задаю вопрос о создании платы, масштабируемой и прокручиваемой. Плата содержит статический фон, символы (игроки) и фактический "уровень", который нарисован с использованием плиток.

Мои решения состоят в том, чтобы иметь набор элементов (плитки, фигуры, все элементы игры - все имеют координаты x, y и ширина + высота), камеру и рендерер, который рисует коллекцию в соответствии с камеройX, камеройY, cameraHeight. Поэтому, если пользователь будет прокручивать вправо, камера просто установит CameraX соответствующим образом - и поверхность прокручивается. И если пользователь будет увеличивать/уменьшать размер рендеринга, он просто масштабирует каждый элемент изображения соответствующим образом.

Пример кода для рендерера с прокручиваемой поверхностью и масштабированием в/из

    protected function draw(Canvas c){
      Collection elements = collection.getElements(cameraX,cameraY,cameraWidth,cameraHeight);
      if(elements.size() > 0) {
         for(int i = 0; i < elements.size(); i++) {
              elements.get(i).drawElement(c);
         }
      }
    }
    .
    .
    .
    // element class drawElement function
    protected drawElement function(Canvas c) {
        if(this.image != null) {            
          int w = this.width;
          int h = this.height;
          if(this.zoomFactor < 1) {
             w*=this.zoomFactor;
             h*=this.zoomFactor;
          }
          c.drawBitmap(this.image,this.x,this.y,w,h);
        }
    }
  • Это лучшие решения?
  • Может ли это быть достигнуто каким-то еще?
  • Может ли прокрутка выполняться с помощью ScrollView?

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

Теги:
zoom
scrollable

1 ответ

5
Лучший ответ

На самом деле вы можете немного упростить эту ситуацию. Если вы действительно ищете плоскую текстуру, которая просто искажается перспективой, класс Android Camera может вам помочь. Не путайте это с аппаратной камерой для фотосъемки. Эта камера является вспомогательным классом, обернутым вокруг матрицы для выполнения преобразований на 2D-объектах. Вы можете узнать больше об этой очень сложной теме рендеринга с помощью googling "быстрых преобразований Фурье". В принципе, вы захотите создать холст и сделать свой рисунок полностью 2D способом. Затем прямо перед тем, как вы рисуете на экране, вы должны трансформировать этот холст с помощью класса Camera. Дайте мне знать, если вам нужно разъяснение. За кулисами идет много классной математики!

Взгляните на этот образец из демонстраций Android API

http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/animation/Rotate3dAnimation.html

Документация для Android graphics.Camera

http://developer.android.com/reference/android/graphics/Camera.html

  • 0
    поэтому, если я правильно понимаю, вы предлагаете мне нарисовать холст, а затем с помощью Canvas.scale () и Canvas.save () реализовать функцию масштабирования? Как насчет прокрутки (я должен сделать это, как я описал выше)? Можете ли вы опубликовать ссылку относительно этого класса (все, что я получаю, это аппаратная камера). Спасибо
  • 0
    Верный! Похоже, вы поняли. Вместо прокрутки, как описано выше, используйте метод Camera.translate(x, y, z) . Вам нужно будет перемещаться по осям X и Y для прокрутки и перемещаться вверх и вниз по оси Z для увеличения. Извинения за недостающую ссылку найти сложно! Документация: developer.android.com/reference/android/graphics/Camera.html
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню