编程语言
首页 > 编程语言> > java-如何在LibGDX项目中显示插页广告?

java-如何在LibGDX项目中显示插页广告?

作者:互联网

我找到了Flappy Bird GitHub项目,并对其进行了一些更改.
我成功实施了AdMob标语.

但是现在我还想要一个插页式广告,当游戏结束时弹出(当然不是每次都这样),所以这是我的GitHub项目:https://github.com/DaFaack/FlappyBibi

请解释一下该怎么做,因为我在互联网上找不到很好的解释.

我想在run()方法中显示广告.您可以在核心程序包中找到它-> GameplayScreen.java文件-> renderPlaying()方法,然后是run()方法.

这是我正在谈论的方法:

    private void renderPlaying() {
        if (justTouched) {
            bird.jump();
            justTouched = false;

        }
        updatePipePairs();
        gameplayStage.act();
        uiStage.act();
        checkCollisions();
        if (bird.getState() == Bird.State.DYING) {
            stopTheWorld();


            RunnableAction playWooshAction = Actions.run(new Runnable() {
                @Override
                public void run() {
                    com.pentagames.flappybibi.Assets.playWooshSound();

//Here I want to display the Interstitial Ad!

                }
            });

游戏结束后,我该怎么做才能显示插页广告?

这是我的AndroidLauncher.java文件:

package com.pentagames.flappybibi.android;

import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.RelativeLayout;

import com.badlogic.gdx.backends.android.AndroidApplication;
import com.badlogic.gdx.backends.android.AndroidApplicationConfiguration;
import com.google.android.gms.ads.AdListener;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdSize;
import com.google.android.gms.ads.AdView;
import com.pentagames.flappybibi.FlappyGame;

public class AndroidLauncher extends AndroidApplication{

    private static final String TAG = "AndroidLauncher";
    protected AdView adView;

    @Override
    protected void onCreate (Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        RelativeLayout layout = new RelativeLayout(this);

        AndroidApplicationConfiguration config = new AndroidApplicationConfiguration();
        View gameView=initializeForView(new FlappyGame(), config);
        layout.addView(gameView);

        adView = new AdView(this);
        adView.setAdListener(new AdListener(){
            @Override
            public void onAdLoaded(){
                int visibility = adView.getVisibility();
                adView.setVisibility(AdView.GONE);
                adView.setVisibility(AdView.VISIBLE);
                Log.i(TAG, "Ad Loaded...");
            }
        });
        adView.setAdSize(AdSize.SMART_BANNER);
        adView.setAdUnitId("ca-app-pub-XXXXXXXXXXXXXX/XXXXXXXXX");

        AdRequest.Builder builder = new AdRequest.Builder();
        RelativeLayout.LayoutParams adParams = new RelativeLayout.LayoutParams(
                RelativeLayout.LayoutParams.MATCH_PARENT,
                RelativeLayout.LayoutParams.WRAP_CONTENT
        );
        adParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, RelativeLayout.TRUE);
        adParams.addRule(RelativeLayout.CENTER_HORIZONTAL, RelativeLayout.TRUE);

        layout.addView(adView, adParams);
        adView.loadAd(builder.build());

        setContentView(layout);
    }

    @Override
    protected void onResume() {
        super.onResume();
        adView.resume();
    }

    @Override
    protected void onPause() {
        super.onPause();
        adView.pause();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        adView.destroy();
    }
    }

这是GameplayScreen文件:

package com.pentagames.flappybibi;

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.InputAdapter;
import com.badlogic.gdx.ScreenAdapter;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.math.Interpolation;
import com.badlogic.gdx.scenes.scene2d.Stage;
import com.badlogic.gdx.scenes.scene2d.actions.Actions;
import com.badlogic.gdx.scenes.scene2d.actions.RunnableAction;
import com.badlogic.gdx.scenes.scene2d.actions.SequenceAction;
import com.badlogic.gdx.scenes.scene2d.ui.Image;
import com.badlogic.gdx.scenes.scene2d.ui.Label;
import com.badlogic.gdx.scenes.scene2d.utils.Align;
import com.badlogic.gdx.utils.Array;
import com.badlogic.gdx.utils.viewport.StretchViewport;

public class GameplayScreen extends ScreenAdapter{

    public static final float PIPE_SPACING = 200f;
    public static final int PIPE_SETS = 3;

    protected OrthographicCamera camera;
    protected com.pentagames.flappybibi.FlappyGame game;

    private Stage gameplayStage;
    private Stage uiStage;
    private Label scoreLabel;
    private Label tapToRetry;
    private Label best;
    private Label tapToFlap;
    private Image whitePixel;
    private Image backgroundBuildings;

    private int score;

    private Bird bird;
    private Array<PipePair> pipePairs;

    private com.pentagames.flappybibi.Ground ground;

    private boolean justTouched;

    private Color backgroundColor;

    private State screenState = State.PREGAME;
    private boolean allowRestart = false;

    private enum State {PREGAME, PLAYING, DYING, DEAD}

    public GameplayScreen(com.pentagames.flappybibi.FlappyGame game) {
        this.game = game;

        camera = new OrthographicCamera(com.pentagames.flappybibi.FlappyGame.WIDTH, com.pentagames.flappybibi.FlappyGame.HEIGHT);
        gameplayStage = new Stage(new StretchViewport(com.pentagames.flappybibi.FlappyGame.WIDTH, com.pentagames.flappybibi.FlappyGame.HEIGHT, camera));
        uiStage = new Stage(new StretchViewport(com.pentagames.flappybibi.FlappyGame.WIDTH, com.pentagames.flappybibi.FlappyGame.HEIGHT));
        bird = new Bird();
        bird.setPosition(com.pentagames.flappybibi.FlappyGame.WIDTH * .25f, com.pentagames.flappybibi.FlappyGame.HEIGHT / 2, Align.center);
        bird.addAction(Utils.getFloatyAction());
        bird.setState(Bird.State.PREGAME);

        whitePixel = new Image(com.pentagames.flappybibi.Assets.whitePixel);

        scoreLabel = new Label("0", new Label.LabelStyle(com.pentagames.flappybibi.Assets.fontMedium, Color.WHITE));
        scoreLabel.setPosition(com.pentagames.flappybibi.FlappyGame.WIDTH / 2, com.pentagames.flappybibi.FlappyGame.HEIGHT * .9f, Align.center);
        uiStage.addActor(scoreLabel);

        tapToRetry = new Label("Nochmal?", new Label.LabelStyle(com.pentagames.flappybibi.Assets.fontMedium, Color.WHITE));
        tapToRetry.setPosition(com.pentagames.flappybibi.FlappyGame.WIDTH / 2, 0, Align.top);
        uiStage.addActor(tapToRetry);

        best = new Label("Highscore: ", new Label.LabelStyle(com.pentagames.flappybibi.Assets.fontMedium, Color.WHITE));
        best.setPosition(com.pentagames.flappybibi.FlappyGame.WIDTH / 2, 0, Align.top);
        uiStage.addActor(best);

        tapToFlap = new Label("Fass mich an!", new Label.LabelStyle(com.pentagames.flappybibi.Assets.fontMedium, Color.WHITE));
        tapToFlap.setPosition(com.pentagames.flappybibi.FlappyGame.WIDTH / 2, com.pentagames.flappybibi.FlappyGame.HEIGHT, Align.bottom);
        uiStage.addActor(tapToFlap);

        initBackgroundBuildings();

        pipePairs = new Array<PipePair>();

        ground = new com.pentagames.flappybibi.Ground();
        ground.setPosition(0, 0);

        backgroundColor = Utils.getRandomBackgroundColor();

        // The order actors are added determines the order they are drawn so make sure the background is first
        gameplayStage.addActor(ground);
        gameplayStage.addActor(backgroundBuildings);
        gameplayStage.addActor(bird);

        // Setup the input processor
        initInputProcessor();
    }

    private void initBackgroundBuildings() {
        backgroundBuildings = new Image(com.pentagames.flappybibi.Assets.backgroundBuildings);
        backgroundBuildings.setWidth(com.pentagames.flappybibi.FlappyGame.WIDTH);
        backgroundBuildings.setHeight(backgroundBuildings.getHeight()*2f);
        backgroundBuildings.setY(com.pentagames.flappybibi.Ground.HEIGHT);
    }

    @Override
    public void show() {
        tapToFlap.addAction(Actions.moveToAligned(com.pentagames.flappybibi.FlappyGame.CENTER_X, com.pentagames.flappybibi.FlappyGame.CENTER_Y + 100f, Align.center, .75f, Interpolation.sine));
        com.pentagames.flappybibi.Assets.playWooshSound();
    }

    @Override
    public void render(float delta) {

        Gdx.graphics.getGL20().glClearColor(backgroundColor.r, backgroundColor.g, backgroundColor.b, 1f);
        Gdx.graphics.getGL20().glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT);

        switch (screenState) {
            case PREGAME:
                updateAndDrawStages();
                break;
            case PLAYING:
                renderPlaying();
                break;
            case DYING:
            case DEAD:
                renderDeadOrDying();
                break;
        }
    }

    private void renderDeadOrDying() {
        if (bird.getState() == Bird.State.DEAD) {
            screenState = State.DEAD;
        }
        updateAndDrawStages();
    }

    private void renderPlaying() {
        if (justTouched) {
            bird.jump();
            justTouched = false;

        }
        updatePipePairs();
        gameplayStage.act();
        uiStage.act();
        checkCollisions();
        if (bird.getState() == Bird.State.DYING) {
            stopTheWorld();

            RunnableAction playWooshAction = Actions.run(new Runnable() {
                @Override
                public void run() {
                    com.pentagames.flappybibi.Assets.playWooshSound();

//Here I want to display the Interstitial Ad!

                }
            });

            SequenceAction actions = Actions.sequence(Actions.delay(1f), playWooshAction, Actions.moveToAligned(com.pentagames.flappybibi.FlappyGame.CENTER_X, com.pentagames.flappybibi.FlappyGame.CENTER_Y, Align.bottom,
                    .75f, Interpolation.sine), Actions.run(new Runnable() {
                @Override
                public void run() {
                    // Allow the player to restart the game once the tap to retry finishes coming up
                    allowRestart = true;
                }
            }));
            tapToRetry.addAction(actions);

            best.setText("Highscore: " + com.pentagames.flappybibi.SavedDataManager.getInstance().getHighScore());
            best.setWidth(best.getTextBounds().width);
            best.setPosition(com.pentagames.flappybibi.FlappyGame.CENTER_X, 0, Align.top);
            best.addAction(Actions.delay(1f, Actions.moveToAligned(com.pentagames.flappybibi.FlappyGame.CENTER_X, com.pentagames.flappybibi.FlappyGame.CENTER_Y, Align.top,
                    .75f, Interpolation.sine)));

            screenState = State.DYING;
        }
        gameplayStage.draw();
        uiStage.draw();
    }

    private void updateAndDrawStages() {
        gameplayStage.act();
        gameplayStage.draw();
        uiStage.act();
        uiStage.draw();
    }

    @Override
    public void resize(int width, int height) {

        camera.setToOrtho(false, width, height);
        com.pentagames.flappybibi.Assets.batch.setProjectionMatrix(camera.combined);
        gameplayStage.getViewport().update(width, height, true);
        uiStage.getViewport().update(width, height, true);

    }

    @Override
    public void dispose() {
        gameplayStage.dispose();
        uiStage.dispose();
    }

    private void checkCollisions() {

        for (int i = 0; i < pipePairs.size; i++) {
            PipePair pair = pipePairs.get(i);
            if (pair.getBottomPipe().getBounds().overlaps(bird.getBounds()) || pair.getTopPipe().getBounds().overlaps(bird.getBounds())) {
                stopTheWorld();
                com.pentagames.flappybibi.SavedDataManager.getInstance().setHighScore(score);
                showWhiteScreen();
            } else if (bird.isBelowGround()) {
                bird.setY(com.pentagames.flappybibi.FlappyGame.GROUND_LEVEL);
                bird.clearActions();
                bird.setToDying();
                showWhiteScreen();
            } else if (bird.isAboveCeiling()) {
                bird.setY(com.pentagames.flappybibi.FlappyGame.HEIGHT - bird.getHeight());
                bird.setToDying();
                showWhiteScreen();
            } else if (pair.getRuby().getBounds().overlaps(bird.getBounds())) {
                score++;
                updateScoreLabel();
                pair.moveCoinOffscreen();
                com.pentagames.flappybibi.Assets.playBingSound();
            }
        }
    }

    private void showWhiteScreen() {
        whitePixel.setWidth(com.pentagames.flappybibi.FlappyGame.WIDTH);
        whitePixel.setHeight(com.pentagames.flappybibi.FlappyGame.HEIGHT);

        gameplayStage.addActor(whitePixel);

        whitePixel.addAction(Actions.fadeOut(.5f));
    }

    private void updateScoreLabel() {
        scoreLabel.setText(String.valueOf(score));
        scoreLabel.setWidth(scoreLabel.getTextBounds().width);
        scoreLabel.setPosition(com.pentagames.flappybibi.FlappyGame.WIDTH / 2, com.pentagames.flappybibi.FlappyGame.HEIGHT * .9f, Align.center);
    }

    private void stopTheWorld() {
        bird.setToDying();
        killPipePairs();
        stopTheGround();
        screenState = State.DYING;

    }

    private void stopTheGround() {
        ground.vel.x = 0;
    }

    private void killPipePairs() {
        for (PipePair pair : pipePairs) {
            pair.getBottomPipe().setState(Pipe.State.dead);
            pair.getTopPipe().setState(Pipe.State.dead);
            pair.getRuby().setVel(0, 0);
        }
    }

    private void updatePipePairs() {
        for (int i = 0; i < pipePairs.size; i++) {
            pipePairs.get(i).update();
        }
    }

    private void addPipes(Stage gameplayStage) {
        for (int i = 0; i < pipePairs.size; i++) {
            gameplayStage.addActor(pipePairs.get(i).getBottomPipe());
            gameplayStage.addActor(pipePairs.get(i).getTopPipe());
            gameplayStage.addActor(pipePairs.get(i).getRuby());
        }
    }

    private void initThirdSetOfPipes() {
        Pipe topPipe = new Pipe();
        Pipe bottomPipe = new Pipe();
        topPipe.getRegion().flip(false, true);
        PipePair pair = new PipePair(topPipe, bottomPipe);
        pair.initThird();

        // add the pair to the list
        pipePairs.add(pair);
    }

    private void initSecondSetOfPipes() {
        Pipe topPipe = new Pipe();
        Pipe bottomPipe = new Pipe();
        topPipe.getRegion().flip(false, true);
        PipePair pair = new PipePair(topPipe, bottomPipe);
        pair.initSecond();

        // add the pair to the list
        pipePairs.add(pair);
    }

    private void initFirstSetOfPipes() {
        Pipe topPipe = new Pipe();
        Pipe bottomPipe = new Pipe();
        topPipe.getRegion().flip(false, true);
        PipePair pair = new PipePair(topPipe, bottomPipe);
        pair.initFirst();

        // add the pair to the list
        pipePairs.add(pair);
    }

    /**
     * Tells libgdx to listen for inputs coming from the InputAdapter we give it
     */
    private void initInputProcessor() {
        Gdx.input.setInputProcessor(new InputAdapter() {
            // We only care about the touch down event
            @Override
            public boolean touchDown(int screenX, int screenY, int pointer, int button) {

                switch (screenState) {

                    case DYING:
                        justTouched = true;
                        break;

                    case DEAD:
                        if (allowRestart) {
                            game.setScreen(new GameplayScreen(game));
                        }
                        justTouched = true;
                        break;

                    case PLAYING:
                        justTouched = true;
                        break;


                    case PREGAME:
                        justTouched = true;
                        screenState = State.PLAYING;
                        bird.setState(Bird.State.ALIVE);
                        bird.clearActions();
                        tapToFlap.addAction(Actions.moveToAligned(com.pentagames.flappybibi.FlappyGame.CENTER_X, com.pentagames.flappybibi.FlappyGame.HEIGHT, Align.bottom, .75f, Interpolation.sine));
                        initFirstSetOfPipes();
                        initSecondSetOfPipes();
                        initThirdSetOfPipes();
                        addPipes(gameplayStage);
                        gameplayStage.addActor(ground);
                        gameplayStage.addActor(bird);
                        break;

                }
                return true;
            }
        });
    }


}

这是我第一次使用LibGDX,如果您能解释一下如何在此项目中实施插页式广告,那将是非常不错的.

对不起,我的英语不好.

解决方法:

您已经集成了横幅广告,因此无需在项目中注入依赖的工件.

请按照以下步骤进行插页式广告集成.

> AndroidManifest.xml

输入用于插页式广告的AdActivity

<activity android:name="com.google.android.gms.ads.AdActivity"
          android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
          android:theme="@android:style/Theme.Translucent" />

>在核心模块中创建接口

public interface AdService {

   boolean isInterstitialLoaded();
   void showInterstitial();
}

>创建FlappyGame类的参数化构造函数

public AdService adService;

public FlappyGame(AdService ads){
     adService=ads;
}

>为您的AndroidLauncher类实现AdService接口

public class AndroidLauncher extends AndroidApplication implements AdService {

    private static final String AD_UNIT_ID_INTERSTITIAL = "ca-app-pub-XXXXX/XXXXX";
    private InterstitialAd interstitialAd;

    @Override
    protected void onCreate (Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);

         ...
         View gameView=initializeForView(new FlappyGame(this), config);
         ...

         interstitialAd = new InterstitialAd(this);
         interstitialAd.setAdUnitId(AD_UNIT_ID_INTERSTITIAL);
         interstitialAd.setAdListener(new AdListener() {
              @Override
              public void onAdLoaded() {}

              @Override
              public void onAdClosed() {
                   loadIntersitialAd();
              }
         });

         loadIntersitialAd();
    }

    private void loadIntersitialAd(){

       AdRequest interstitialRequest = new AdRequest.Builder().build();
       interstitialAd.loadAd(interstitialRequest);
    }

  @Override
  public void showInterstitial() {
         runOnUiThread(new Runnable() {
             public void run() {
               if (interstitialAd.isLoaded())
                  interstitialAd.show();
               else
                  loadIntersitialAd();
             }
         });
   }

   @Override
   public boolean isInterstitialLoaded() {
        return interstitialAd.isLoaded();
   }
}

> GameScreen类

RunnableAction playWooshAction = Actions.run(new Runnable() {
        @Override
        public void run() {
            com.pentagames.flappybibi.Assets.playWooshSound();
             game.adService.showInterstitial();
        }
});

我在您的项目中集成了非页内广告,并为它创建了pull request.您可以合并我的请求请求.

标签:interstitial,android,java,admob,libgdx
来源: https://codeday.me/bug/20191009/1881549.html