libGDX/Android Studio将AdMob代码嵌入其他类
首次发布到此网站。我是libGDX和java的新手。我有一个C++的中级知识。我的问题是,我的AdMob代码只适用于我的Android启动器类(不知道这是有意的还是我错过了某些东西,我似乎无法将这些库导入其他类)然后,我无法使用AndroidLauncher代码,我想要的地方。libGDX/Android Studio将AdMob代码嵌入其他类
游戏目前在游戏启动时以正确的尺寸显示广告。我想调用这个广告(它现在是一个横幅广告,我最终希望将其更改为插页式广告,我理解这些概念有些不同。)当我使用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();
}
非常感谢你,这很好。你太棒了。 –
在LibGDX中,核心模块通常与Android模块分离为依赖项,所以不能直接从核心模块调用Android模块的功能。
所以解决方法是在核心模块中创建名称为AdLoader
的接口并添加函数声明,如showAd()
和hideAd()
。
然后让您的类Android Launcher
实现该接口并将其作为构造函数传递给FinalDemo
类的核心模块并保存AdLoader的引用,然后您可以从核心模块调用接口方法。
有没有你不使用的XML布局为活动的任何原因内容?这样可以更轻松地在活动之间移动广告。 –