【发布时间】:2015-03-03 20:47:00
【问题描述】:
好吧,我正在制作一个有点像小鸟的小游戏,因为起始页、主游戏和游戏结束屏幕都在我的主游戏循环中:gameState == 0(起始页),gameState == 1(主游戏),gameState == 2(游戏结束屏幕)一切正常,但我遇到的问题是,当我尝试从 admob 加载广告时,它失败了即使广告请求是从我的主要活动中调用的,并且包含我的游戏循环的客户 SurfaceView 也在其自己的单独线程中运行,循环仍在运行
主要活动类
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
adView = new AdView(this);
adView.setAdUnitId(unitId_Banner);
adView.setAdSize(AdSize.SMART_BANNER);
sView = new SView(this, this.getResources());
RelativeLayout mainLayout = new RelativeLayout(this);
RelativeLayout.LayoutParams adParams = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
adParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
mainLayout.addView(sView);
mainLayout.addView(adView, adParams);
adView.bringToFront();
setContentView(mainLayout);
adView.setVisibility(View.VISIBLE);
adView.loadAd(new AdRequest.Builder().addTestDevice(AdRequest.DEVICE_ID_EMULATOR).build());
}
游戏循环类
public void run(){
while(running){
if(!holder.getSurface().isValid()){
continue;
}
canvas = null;
try{
canvas = holder.lockCanvas();
synchronized(holder){
startTime = System.currentTimeMillis();
framesSkipped = 0;
update();
draw(canvas);
timeDiff = System.currentTimeMillis() - startTime;
sleepTime = (int)(FRAME_PERIOD - timeDiff);
if(sleepTime > 0){
try{
Thread.sleep(sleepTime);
}catch(InterruptedException e){}
}
while(sleepTime < 0 && framesSkipped < MAX_FRAME_SKIPS){
update();
sleepTime += FRAME_PERIOD;
framesSkipped++;
}
}
}finally{
if(canvas != null){
holder.unlockCanvasAndPost(canvas);
}
}
}
}
如果我要删除 gameloop 运行方法中的 while 循环,广告加载正常,谁能帮我恳求
03-04 02:47:30.997: I/Ads(277): Starting ad request.
03-04 02:47:58.218: W/Ads(277): There was a problem getting an ad response. ErrorCode: 0
03-04 02:47:58.227: W/Ads(277): Failed to load ad: 0
【问题讨论】:
-
试试这个,让
setContentView(mainLayout);成为你的onCreate方法中的最后一个函数。或者 adview 函数可能是你在 super.onCreate 之后 oncreate 的第一行 -
什么是失败 - 显示你的 logcat
-
嘿 elitz 试过了,但没有任何其他建议
-
william 你去吧,希望对你有帮助
标签: java android admob surfaceview