【发布时间】:2017-09-25 01:27:43
【问题描述】:
第一次在这个网站上发帖。我是 libGDX 和 java 的新手。我有 c++ 的中级知识。我的问题是我的 AdMob 代码仅适用于我的 Android Launcher 类(不确定这是有意的还是我遗漏了什么。我似乎无法将库导入其他类)然后我在使用我想要的 AndroidLauncher 代码。
游戏当前在游戏启动时以正确的尺寸显示广告。当我的 else if isGameOver() 被使用(GameRenderer 类)时,我想调用该广告(它目前是一个横幅广告。我最终想将其更改为插页式广告。我理解这些概念有些不同。)。这样当英雄死亡时,它就会显示广告。当游戏重新启动时,我不会担心隐藏它,因为用户可以自己关闭最终的插页式广告。我知道这可能更多是一个逻辑和缺乏知识的问题,而不是 AdMob 和 libGDX 的问题。但是我已经研究了很多,似乎找不到任何对我来说足够有意义的资源来执行。如果您有任何资源,或者您可以帮助我理解我的问题,我将不胜感激。如果我忘记提供您需要的任何信息,请随时索取。我会定期检查这篇文章。
Android 启动器:
package com.wearnoble.game;
import android.os.Bundle;
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.AdRequest;
import com.google.android.gms.ads.AdSize;
import com.google.android.gms.ads.AdView;
import com.google.android.gms.ads.InterstitialAd;
public class AndroidLauncher extends AndroidApplication {
private InterstitialAd mInterstitialAd;
private static final String adUnitId="ca-app-pub-
XXXXXXXXXXXXXXXXXXXX";
private AdView adView;
InterstitialAd interstitialAd;
@Override
protected void onCreate (Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AndroidApplicationConfiguration config = new
AndroidApplicationConfiguration();
RelativeLayout layout = new RelativeLayout(this);
RelativeLayout.LayoutParams params = new
RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT,
RelativeLayout.LayoutParams.MATCH_PARENT);
layout.setLayoutParams(params);
View gameView=initializeForView(new FinalDemo(), config);
RelativeLayout.LayoutParams gameViewParams = new
RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
gameViewParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, RelativeLayout.TRUE);
gameViewParams.addRule(RelativeLayout.CENTER_HORIZONTAL, RelativeLayout.TRUE);
gameView.setLayoutParams(gameViewParams);
layout.addView(gameView);
adView = new AdView(this);
adView.setAdSize(AdSize.BANNER);
adView.setAdUnitId(adUnitId);
AdRequest.Builder adRequestBuilder = new AdRequest.Builder();
adRequestBuilder.addTestDevice(AdRequest.DEVICE_ID_EMULATOR);
adView.loadAd(adRequestBuilder.build());
RelativeLayout.LayoutParams topParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
topParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM,RelativeLayout.TRUE);
topParams.addRule(RelativeLayout.CENTER_HORIZONTAL, RelativeLayout.TRUE);
layout.addView(adView, topParams);
adView.setBackgroundColor(android.graphics.Color.TRANSPARENT);
setContentView(layout);
mInterstitialAd = new InterstitialAd(this);
mInterstitialAd.setAdUnitId("ca-app-pub-4578173480768480/4050414865");
mInterstitialAd.loadAd(new AdRequest.Builder().build());
}
@Override
protected void onResume() {
super.onResume();
adView.resume();
}
@Override
protected void onPause() {
super.onPause();
adView.pause();
}
@Override
protected void onDestroy() {
super.onDestroy();
adView.destroy();
}
}
游戏世界:
public class GameWorld {
public int score=0;
private float runTime=0;
private GameState currentState;
private Hero hero;
private ScrollHandler scroller;
private Rectangle ground;
private int midPointY;
private GameRenderer renderer;
public enum GameState {
MENU, READY, RUNNING, GAMEOVER, HIGHSCORE
}
public GameWorld(int midPointY){
currentState=GameState.MENU;
this.midPointY=midPointY;
hero=new Hero(33,midPointY-5,17,12);
scroller = new ScrollHandler(this, midPointY + 66);
ground=new Rectangle(0, midPointY + 66, 137, 11);
}
public void update(float delta) {
runTime += delta;
switch (currentState) {
case READY:
case MENU:
updateReady(delta);
break;
case RUNNING:
updateRunning(delta);
break;
default:
break;
}}
private void updateReady(float delta) {
hero.updateReady(runTime);
scroller.updateReady(delta);
}
public void updateRunning(float delta){
// Add a delta cap so that if our game takes too long
// to update, we will not break our collision detection.
if (delta > .15f) {
delta = .15f;
}
hero.update(delta);
scroller.update(delta);
if (scroller.collides(hero)&&hero.isAlive()) {
// Clean up on game over
scroller.stop();
hero.die();
renderer.prepareTransition(255,255,255,.3f);
//AssetLoader.dead.play();
}
//if (scroller.collides(hero) && hero.isAlive()) {
// scroller.stop();
// hero.die();
// AssetLoader.dead.play();
if (Intersector.overlaps(hero.getBoundingCircle(), ground)) {
if (hero.isAlive()){
//AssetLoader.dead.play();
renderer.prepareTransition(255,255,255,.3f);
hero.die();
}
scroller.stop();
hero.decelerate();
currentState = GameState.GAMEOVER;
if (score > AssetLoader.getHighScore()) {
AssetLoader.setHighScore(score);
currentState = GameState.HIGHSCORE;
}
}}
public boolean isHighScore() {
return currentState == GameState.HIGHSCORE;
}
public boolean isReady() {
return currentState == GameState.READY;}
public void start() {
currentState = GameState.RUNNING;
}
public void restart(){
score = 0;
hero.onRestart(midPointY - 5);
scroller.onRestart();
ready();
}
public boolean isGameOver() {
return currentState == GameState.GAMEOVER;
}
public Hero getHero(){
return hero;
}
public ScrollHandler getScroller(){
return scroller;
}
public int getScore(){
return score;
}
public void addScore(int increment) {
score += increment;
}
public int getMidPointY(){
return midPointY;
}
public void ready() {
currentState = GameState.READY;
renderer.prepareTransition(0,0,0,1f);
}
public boolean isMenu() {
return currentState == GameState.MENU;
}
public boolean isRunning() {
return currentState == GameState.RUNNING;
}
public void setRenderer(GameRenderer renderer){
this.renderer = renderer;
}
}
这是来自 GameRenderer 类的相关部分。
if (myWorld.isRunning()) {
drawHero(runTime);
drawScore();
} else if (myWorld.isReady()) {
drawHero(runTime);
drawScore();
} else if (myWorld.isMenu()) {
drawHeroCentered(runTime);
drawMenuUI();
} else if (myWorld.isGameOver()) {
drawScoreboard();
drawHero(runTime);
drawGameOver();
drawRetry();
} else if (myWorld.isHighScore()) {
drawScoreboard();
drawHero(runTime);
drawHighScore();
drawRetry();
}
【问题讨论】:
-
您是否有任何理由不对活动内容使用 XML 布局?这样可以更轻松地在活动之间移动广告视图。