我正在为我的 cocos2dx 游戏在 iOS 中编写应用内购买代码。我想从 Obj C 调用我的 C++ 函数。我可以使用 *.mm 实现文件 Obj-C++ 调用 C++ 静态函数。但是我想在购买过程中更新用户界面。我尝试创建一个单例类,但 Obj-C 仍然无法识别单例对象的函数。
C++ : SceneAcc.cpp
void SceneAcc::stateChecker()
{
if(BridgeObjCpp::sharedBridge()->isPurchasing == false)
{
this->unschedule(schedule_selector(SceneAcc::stateChecker));
removeBuyCash();
}
}
// There is an update scheduler to check if the purchase phase done
C++:BridgeObjCpp.mm
BridgeObjCpp* BridgeObjCpp::sharedBridge(){
if (! s_bridge) {
s_bridge = new BridgeObjCpp();
}
return s_bridge;
}
// Init singleton object
// And bool isPurchasing property in the header
IAPManager.m
- (void)completeTransaction:(SKPaymentTransaction *)transaction {
NSLog(@"Complete Transaction...");
// I want something like this
BridgeObjCpp::sharedBridge()->isPurchase = true;
[[SKPaymentQueue defaultQueue] removeTransactionObserver:self];
[[SKPaymentQueue defaultQueue]finishTransaction:transaction];
}
最佳答案
您需要修改 BridgeObjCpp.mm 或 IAPManager.m。
- 在 BridgeObjCpp.mm 中添加静态方法来处理静态对象,并在 有效的 BridgeObjCpp.mm 将充当与 C++ 通信的包装器 方法。
BridgeObjCpp.h
@interface BridgeObjCpp : NSObject
+(void)setPurchasing:(BOOL)purchasing:
@end
BridgeObjCpp.mm
@implementation BridgeObjCpp
+(void)setPurchasing:(BOOL)purchasing {
BridgeObjCpp::sharedBridge()->isPurchase = purchasing ;
}
@end
IAPManager.m
[BridgeObjCpp setPurchasing:YES];
或
- 将 IAPManager.m 重命名为 IAPManager.mm 以使用 C++ 约定。
注意:在 .mm 文件中,编译器期望 Objective-C 和 C++ 代码的混合。在 .m 文件中,它只需要 Objective-C 代码。所以请分别编码。
关于ios - Obj C 调用 Cocos2dx C++ 非静态函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20490188/