AdMob 插页式 Cocos2d-x WP8
AdMob Interstitial Cocos2d-x WP8
谁能告诉我如何在 cocos2d-x 游戏的场景之间调用 AdMob Interstitial?
我试过这个 http://robwirving.com/2014/07/21/calling-c-methods-c-winrt-components/ 指南,但我不知道如何 运行 它来自 cocos 类。
有没有其他方法,或者一些指南?
我最近做到了。你必须做几件事。首先创建 helper class,它将帮助你调用本地函数(我将它用于所有 3 个平台,但这里只是 windows phone):
NativeHelper.h:
#ifndef __NATIVE_HELPER_H_
#define __NATIVE_HELPER_H_
#include <string>
#include <functional>
#include "cocos2d.h"
using namespace std;
USING_NS_CC;
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WP8)
namespace cocos2d
{
public delegate void CSharpShowInterstitialDelegate();
public ref class WP8NativeEventHelper sealed
{
public:
void WP8NativeEventHelper::SetCSharpShowInterstitialDelegate(CSharpShowInterstitialDelegate^ delegate){
m_CSharpShowInterstitialDelegate = delegate;
}
void CallShowInterstitial();
private:
property static CSharpShowInterstitialDelegate^ m_CSharpShowInterstitialDelegate;
};
}
#endif
class NativeHelper
{
public:
static void showInterstitial(string adSdk);
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WP8)
WP8NativeEventHelper^ wp8helper;
#endif
//instance required only for setting callback
static NativeHelper* getInstance();
~NativeHelper()
{
instanceFlag = false;
}
private:
static bool instanceFlag;
static NativeHelper* instance;
NativeHelper() {};
};
#endif // __NATIVE_HELPER_H_
所以。我们有特殊的 C++/CX class Wp8NativeEventHelper,它可以 "talk" 与 C#。这里我们存储一个委托。
工作原理:
- C# 正在调用 SetCSharpShowInterstitialDelegate 并将委托传递给它,这将在静态 属性.
中被记住
- 然后C++\CX可以使用CallShowInterstitial来调用它。
现在NativeHelperWP.cpp:
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WP8)
#ifndef __NATIVE_HELPER_WP_H_
#define __NATIVE_HELPER_WP_H_
#include "NativeHelper.h"
void WP8NativeEventHelper::CallShowInterstitial(){
if (m_CSharpShowInterstitialDelegate)
{
m_CSharpShowInterstitialDelegate->Invoke();
}
}
bool NativeHelper::instanceFlag = false;
NativeHelper* NativeHelper::instance = NULL;
NativeHelper* NativeHelper::getInstance()
{
if(!instanceFlag){
instance = new NativeHelper();
instanceFlag = true;
instance->wp8helper = ref new WP8NativeEventHelper();
}
return instance;
}
void NativeHelper::showInterstitial(){
NativeHelper::getInstance()->wp8helper->CallShowInterstitial();
}
#endif
#endif
这里只是一个CallShowInterstitial的实现。同样在 NativeHelper::showInterstitial 中,我们调用 C++/CX,后者稍后调用 c#。
现在的 c# 代码 (MainPage.xaml.cs):
命名空间外:
using GoogleAds;
里面 class:
private InterstitialAd interstitialAd;
在构造函数中:
WP8NativeEventHelper helper = new WP8NativeEventHelper();
helper.SetCSharpShowInterstitialDelegate(showInterstitial);
并创建 showInterstitial 函数:
public void showInterstitial() //we recreate interstitial each time, because otherwise it'll show only once, only new requests won't work
{
interstitialAd = new InterstitialAd("MY_AD_UNIT_ID");
AdRequest adRequest = new AdRequest();
#if DEBUG
// Enable test ads.
adRequest.ForceTesting = true;
#endif
interstitialAd.ReceivedAd += OnAdReceived;
interstitialAd.LoadAd(adRequest);
}
最后是 OnAdReceived:
private void OnAdReceived(object sender, AdEventArgs e)
{
System.Diagnostics.Debug.WriteLine("Ad received successfully");
interstitialAd.ShowAd();
}
按照此指南设置 admob:https://developers.google.com/mobile-ads-sdk/docs/admob/wp/quick-start
现在让我们使用它。
在HelloWorldScene.h中添加:
#include "NativeHelper.h"
在HelloWorldScene.cpp中:
NativeHelper::showInterstitial();
例如,您可以采用相同的方式 show/hide/change admob 横幅的位置(但是它有问题,所以我正在使用广告中介)。
谁能告诉我如何在 cocos2d-x 游戏的场景之间调用 AdMob Interstitial?
我试过这个 http://robwirving.com/2014/07/21/calling-c-methods-c-winrt-components/ 指南,但我不知道如何 运行 它来自 cocos 类。
有没有其他方法,或者一些指南?
我最近做到了。你必须做几件事。首先创建 helper class,它将帮助你调用本地函数(我将它用于所有 3 个平台,但这里只是 windows phone):
NativeHelper.h:
#ifndef __NATIVE_HELPER_H_
#define __NATIVE_HELPER_H_
#include <string>
#include <functional>
#include "cocos2d.h"
using namespace std;
USING_NS_CC;
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WP8)
namespace cocos2d
{
public delegate void CSharpShowInterstitialDelegate();
public ref class WP8NativeEventHelper sealed
{
public:
void WP8NativeEventHelper::SetCSharpShowInterstitialDelegate(CSharpShowInterstitialDelegate^ delegate){
m_CSharpShowInterstitialDelegate = delegate;
}
void CallShowInterstitial();
private:
property static CSharpShowInterstitialDelegate^ m_CSharpShowInterstitialDelegate;
};
}
#endif
class NativeHelper
{
public:
static void showInterstitial(string adSdk);
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WP8)
WP8NativeEventHelper^ wp8helper;
#endif
//instance required only for setting callback
static NativeHelper* getInstance();
~NativeHelper()
{
instanceFlag = false;
}
private:
static bool instanceFlag;
static NativeHelper* instance;
NativeHelper() {};
};
#endif // __NATIVE_HELPER_H_
所以。我们有特殊的 C++/CX class Wp8NativeEventHelper,它可以 "talk" 与 C#。这里我们存储一个委托。
工作原理:
- C# 正在调用 SetCSharpShowInterstitialDelegate 并将委托传递给它,这将在静态 属性. 中被记住
- 然后C++\CX可以使用CallShowInterstitial来调用它。
现在NativeHelperWP.cpp:
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WP8)
#ifndef __NATIVE_HELPER_WP_H_
#define __NATIVE_HELPER_WP_H_
#include "NativeHelper.h"
void WP8NativeEventHelper::CallShowInterstitial(){
if (m_CSharpShowInterstitialDelegate)
{
m_CSharpShowInterstitialDelegate->Invoke();
}
}
bool NativeHelper::instanceFlag = false;
NativeHelper* NativeHelper::instance = NULL;
NativeHelper* NativeHelper::getInstance()
{
if(!instanceFlag){
instance = new NativeHelper();
instanceFlag = true;
instance->wp8helper = ref new WP8NativeEventHelper();
}
return instance;
}
void NativeHelper::showInterstitial(){
NativeHelper::getInstance()->wp8helper->CallShowInterstitial();
}
#endif
#endif
这里只是一个CallShowInterstitial的实现。同样在 NativeHelper::showInterstitial 中,我们调用 C++/CX,后者稍后调用 c#。
现在的 c# 代码 (MainPage.xaml.cs):
命名空间外:
using GoogleAds;
里面 class:
private InterstitialAd interstitialAd;
在构造函数中:
WP8NativeEventHelper helper = new WP8NativeEventHelper();
helper.SetCSharpShowInterstitialDelegate(showInterstitial);
并创建 showInterstitial 函数:
public void showInterstitial() //we recreate interstitial each time, because otherwise it'll show only once, only new requests won't work
{
interstitialAd = new InterstitialAd("MY_AD_UNIT_ID");
AdRequest adRequest = new AdRequest();
#if DEBUG
// Enable test ads.
adRequest.ForceTesting = true;
#endif
interstitialAd.ReceivedAd += OnAdReceived;
interstitialAd.LoadAd(adRequest);
}
最后是 OnAdReceived:
private void OnAdReceived(object sender, AdEventArgs e)
{
System.Diagnostics.Debug.WriteLine("Ad received successfully");
interstitialAd.ShowAd();
}
按照此指南设置 admob:https://developers.google.com/mobile-ads-sdk/docs/admob/wp/quick-start
现在让我们使用它。
在HelloWorldScene.h中添加:
#include "NativeHelper.h"
在HelloWorldScene.cpp中:
NativeHelper::showInterstitial();
例如,您可以采用相同的方式 show/hide/change admob 横幅的位置(但是它有问题,所以我正在使用广告中介)。