2D увеличение, мащаб и превод

Опитвам се да създам метод за преоразмеряване на мащаб на растерни изображения (чрез мащабиране с щипка) и след това да го центрирам на екрана. Но винаги, когато намаля, той става по-малък от горния ляв ъгъл, а когато го увелича, расте в долния десен ъгъл:

 public void ZoomIn() {
        TileMap.TileSize += 2;

        Position.x += 1;
        Position.y += 1;
    }

Опитах се да го компенсирам чрез изместване на позицията на спрайта, но не работи. Не знам съотношението.

Как мащабирате спрайт (Bitmap) и той остава на същата позиция на екрана (растат от центъра, предполагам)?


person GideonKain    schedule 29.11.2011    source източник


Отговори (1)


Помислете вертикално, а след това хоризонтално.

Ако ширината на растерното изображение се промени с +10 пиксела, тогава за да центрирате хоризонтално на същото място, трябва да изместите позицията му с -5 пиксела.

Същото и за височината. Съхранявайте предишна и текуща стойност, изчислявайте разликата, измествайте надясно с floor(widthDiff / 2) и измествайте нагоре с floor(heightDiff / 2).

person Martin Foot    schedule 29.11.2011