美文网首页
Cocos2d 与OC的互相调用

Cocos2d 与OC的互相调用

作者: 大热天晒太阳 | 来源:发表于2017-06-01 10:05 被阅读478次

    JS里面调用OC

    var ret = jsb.reflection.callStaticMethod("NativeOcClass", 
    "callNativeUIWithTitle:andContent:", "cocos2d-js", 
    "Yes! you call a Native UI from Reflection");
    

    对应的Oc代码为:

        +(BOOL)callNativeUIWithTitle:(NSString *) title andContent:(NSString *)content{
            UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:title message:content delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK", nil];
            [alertView show];
            return true;
        }
    

    注意

    在OC的实现中,如果方法的参数需要使用float、int、bool的,请使用如下类型进行转换:

    float,int 请使用NSNumber类型
    bool请使用BOOL类型。
    例如下面代码,我们传入2个浮点数,然后计算他们的合并返回,我们使用NSNumber而不是int、float去作为参数类型。

    +(float) addTwoNumber:(NSNumber *)num1 and:(NSNumber *)num2{
        float result = [num1 floatValue]+[num2 floatValue];
        return result;
    }
    

    目前参数和返回值支持 int, float, bool, string,其余的类型暂时不支持。

    OC中调用JS代码

    相关配置自行谷歌
    语句为:

     NSInteger coins = [[currentProId stringByReplacingOccurrencesOfString:@"," withString:@""] integerValue];
      
        std::string jsCallStr = cocos2d::StringUtils::format("util.storeLayer.appBuySuccessed(%zd);", coins);
    
        ScriptingCore::getInstance()->evalString(jsCallStr.c_str());
    

    其中util.storeLayer 是一个全局的layer.js.
    appBuySuccessed 是方法,括号里面是参数.

    附js调用oc返回

    #define JSO_ERR_OK (0)
    #define JSO_ERR_TYPE_NOT_SUPPORT   (-1)
    #define JSO_ERR_INVALID_AEGUMENTS (-2)
    #define JSO_ERR_METHOD_NOT_FOUND (-3)
    #define JSO_ERR_EXCEPTION_OCCURRED (-4)
    #define JSO_ERR_CLASS_NOT_FOUND (-5)
    #define JSO_ERR_VM_FAILURE (-6)
    

    相关文章

      网友评论

          本文标题:Cocos2d 与OC的互相调用

          本文链接:https://www.haomeiwen.com/subject/qfvsfxtx.html