tBane Temat założony przez niniejszego użytkownika |
[Java libGDX] Skalowanie widoku i dopasowanie do ekranu » 2025-12-13 21:24:36 Witam. Mam funkcję do skalowania widoku w SFML 3.0.2. Funkcja działa w ten sposób, że rozciąga obraz w taki sposób, by zachowane zostały proporcje. (czyli są czarne pasy poza widokiem). Jak to zrobić w Javie libGDx? Obecnie tak skaluje ... czyli nie skaluje w ogóle. Pewnie, że i można skalować sprajty no ale kod będzie wtedy gorszej jakości :-/  void setScreenView( sf::View & view ) { float windowRatio = float( window->getSize().x ) / float( window->getSize().y ); float viewRatio = float( view.getSize().x ) / float( view.getSize().y ); float sizeX = 1.f; float sizeY = 1.f; float posX = 0.f; float posY = 0.f; if( windowRatio > viewRatio ) { sizeX = viewRatio / windowRatio; posX =( 1.f - sizeX ) / 2.0f; } else { sizeY = windowRatio / viewRatio; posY =( 1.f - sizeY ) / 2.0f; } view.setViewport( sf::FloatRect( posX, posY, sizeX, sizeY ) ); window->setView( view ); }
package com.tbane.mysticgems;
import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.OrthographicCamera; import com.badlogic.gdx.utils.viewport.Viewport; import com.badlogic.gdx.utils.viewport.FitViewport; import com.badlogic.gdx.graphics.g2d.Sprite; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.graphics.Texture;
public class Renderer { public static SpriteBatch batch = new SpriteBatch();
public static int VIRTUAL_WIDTH = 720; public static int VIRTUAL_HEIGHT = 1612; public static OrthographicCamera camera; public static Viewport viewport;
public void create() { camera = new OrthographicCamera(); viewport = new FitViewport(VIRTUAL_WIDTH, VIRTUAL_HEIGHT, camera);
camera.position.set(VIRTUAL_WIDTH / 2f, VIRTUAL_HEIGHT / 2f, 0); camera.update(); batch = new SpriteBatch(); }
public void resize(int width, int height) { viewport.update(width, height); camera.position.set(VIRTUAL_WIDTH / 2f, VIRTUAL_HEIGHT / 2f, 0); camera.update(); batch = new SpriteBatch(); } public static void begin() { batch.begin(); }
public static void end() { batch.end(); } }
|
|
skovv |
» 2025-12-13 23:16:10 Ale nie lepiej zrobić tak że ustalasz: albo chcesz zachować w albo h okna? Wtedy jak chcesz trzymać szerokość okna(a wysokość dopasować) to liczysz sobie że jeśli docelowo było w500h1000 a masz w750 to h powinno wynosić 1500 |
|
tBane Temat założony przez niniejszego użytkownika |
» 2025-12-13 23:19:28 No ale wtedy za każdym razem trzeba na nowo obliczać współrzędne. A z takim widokiem w sfml samo się to oblicza. |
|
skovv |
» 2025-12-13 23:25:21 I chcesz mieć czarne paski w grze? Bez sensu. A współrzędne musisz liczyć tylko dla UI, mapa jest jaka jest. Ui tak czy siak musisz liczyć np przy obrocie ekranu |
|
tBane Temat założony przez niniejszego użytkownika |
» 2025-12-13 23:28:30 Tak, chce mieć czarne pasy :-) Tak jak tu |
|
skovv |
» 2025-12-13 23:34:58 Bez sensu ale jak wolisz
package com.tbane.mysticgems;
import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.OrthographicCamera; import com.badlogic.gdx.utils.viewport.Viewport; import com.badlogic.gdx.utils.viewport.FitViewport; import com.badlogic.gdx.graphics.g2d.SpriteBatch;
public class Renderer {
public static SpriteBatch batch; public static final int VIRTUAL_WIDTH = 720; public static final int VIRTUAL_HEIGHT = 1612;
public static OrthographicCamera camera; public static Viewport viewport;
public void create() { camera = new OrthographicCamera(); viewport = new FitViewport(VIRTUAL_WIDTH, VIRTUAL_HEIGHT, camera);
// Ustawienie początkowej pozycji kamery camera.position.set(VIRTUAL_WIDTH / 2f, VIRTUAL_HEIGHT / 2f, 0); camera.update();
batch = new SpriteBatch(); }
public void resize(int width, int height) { viewport.update(width, height, true); // true -> centrowanie kamery automatyczne }
public static void begin() { batch.setProjectionMatrix(camera.combined); batch.begin(); }
public static void end() { batch.end(); } } |
|
tBane Temat założony przez niniejszego użytkownika |
» 2025-12-14 00:08:31 Nie działa :-/ |
|
skovv |
» 2025-12-14 00:14:37 Nie skaluje okna? Nie mam komputera przy sobie, będę dopiero w poniedziałek. Poczytaj kursy libgdx
Ale ogółem lepiej od razu obczaj jak zrobić fajne skalowanie bo czarne pasy po bokach to bieda |
|
| « 1 » 2 |