这里展示的是基于反射机制的事件系统,具体文件档链接及示例代码(链接最下面有源码):
https://docs.cocos.com/creator/manual/zh/advanced-topics/jsb-bridge-wrapper.html
举例1:ios平台
1.在发布出来的xcode工程中,新建脚本JsbBridgeTest.h ,JsbBridgeTest.m
其中JsbBridgeTest.h的代码为:
#import <Foundation/Foundation.h>
@interface JsbBridgeTest:NSObject
@end
其中JsbBridgeTest.m的代码为:
#include "JsbBridgeTest.h"
#import <Foundation/Foundation.h>
#import "cocos/platform/apple/JsbBridgeWrapper.h"
@implementation JsbBridgeTest{
}
-(id)init{
self = [super init];
JsbBridgeWrapper* m = [JsbBridgeWrapper sharedInstance];
OnScriptEventListener nativeChangeLabelContent = ^void(NSString* arg){
JsbBridgeWrapper* m = [JsbBridgeWrapper sharedInstance];
[m dispatchEventToScript:@"nativeChangeLabelContent" arg:@"Charlotte"];
};
OnScriptEventListener requestLabelColor = ^void(NSString* arg){
JsbBridgeWrapper* m = [JsbBridgeWrapper sharedInstance];
[m dispatchEventToScript:@"changeLabelColor"];
};
OnScriptEventListener requestBtnColor = ^void(NSString* arg){
JsbBridgeWrapper* m = [JsbBridgeWrapper sharedInstance];
[m dispatchEventToScript:@"changeLightColor"];
};
[m addScriptEventListener:@"nativeChangeLabelContent" listener:nativeChangeLabelContent];
[m addScriptEventListener:@"requestLabelColor" listener:requestLabelColor];
[m addScriptEventListener:@"requestBtnColor" listener:requestBtnColor];
[m addScriptEventListener:@"removeJSCallback" listener:^void(NSString* arg){
JsbBridgeWrapper * m = [JsbBridgeWrapper sharedInstance];
[m removeAllListenersForEvent:@"requestBtnColor"];
}];
return self;
}
@end
2.构建好项目在任意一个入口文件添加头文件
这里举例:AppDelegate.m中添加如下代码
#import "JsbBridgeTest.h"
在didFinishLaunchingWithOptions方法中添加如下代码
JsbBridgeTest* jsbBridgeTest{nullptr};
jsbBridgeTest = [JsbBridgeTest new];
初始化jsbBridgeTest的类
3.在ts脚本中添加事件绑定及调用
先添加事件(这里为了好理解全部使用nativeChangeLabelContent的event的key来表示)
native.jsbBridgeWrapper.addNativeEventListener("nativeChangeLabelContent", (usr: string) => {
console.log("收到了c的回调:"+usr);
});
再绑定按钮写派发到c中的事件:
native.jsbBridgeWrapper.dispatchEventToNative({
"eventName": "nativeChangeLabelContent",
"arg": "5000"
})
结合上面代码意思为:ts调用c中nativeChangeLabelContent事件传了arg为5000的参数,然后c处理5000后以Charlotte为参数再次调用ts中的nativeChangeLabelContent绑定回调
4.成功截图
最后保证每次构建项目时JsbBridgeTest.h ,JsbBridgeTest.m的文件不会被删除教程:自己写的c脚本在哪里不会被构建删掉且能发出在项目中?
无奈sdkbox倒闭,只能自己手写分享及iap后续更上。
