Я разрабатываю настольную игру для 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);
}
}
Я не хочу использовать какой-либо движок, потому что это для школьного проекта.
На самом деле вы можете немного упростить эту ситуацию. Если вы действительно ищете плоскую текстуру, которая просто искажается перспективой, класс Android Camera
может вам помочь. Не путайте это с аппаратной камерой для фотосъемки. Эта камера является вспомогательным классом, обернутым вокруг матрицы для выполнения преобразований на 2D-объектах. Вы можете узнать больше об этой очень сложной теме рендеринга с помощью googling "быстрых преобразований Фурье". В принципе, вы захотите создать холст и сделать свой рисунок полностью 2D способом. Затем прямо перед тем, как вы рисуете на экране, вы должны трансформировать этот холст с помощью класса Camera. Дайте мне знать, если вам нужно разъяснение. За кулисами идет много классной математики!
Взгляните на этот образец из демонстраций Android API
Документация для Android graphics.Camera
http://developer.android.com/reference/android/graphics/Camera.html
Camera.translate(x, y, z)
. Вам нужно будет перемещаться по осям X и Y для прокрутки и перемещаться вверх и вниз по оси Z для увеличения. Извинения за недостающую ссылку найти сложно! Документация: developer.android.com/reference/android/graphics/Camera.html