回调函数是界面交互和接入各种第三方SDK的关键所在,因为回调函数的C++代码是不能自动生成的,一切的一切,都需要手写完成。
比较不错的是,Cocos2d-x引擎对于回调函数提供了完整的包装机制。我们所需要做的就是了解这个机制,并使用他。学习引擎自己的代码例子,可以比较快速准确的上手这一机制。
首先,我们在Cocos2d-x 3.0 beta版中,使用他自带的工程创建工具,新建一个跨平台的JS项目。按照惯例,这是一个helloworld项目。在XCode运行时,我们可以看到:
可以看到右下角的回调按钮。我们来看看他是怎么实现的。分成两个过程来做:
一、绑定回调函数过程
首先,我们要去找回调函数JS的绑定代码,在myApp.js中,init函数里面,可以看到如下代码:
3 4 5 6 7 8 9 10 11 12 | // add a "close" icon to exit the progress. it's an autorelease object var closeItem = cc.MenuItemImage.create( "res/CloseNormal.png" , "res/CloseSelected.png" , function () { cc.log( "close button was clicked." ); }, this ); closeItem.setAnchorPoint(cc.p(0.5, 0.5)); var menu = cc.Menu.create(closeItem); menu.setPosition(cc.p(0, 0)); this .addChild(menu, 1); closeItem.setPosition(cc.p(size.width - 20, 20)); |
cc.MenuItemImage.create函数的第三个参数,绑定了匿名回调函数。第四个参数,传入的是回调函数调用时的this(如果不理解JS的this机制,请先阅读一些JS的资料)。这些都是意图和作用很明显的JS代码,不用细说。
然后,我们去看底层对应执行的C++代码。在cocos2d_specifics.cpp文件中,找到js_cocos2dx_CCMenuItemImage_create函数。
37 38 39 40 41 42 43 44 45 46 | // "create" in JS JSBool js_cocos2dx_CCMenuItemImage_create(JSContext *cx, uint32_t argc, jsval *vp) { if (argc >= 2 && argc <= 5) { jsval *argv = JS_ARGV(cx, vp); JSStringWrapper arg0(argv[0]); JSStringWrapper arg1(argv[1]); JSStringWrapper arg2; bool thirdArgIsString = true ; if (argc >= 3) { thirdArgIsString = argv[2].isString(); arg2.set(argv[2], cx); last = 3; } } jsThis = argv[last]; } } else { linux系统使用yum仓库出现的错误总结 阅读原文» linux系统使用yum仓库出现的错误总结 1.用yum安装软件出现磁盘空间满 [root@node1 ~]# yum install ftp --安装软件出现错误 ................................... Error Downloading Packages: ftp-0.17-53.el6.i686: Insufficient space in download directory /var/cache/yum/i386/6/c6-tong/packages * free 0 * needed 56 k [root@node1 ~]# 图: 解决方法: [root@node1 ~]# df -h --查看磁盘空间,空间已满 文件系统 容量 已用 可用 已用%% 挂载点 /dev/mapper/VolGroup-lv_root 6.5G 6.1G 0 100% / --根分区空间已满,清除文件 tmpfs 504M 0 504M 0% /dev/shm /dev/sda1 485M 46M 414M 10% /boot /dev/sr0 3.6G 3.6G 0 100% /mnt [root@node1 home]# df -h --清除后的结果 文件系统 容量 已用 可用 已用%% 挂载点 /dev/mapper/VolGroup-lv_root 6.5G 1.9G 4.2G 31% / tmpfs 504M 0 504M 0% /dev/shm /dev/sda1 485M 46M 414M 10% /boot /dev/sr0 3.6G 3.6G 0 100% /mnt [root@node1 home]# 测试结果: [root@node1 home]# yum install ftp --安装成功 Loaded plugins: fastestmirror Determining fastest mirrors c6-tong ........................................ Running Transaction Installing : ftp-0.17-53.el6.i686 1/1 Verifying : ftp-0.17-53.el6.i686 1/1 Installed: ftp.i686 0:0.17-53.el6 Complete! [root@node1 home]# 2.用yum使用网络源,出现网络不通 [root@node1 yum.repos.d]# yum install squid Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=6&arch=i386&repo=os error was 14: PYCURL ERROR 6 - "Couldn't resolve host 'mirrorlist.centos.org'" Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=6&arch=i386&repo=centosplus error was 14: PYCURL ERROR 6 - "Couldn't resolve host 'mirrorlist.centos.org'" ^C^C^C^Z [1]+ Stopped yum install squid [root@node1 yum.repos.d]# ping www.baidu.com ^C 解决方法:(检查网络) 测试结果: 3.使用yum安装软件包出现进程占用 解决方法: 测试结果: Linux搭建网络源:http://tongcheng.blog.51cto.com/6214144/1338949 Linux搭建本地源:http://tongcheng.blog.51cto.com/6214144/1338876 本文出自 "一起走过的日子" 博客,谢绝转载!
订阅:
博文评论 (Atom)
|
没有评论:
发表评论