Implemented moving/hiding ad from C code, updated admob test project with moving ad

This commit is contained in:
pelya
2012-09-06 19:41:40 +03:00
parent 8c54a7643d
commit 6dec5b8a1e
8 changed files with 116 additions and 27 deletions
@@ -16,6 +16,7 @@
#include "SDL.h"
#include "SDL_image.h"
#include "SDL_android.h"
/*----------------------------------------------------------
@@ -430,9 +431,18 @@ int main(int argc, char* argv[])
int fps_count = 0;
int fps_start = 0;
float x_speed, y_speed, z_speed;
SDL_Rect adSize;
int physicalW = 0, physicalH = 0;
int showAd = 0;
SDL_ANDROID_GetAdvertisementParams(NULL, &adSize);
__android_log_print(ANDROID_LOG_INFO, "Ballfield", "Advertisement size %dx%d pos %d:%d", (int)adSize.w, (int)adSize.h, (int)adSize.x, (int)adSize.y);
SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_JOYSTICK);
physicalW = SDL_GetVideoInfo()->current_w;
physicalH = SDL_GetVideoInfo()->current_h;
atexit(SDL_Quit);
screen = SDL_SetVideoMode(SCREEN_W, SCREEN_H, bpp, flags);
@@ -555,8 +565,22 @@ int main(int argc, char* argv[])
fps = (float)fps_count * 1000.0 / (tick - fps_start);
fps_count = 0;
fps_start = tick;
showAd++;
if(showAd > 3)
showAd = 0;
SDL_ANDROID_SetAdvertisementVisible(showAd);
}
int adX = abs(x_offs / 100) % (physicalW - adSize.w);
int adY = abs(y_offs / 80) % (physicalH - adSize.h);
SDL_ANDROID_SetAdvertisementPosition(adX, adY);
SDL_Rect adRect;
adRect.x = adX * SCREEN_W / physicalW;
adRect.w = adSize.w * SCREEN_W / physicalW;
adRect.y = adY * SCREEN_H / physicalH;
adRect.h = adSize.h * SCREEN_H / physicalH;
SDL_FillRect(screen, &adRect, 0xff0);
print_num(screen, font, screen->w-37, screen->h-12, fps);
++fps_count;

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

+5 -1
View File
@@ -45,8 +45,12 @@ extern DECLSPEC int SDLCALL SDL_ANDROID_SetApplicationPutToBackgroundCallback(
extern DECLSPEC int SDLCALL SDL_ANDROID_PauseAudioPlayback(void);
extern DECLSPEC int SDLCALL SDL_ANDROID_ResumeAudioPlayback(void);
/* Get the advertisement size, position and visibility */
extern DECLSPEC int SDLCALL SDL_ANDROID_GetAdvertisementParams(int * visible, SDL_Rect * position);
extern DECLSPEC int SDLCALL SDL_ANDROID_SetAdvertisementParams(int visible, int left, int top);
/* Control the advertisement placement */
extern DECLSPEC int SDLCALL SDL_ANDROID_SetAdvertisementVisible(int visible);
/* Control the advertisement visibility */
extern DECLSPEC int SDLCALL SDL_ANDROID_SetAdvertisementPosition(int left, int top);
#ifdef __cplusplus
}
@@ -64,7 +64,8 @@ static jmethodID JavaSwapBuffers = NULL;
static jmethodID JavaShowScreenKeyboard = NULL;
static jmethodID JavaToggleScreenKeyboardWithoutTextInput = NULL;
static jmethodID JavaGetAdvertisementParams = NULL;
static jmethodID JavaSetAdvertisementParams = NULL;
static jmethodID JavaSetAdvertisementVisible = NULL;
static jmethodID JavaSetAdvertisementPosition = NULL;
static int glContextLost = 0;
static int showScreenKeyboardDeferred = 0;
static const char * showScreenKeyboardOldText = "";
@@ -295,10 +296,9 @@ JAVA_EXPORT_NAME(DemoRenderer_nativeInitJavaCallbacks) ( JNIEnv* env, jobject t
JavaShowScreenKeyboard = (*JavaEnv)->GetMethodID(JavaEnv, JavaRendererClass, "showScreenKeyboard", "(Ljava/lang/String;I)V");
JavaToggleScreenKeyboardWithoutTextInput = (*JavaEnv)->GetMethodID(JavaEnv, JavaRendererClass, "showScreenKeyboardWithoutTextInputField", "()V");
// TODO: implement it
/*
JavaGetAdvertisementParams = (*JavaEnv)->GetMethodID(JavaEnv, JavaRendererClass, "GetAdvertisementParams", "()V");
JavaSetAdvertisementParams = (*JavaEnv)->GetMethodID(JavaEnv, JavaRendererClass, "SetAdvertisementParams", "(III)V");
*/
JavaGetAdvertisementParams = (*JavaEnv)->GetMethodID(JavaEnv, JavaRendererClass, "getAdvertisementParams", "([I)V");
JavaSetAdvertisementVisible = (*JavaEnv)->GetMethodID(JavaEnv, JavaRendererClass, "setAdvertisementVisible", "(I)V");
JavaSetAdvertisementPosition = (*JavaEnv)->GetMethodID(JavaEnv, JavaRendererClass, "setAdvertisementPosition", "(II)V");
ANDROID_InitOSKeymap();
}
@@ -360,3 +360,35 @@ JAVA_EXPORT_NAME(Settings_nativeSetVideoDepth) (JNIEnv* env, jobject thiz, jint
SDL_ANDROID_BYTESPERPIXEL = SDL_ANDROID_BITSPERPIXEL / 8;
SDL_ANDROID_UseGles2 = UseGles2;
}
int SDLCALL SDL_ANDROID_GetAdvertisementParams(int * visible, SDL_Rect * position)
{
jint arr[5];
jintArray elemArr = (*JavaEnv)->NewIntArray(JavaEnv, 5);
if (elemArr == NULL)
return 0;
(*JavaEnv)->SetIntArrayRegion(JavaEnv, elemArr, 0, 5, arr);
(*JavaEnv)->CallVoidMethod(JavaEnv, JavaRenderer, JavaGetAdvertisementParams, elemArr);
(*JavaEnv)->GetIntArrayRegion(JavaEnv, elemArr, 0, 5, arr);
(*JavaEnv)->DeleteLocalRef(JavaEnv, elemArr);
if(visible)
*visible = arr[0];
if(position)
{
position->x = arr[1];
position->y = arr[2];
position->w = arr[3];
position->h = arr[4];
}
return 1;
}
int SDLCALL SDL_ANDROID_SetAdvertisementVisible(int visible)
{
(*JavaEnv)->CallVoidMethod( JavaEnv, JavaRenderer, JavaSetAdvertisementVisible, (jint)visible );
return 1;
}
int SDLCALL SDL_ANDROID_SetAdvertisementPosition(int left, int top)
{
(*JavaEnv)->CallVoidMethod( JavaEnv, JavaRenderer, JavaSetAdvertisementPosition, (jint)left, (jint)top );
return 1;
}