До показа рекламы мой игровой рендеринг работал нормально.
Теперь, когда показываются объявления, появляется объявление, а затем мои объекты Laser перестают отображаться на экране.Корабли по-прежнему хорошо отображаются.
Если я настрою приложение и вернусь, лазеры снова появятся.Я выделил этот эффект из-за того, что adview заканчивает загрузку рекламы - с этого момента лазеры перестают рисовать.
Что-то в этом процессе заслоняет мои холсты.
Я разместил логивнутри onDraw Laser, и они все еще запускаются.
Я пытался отложить создание игрового обзора до тех пор, пока не загрузится реклама, это не исправило это.
8.1 на Nexus 5.
Почему при показе объявления рисунок на холсте не работает правильно для некоторых элементов?
Вот основное задание:
`` `
public class MainActivity extends AppCompatActivity {
public GameView mGameView;
private PointF point;
private PointF point2;
private long time;
private AdView mAdView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MobileAds.initialize(this, "XXX");
setContentView(R.layout.activity_main);
installAds();
setVolumeControlStream(AudioManager.STREAM_MUSIC);
}
private void installAds() {
mAdView = findViewById(R.id.adView);
AdRequest.Builder b = new AdRequest.Builder();
b.addTestDevice((AdRequest.DEVICE_ID_EMULATOR));
b.addTestDevice("XXX")
b.addTestDevice("XXX")
AdRequest adRequest = b.build();
mAdView.loadAd(adRequest);
LinearLayout mLinearLayout = findViewById(R.id.linearLayout);
mGameView = new GameView(this);
mLinearLayout.addView(mGameView, 0);
mAdView.setAdListener(new AdListener() {
@Override
public void onAdImpression() {
super.onAdImpression();
createGameView();
}
@Override
public void onAdLoaded() {
super.onAdLoaded();
createGameView();
}
@Override
public void onAdFailedToLoad(int var1) {
super.onAdFailedToLoad(var1);
createGameView();
}
});
}
public void createGameView() {
if (mGameView == null) {
LinearLayout mLinearLayout = findViewById(R.id.linearLayout);
mGameView = new GameView(this);
mLinearLayout.addView(mGameView, 0);
}
mGameView.bringToFront();
}
@Override
public boolean onTouchEvent(MotionEvent event) {
int action = MotionEventCompat.getActionMasked(event);
if (action == MotionEvent.ACTION_POINTER_UP) {
mGameView.fire();
} else if (action == MotionEvent.ACTION_DOWN) {
if (point == null) {
time = new Date().getTime();
float x = event.getX();
float y = event.getY();
point = new PointF(x, y);
} else {
float x = event.getX();
float y = event.getY();
point2 = new PointF(x, y);
mGameView.fire();
}
return true;
} else if (action == MotionEvent.ACTION_MOVE) {
PointF p = new PointF(event.getX(), event.getY());
double d1 = Util.distance(p, point);
double d2 = 999999999;
if (point2 != null) {
d2 = Util.distance(p, point2);
}
if (d1 < d2) {
point.set(p.x, p.y);
mGameView.swipe(point.x, point.y - 250);
} else {
// moved near fire tap, do nothing
}
} else if (action == MotionEvent.ACTION_UP) {
if (point == null) {
point2 = null;
} else if (point2 == null) {
mGameView.halt();
PointF p = new PointF(event.getX(), event.getY());
if (Util.distance(p, point) < 80) {
//one finger tap
long ms = new Date().getTime();
if (ms < time + 500) {
mGameView.fire();
}
}
point = null;
} else {
PointF p = new PointF(event.getX(), event.getY());
double d1 = Util.distance(p, point);
double d2 = Util.distance(p, point2);
if (d1 < d2) {
point = null;
mGameView.halt();
} else {
point2 = null;
}
}
}
return super.onTouchEvent(event);
}
@Override
protected void onPause() {
super.onPause();
mGameView.freeze();
}
@Override
protected void onStop() {
super.onStop();
mGameView.freeze();
}
@Override
protected void onResume() {
super.onResume();
mGameView.resume();
point = null;
point2 = null;
}
}
ВотМакет:
<RelativeLayout
android:id="@+id/rvAd"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_weight="1"
android:orientation="vertical"
android:paddingLeft="0dp"
android:paddingRight="0dp">
<com.google.android.gms.ads.AdView xmlns:ads="http://schemas.android.com/apk/res-auto"
android:id="@+id/adView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
ads:adSize="BANNER"
ads:adUnitId="XXX"></com.google.android.gms.ads.AdView>
</RelativeLayout>
<LinearLayout
android:id="@+id/linearLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/rvAd"
android:orientation="vertical"
android:paddingLeft="0dp"
android:paddingRight="0dp">
</LinearLayout>
Вот мой взгляд на игру ondraw:
@Override
public void onDraw(Canvas canvas) {
super.onDraw(canvas);
if (mCanvas == null) {
mCanvas = canvas;
}
canvas.drawColor(Color.BLACK);
canvas.drawText("Score: " + String.valueOf(kills), 20, 20 * quantumPilot.ratio, paint);
canvas.drawText(displayText, (float)(quantumPilot.screenW - 175 * quantumPilot.ratio), 20 * quantumPilot.ratio, paint);
if (quantumPilot.screenH == 0) {
quantumPilot.loadCanvas(canvas);
clones.get(0).loadCanvas(canvas);
deadline.loadCanvas(canvas);
paint.setTextSize(20 * quantumPilot.ratio);
}
if (kills <= 2) {
canvas.drawText("Tap = Shoot", 200 * quantumPilot.ratio, 450 * quantumPilot.ratio, paint);
if (kills > 0) {
canvas.drawText("Drag = Move", 50 * quantumPilot.ratio, 450 * quantumPilot.ratio, paint);
}
}
quantumPilot.draw(canvas);
for (Laser l : pilotLasers) {
l.draw(canvas);
}
for (Laser l : cloneLasers) {
l.draw(canvas);
}
for (Clone clone : clones) {
if (clone.screenH == 0) {
clone.loadCanvas(canvas);
}
clone.draw(canvas);
}
for (Explosion e : explosions) {
e.draw(canvas);
}
deadline.draw(canvas);
}
```