簡體   English   中英

正確縮放或調整圖像或精靈的大小,保持其原始寬高比

[英]Properly scaling or resizing an image or sprite maintaining its original aspect ratio

我在這個網站上經歷了很多答案,但遺憾的是沒有解決我將要描述的問題。

我在橫向模式下設計了一個800x520的應用程序。 所有資產均使用預定義的窗口大小設計。 我使用了單位系統,但我認為這與此無關。

現在,我有一個85x70大小的精靈/圖像。 我希望它能夠擴展,但無論實際設備的窗口/屏幕尺寸如何,都要保持其原始寬高比。 到目前為止,我有以下內容,它保持比例,但沒有正確調整大小意味着如果設備屏幕寬度和高度都大於我預定義的窗口大小,它顯示精靈仍然很小。 如果高度沒有變化,但只有寬度或寬度沒有變化,只有高度變化,那就沒問題了。 圖像不應在x或y上縮放。 但是下面的這個片段不起作用。

float screenW = Screen.SCREEN_WIDTH; // Predefined width 800
float screenH = Screen.SCREEN_HEIGHT; // Predefined height 520

float deviceW = Gdx.graphics.getWidth(); // Actual device width that can vary
float deviceH = Gdx.graphics.getHeight(); // Actual device height that can vary

float changeX = screenW / deviceW; // Also tried deviceW / screenW 
float changeY = screenH / deviceH; // Also tried deviceH / screenH

// I tried applying the changeX and changeY  above
// in sprite's scale.x and scale.y respectively but no luck
// So I tried the below to get the new size of the sprite 
// with and without applying scale above..
// Tried a lot of ways but no luck

float newWidth = (Sprite.WIDTH * changeX);
float newHeight = (Sprite.HEIGHT * changeY);

只要我有正確的算法,我就不需要任何實際的代碼,我會很感激。

您的changeXchangeY的計算似乎是倒退。 例如,如果新設備的寬度為1600,則您希望按比例縮放2.您的changeX將為1/2。

嘗試類似的東西:

float changeX = deviceW / screenW;
float changeY = deviceH / screenH;

計算完這些后,您將需要按2中的較小者進行縮放以保持縱橫比。

float scale = Math.min(changeX, changeY);

然后,您可以通過將原始精靈值乘以scale來計算新值

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM