gpt4 book ai didi

windows-phone-8 - AdMob Interstitial Cocos2d-x WP8

转载 作者:行者123 更新时间:2023-12-04 07:01:25 25 4
gpt4 key购买 nike

谁能告诉我如何在我的 cocos2d-x 游戏中的场景之间调用 AdMob Interstitial?

我试过这个http://robwirving.com/2014/07/21/calling-c-methods-c-winrt-components/指南,但我不知道如何从 cocos 类运行它。

有没有其他方法,或者一些指南?

最佳答案

我最近做到了。你必须做几件事。首先创建帮助程序类,它将帮助您调用 native 函数(我将其用于所有 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 类 Wp8NativeEventHelper,它可以与 C# 进行“对话”。我们在这里存储一个委托(delegate)。

工作原理:

  1. C# 正在调用 SetCSharpShowInterstitialDelegate 并将委托(delegate)传递给它,这将在静态属性中被记住。
  2. 然后 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;

内部类:

  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();

例如,您可以用同样的方式显示/隐藏/更改 admob 横幅的位置(但是它有问题,所以我正在使用广告中介)。

关于windows-phone-8 - AdMob Interstitial Cocos2d-x WP8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28533001/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com