public void create () { Batch batch = new CpuSpriteBatch(); // batch = new SpriteBatch(); stage = new Stage(new ExtendViewport(500, 500), batch); Gdx.input.setInputProcessor(stage); texture = new Texture("data/bobargb8888-32x32.png"); texture.setFilter(TextureFilter.Linear, TextureFilter.Linear); TextureRegionDrawable drawable = new TextureRegionDrawable(new TextureRegion(texture)); for (int i = 0; i < NUM_GROUPS; i++) { Group group = createActorGroup(drawable); stage.addActor(group); } }
@Override public void update (int screenWidth, int screenHeight, boolean centerCamera) { // Fit min size to the screen. float worldWidth = minWorldWidth; float worldHeight = minWorldHeight; Vector2 scaled = Scaling.fit.apply(worldWidth, worldHeight, screenWidth, screenHeight); // Extend in the short direction. int viewportWidth = Math.round(scaled.x); int viewportHeight = Math.round(scaled.y); if (viewportWidth < screenWidth) { float toViewportSpace = viewportHeight / worldHeight; float toWorldSpace = worldHeight / viewportHeight; float lengthen = (screenWidth - viewportWidth) * toWorldSpace; if (maxWorldWidth > 0) lengthen = Math.min(lengthen, maxWorldWidth - minWorldWidth); worldWidth += lengthen; viewportWidth += Math.round(lengthen * toViewportSpace); } else if (viewportHeight < screenHeight) { float toViewportSpace = viewportWidth / worldWidth; float toWorldSpace = worldWidth / viewportWidth; float lengthen = (screenHeight - viewportHeight) * toWorldSpace; if (maxWorldHeight > 0) lengthen = Math.min(lengthen, maxWorldHeight - minWorldHeight); worldHeight += lengthen; viewportHeight += Math.round(lengthen * toViewportSpace); } setWorldSize(worldWidth, worldHeight); // Center. setScreenBounds((screenWidth - viewportWidth) / 2, (screenHeight - viewportHeight) / 2, viewportWidth, viewportHeight); apply(centerCamera); }
/** Creates a new viewport with a maximum world size. * @param maxWorldWidth User 0 for no maximum width. * @param maxWorldHeight User 0 for no maximum height. */ public ExtendViewport (float minWorldWidth, float minWorldHeight, float maxWorldWidth, float maxWorldHeight, Camera camera) { this.minWorldWidth = minWorldWidth; this.minWorldHeight = minWorldHeight; this.maxWorldWidth = maxWorldWidth; this.maxWorldHeight = maxWorldHeight; setCamera(camera); }
@Override public void render(float delta) { iciclesViewport.apply(true); Gdx.gl.glClearColor(Constants.BACKGROUND_COLOR.r, Constants.BACKGROUND_COLOR.g, Constants.BACKGROUND_COLOR.b, 1); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); renderer.setProjectionMatrix(iciclesViewport.getCamera().combined); renderer.begin(ShapeType.Filled); renderer.setColor(Constants.ICICLE_COLOR); icicle.render(renderer); // TODO: Call render() on the player renderer.end(); }
@Override public void render() { viewport.apply(); renderer.setProjectionMatrix(viewport.getCamera().combined); renderer.begin(ShapeType.Filled); float worldCenterX = viewport.getWorldWidth() / 2; float worldCenterY = viewport.getWorldHeight() / 2;
ExtendViewport viewport1, viewport2; Stage stage1 = new Stage(), stage2 = new Stage(); @Override public void show() { viewport1 = new ExtendViewport(Gdx.graphics.getWidth(), Gdx.graphics.getHeight()/3*2); stage1.setViewport(viewport1); viewport2 = new ExtendViewport(Gdx.graphics.getWidth(), Gdx.graphics.getHeight()/3); stage2.setViewport(viewport2); //... adding actors etc } @Override public void render(float delta) { Gdx.gl.glClearColor(0, 0, 0, 1); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); //here you are centering camera viewport2.update(Gdx.graphics.getWidth(), Gdx.graphics.getHeight()/3, true); stage2.act(delta); stage2.draw(); //here you are centering camera viewport1.update(Gdx.graphics.getWidth(), Gdx.graphics.getHeight()/3*2, true); //here you are positioning the viewport on the screen viewport1.setScreenY(Gdx.graphics.getHeight()/3); viewport1.apply(true); stage1.act(delta); stage1.draw(); }
@Override public void resize(int width, int height) { iciclesViewport.update(width, height, true); // TODO: Reset the player (using init()) }
@Override public void render() { viewport.apply(); Gdx.gl.glClearColor(UDACITY_ORANGE.r, UDACITY_ORANGE.g, UDACITY_ORANGE.b, 1); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); // TODO: Set the SpriteBatch's projection matrix // TODO: Begin the sprite batch // TODO: First just draw the udacity logo at LOGO_SIZE in the bottom left of the screen // TODO: Then try centering the logo // TODO: End the sprite batch }
@Override public void render() { updateExplosions(); viewport.apply(); Gdx.gl.glClearColor(1, 1, 1, 1); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); batch.setProjectionMatrix(viewport.getCamera().combined); batch.begin(); // TODO: Compute the elapsed time in seconds since startTime // TODO: Use getKeyFrame() to get the right frame from the walk loop TextureRegion walkLoopTexture = new TextureRegion(new Texture("walk-1-right.png")); drawRegionCentered( batch, walkLoopTexture, viewport.getWorldWidth() / 2, viewport.getWorldHeight() / 2 ); for (OneShotAnimation explosion : explosions) { drawRegionCentered(batch, explosion.getFrame(), explosion.position.x, explosion.position.y); } batch.end(); }
@Override public void resize(int width, int height) { viewport.update(width, height, true); } }
static public Array<Viewport> getViewports (Camera camera) { int minWorldWidth = 640; int minWorldHeight = 480; int maxWorldWidth = 800; int maxWorldHeight = 480; Array<Viewport> viewports = new Array(); viewports.add(new StretchViewport(minWorldWidth, minWorldHeight, camera)); viewports.add(new FillViewport(minWorldWidth, minWorldHeight, camera)); viewports.add(new FitViewport(minWorldWidth, minWorldHeight, camera)); viewports.add(new ExtendViewport(minWorldWidth, minWorldHeight, camera)); viewports.add(new ExtendViewport(minWorldWidth, minWorldHeight, maxWorldWidth, maxWorldHeight, camera)); viewports.add(new ScreenViewport(camera)); ScreenViewport screenViewport = new ScreenViewport(camera); screenViewport.setUnitsPerPixel(0.75f); viewports.add(screenViewport); viewports.add(new ScalingViewport(Scaling.none, minWorldWidth, minWorldHeight, camera)); return viewports; } }
@Override public void update (int screenWidth, int screenHeight, boolean centerCamera) { // Fit min size to the screen. float worldWidth = minWorldWidth; float worldHeight = minWorldHeight; Vector2 scaled = Scaling.fit.apply(worldWidth, worldHeight, screenWidth, screenHeight); // Extend in the short direction. int viewportWidth = Math.round(scaled.x); int viewportHeight = Math.round(scaled.y); if (viewportWidth < screenWidth) { float toViewportSpace = viewportHeight / worldHeight; float toWorldSpace = worldHeight / viewportHeight; float lengthen = (screenWidth - viewportWidth) * toWorldSpace; if (maxWorldWidth > 0) lengthen = Math.min(lengthen, maxWorldWidth - minWorldWidth); worldWidth += lengthen; viewportWidth += Math.round(lengthen * toViewportSpace); } else if (viewportHeight < screenHeight) { float toViewportSpace = viewportWidth / worldWidth; float toWorldSpace = worldWidth / viewportWidth; float lengthen = (screenHeight - viewportHeight) * toWorldSpace; if (maxWorldHeight > 0) lengthen = Math.min(lengthen, maxWorldHeight - minWorldHeight); worldHeight += lengthen; viewportHeight += Math.round(lengthen * toViewportSpace); } setWorldSize(worldWidth, worldHeight); // Center. setScreenBounds((screenWidth - viewportWidth) / 2, (screenHeight - viewportHeight) / 2, viewportWidth, viewportHeight); apply(centerCamera); }
@Override public void render(float delta) { viewport.apply(); Gdx.gl.glClearColor(0, 0, 0, 1); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); avalanche.update(delta, viewport); renderer.setProjectionMatrix(viewport.getCamera().combined); renderer.begin(ShapeType.Filled); avalanche.render(renderer); renderer.end(); } }
@Override public void resize(int width, int height) { viewport.update(width, height, true); }
/** Creates a new viewport with a maximum world size. * @param maxWorldWidth User 0 for no maximum width. * @param maxWorldHeight User 0 for no maximum height. */ public ExtendViewport (float minWorldWidth, float minWorldHeight, float maxWorldWidth, float maxWorldHeight, Camera camera) { this.minWorldWidth = minWorldWidth; this.minWorldHeight = minWorldHeight; this.maxWorldWidth = maxWorldWidth; this.maxWorldHeight = maxWorldHeight; setCamera(camera); }
private void setupUI () { ui = new Stage(new ExtendViewport(640, 480)); Skin skin = new Skin(Gdx.files.internal("data/uiskin.json")); skipCleanup = new CheckBox("Skip blend function clean-up", skin); skipCleanup.addListener(listener); logLabel = new Label("", skin.get(LabelStyle.class)); clearEmitters = new TextButton("Clear screen", skin); clearEmitters.addListener(listener); scaleEffects = new TextButton("Scale existing effects", skin); scaleEffects.addListener(listener); Table table = new Table(); table.setTransform(false); table.setFillParent(true); table.defaults().padTop(5).left(); table.top().left().padLeft(5); table.add(skipCleanup).colspan(2).row(); table.add(clearEmitters).spaceRight(10); table.add(scaleEffects).row(); table.add(logLabel).colspan(2); ui.addActor(table); }
@Override public void update (int screenWidth, int screenHeight, boolean centerCamera) { // Fit min size to the screen. float worldWidth = minWorldWidth; float worldHeight = minWorldHeight; Vector2 scaled = Scaling.fit.apply(worldWidth, worldHeight, screenWidth, screenHeight); // Extend in the short direction. int viewportWidth = Math.round(scaled.x); int viewportHeight = Math.round(scaled.y); if (viewportWidth < screenWidth) { float toViewportSpace = viewportHeight / worldHeight; float toWorldSpace = worldHeight / viewportHeight; float lengthen = (screenWidth - viewportWidth) * toWorldSpace; if (maxWorldWidth > 0) lengthen = Math.min(lengthen, maxWorldWidth - minWorldWidth); worldWidth += lengthen; viewportWidth += Math.round(lengthen * toViewportSpace); } else if (viewportHeight < screenHeight) { float toViewportSpace = viewportWidth / worldWidth; float toWorldSpace = worldWidth / viewportWidth; float lengthen = (screenHeight - viewportHeight) * toWorldSpace; if (maxWorldHeight > 0) lengthen = Math.min(lengthen, maxWorldHeight - minWorldHeight); worldHeight += lengthen; viewportHeight += Math.round(lengthen * toViewportSpace); } setWorldSize(worldWidth, worldHeight); // Center. setScreenBounds((screenWidth - viewportWidth) / 2, (screenHeight - viewportHeight) / 2, viewportWidth, viewportHeight); apply(centerCamera); }
/** * We'll often want to break up our drawing into separate functions, or different objects * entirely. This is easy to do, all we need to do is pass in our ShapeRenderer. */ @Override public void render() { Gdx.gl.glClearColor(0, 0, 0, 1); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); // TODO: Apply the viewport viewport.apply(); // TODO: Set the ShapeRender's projection matrix renderer.setProjectionMatrix(viewport.getCamera().combined); // TODO: Start a Filled batch renderer.begin(ShapeType.Filled); // TODO: Call drawSmileyFace() drawSmileyFace(renderer); // TODO: End the batch renderer.end(); }