var ret = jsb.reflection.callStaticMethod("NativeOcClass",
"callNativeUIWithTitle:andContent:",
"cocos2d-js",
"Yes! you call a Native UI from Reflection")
这里是这个方法在OC的实现,可以看到是弹出一个native的对话框。并把title和content设置成传入的参数,并返回一个boolean类型的返回值。
+(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
}
此时,就可以在ret中接受到从OC传回的返回值(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
}
cocos2d是OC写的,cocos2dx是c++写的cocos2d只能在ios下运行,cocos2dx是跨平台的,ios和android平台都可以运行
cocos2d是外国人搞的,cocos2dx是中国人搞的。
cocos2dx是cocos2d的C++写法,但是游戏架构是一样的,都包含了精灵,导演,场景,动作等概念,他们是一脉相承的东西。你可以直接研究cocos2dx,没有什么障碍。虽然是有了cocos2d才有的cocos2dx,但是cocos2dx包含了cocos2d的主要思想,因此可以直接研究cocos2dx。
cocos js 做出按钮选中效果示例:
一,首先使用cocos新建一个Cocos2d-js的新项目,然后再cocostudio中创建一个场景,在场景中添加三个按钮分别设置三态的图片
二,打开编辑器,实现代码如下:
var HelloWorldLayer = cc.Layer.extend({
ctor:function () {
this._super()
//导入cocostudio中拼好的界面
mainscene = ccs.load(res.MainScene_json).node
this.addChild(mainscene)
this.teamButton = ccui.helper.seekWidgetByName(mainscene,"Button_0")
var btn2 = ccui.helper.seekWidgetByName(mainscene,"Button_1")
var btn3 = ccui.helper.seekWidgetByName(mainscene,"Button_2")
//先默认设置一个按钮为选中状态 this.teamButton.setBrightStyle(ccui.Widget.BRIGHT_STYLE_HIGH_LIGHT)
this.teamButton.setEnabled(false)
var teamInfo = this.teamButton
this.teamButton.addTouchEventListener(this.selectedBtn1,this)
btn2.addTouchEventListener(this.selectedBtn2,this)
btn3.addTouchEventListener(this.selectedBtn3,this)
return true
},
selectedBtn1: function (sender, type) {
if(type == ccui.Widget.TOUCH_ENDED){
this.callBack(sender)
cc.log("==========商店界面")
}
},
selectedBtn2: function (sender, type) {
if(type == ccui.Widget.TOUCH_ENDED){
this.callBack(sender)
cc.log("==========卡牌界面")
}
},
selectedBtn3: function (sender, type) {
if(type == ccui.Widget.TOUCH_ENDED){
this.callBack(sender)
cc.log("==========战斗界面")
}
},
callBack: function (sender) {
if (this.teamButton == sender){
return
}else{
this.teamButton.setBrightStyle(ccui.Widget.BRIGHT_STYLE_NORMAL)
this.teamButton.setEnabled(true)
sender.setBrightStyle(ccui.Widget.BRIGHT_STYLE_HIGH_LIGHT)
sender.setEnabled(false)
this.teamButton = sender
}
},
})
var HelloWorldScene = cc.Scene.extend({
onEnter:function () {
this._super()
var layer = new HelloWorldLayer()
this.addChild(layer)
}
})
三,运行就可以查看界面,点击不同的按钮显示不同的输出结果
[Log] ==========商店界面 (CCDebugger.js, line 331)
[Log] ==========卡牌界面 (CCDebugger.js, line 331)
[Log] ==========战斗界面 (CCDebugger.js, line 331)