因为要求使用JS,所以着手使用JS进行学习,前端时间大概看了一遍权威指南,感觉一知半解啊,好吧,计划上也是这个效果。在实际学习中一步步学习吧。
先看到关于简化版的js对类的三个属性的实现,权威指南讲得更加深入,但是看不懂权威指南的。以下是链接。
三生石
http://www.cnblogs.com/sanshi/archive/2009/07/08/1519036.html
其中的笔记:
hasOwnProperty:是用来判断一个对象是否有你给出名称的属性或对象。不过需要注意的是,此方法无法检查该对象的原型链中是否具有该属性,该属性必须是对象本身的一个成员。
isPrototypeOf是用来判断要检查其原型链的对象是否存在于指定对象实例中,是则返回true,否则返回false。
针对原型链介绍图解
http://www.jb51.net/article/30750.htm
再来理解constructor。
当定义一个prototype的时候,会构造一个原形对象,这个原型对象存储于构造这个prototype的函数的原形方法之中.
详细出处参考:http://www.jb51.net/article/30750.htm
http://www.cnblogs.com/jenry/archive/2010/12/08/1900150.html
存在一个疑问。
关于原型的好文章
摘下这段话,感觉不明白,去问老大。
Class.extend = function(prop) { // 这个地方很是迷惑人,还记得我在本系列的第二篇文章中提到的么 // - this具体指向什么不是定义时能决定的,而是要看此函数是怎么被调用的 // - 我们已经知道extend肯定是作为方法调用的,而不是作为构造函数 // - 所以这里this指向的不是Object,而是Function(即是Class),那么this.prototype就是父类的原型对象 // - 注意:_super指向父类的原型对象,我们会在后面的代码中多次碰见这个变量
- var _super = this.prototype;
- var MyNode = cc.Node.extend({
- var _super = this.prototype;
- ...
- });
注意!脚本语言有一个特点,如果函数运行失败了,则该函数后面的函数(在同一作用域中的)都会跳过执行。
Cocos2d-x引擎经常出现的错误提示Invalid Native Object。底层C++对象被回收了,所以找不到了。
现在开始学习cocos2d-x的源代码例子。
首先是moonwarrios文件
从cc.xxx派生出来的类要在构造函数ctor中associateWithNative 绑定,下面方法添加到jsb启动文件后可以和CH5通用;
cc.associateWithNative = function( jsobj, superclass ) {
var native = new superclass();
__associateObjWithNative( jsobj, native );
};
与到两个问题,在#include "ScriptingCore.h"等代码中无法找到相关文件的错误。错误原因是附加包含目录没有被包含进来,解决方案是在项目属性里面设置,添加包含目录。出现错误的原理正在挖,等下一起解释。后面同时报错,LNK2019 无法识别外部符号,问题是明明已经进行头文件引用了,而且还可以找到这个函数的定义,为什么还是无法找到这个函数。
http://msdn.microsoft.com/zh-cn/library/799kze2z.aspx
链接器简易原理概念
http://blog.sina.com.cn/s/blog_5f8817250100i3oz.html
我的问题在于引用头文件,但是并没有对头文件下的cpp文件进行编译成obj文件。因为之前使用的引擎很多文件其实已经编译成为库文件了,而这个文件并没有编译成为obj文件,具体问题再去问老大。Mark一下,后面做补充。
好的,运行成功js项目,给我的经验除了学到的知识外,感觉没有教程后才能逼迫自己去挖下面的知识,去理解其中的知识。
例子运行起来,后面看到使用一个错误的使用了一个变量都没报错。。。。js啊
遇到一个全局变量,定义了一个winsize,下面做个全局变量的笔记
js中 允许在定义变量的时候 不加var 修饰符。 js会在当前作用域下寻找上下文是否定义了此变量, 如果没有找到则会为这个变量分配内存。 当且将其视为window的成员。 也就是全局变量。
如果加了var 修饰符。 js会重新为这个变量分配内存,不论当前上下文中是否已经定义过了。 这个变量的作用域就为当前上下文。 即局部变量。
脚本写东西,编译就是快啊,原因主要还是不需要去编译底层的C++文件,就相当于更改了一下资源里面的图片文件,然后再编译。用起来还真是简单,不过去看过他底层的实现,感觉还是不简单,首先js实现继承机制,cocos2d-x采用的是simple javascript,大概思想是Reg大神提供的思想。后面编写多了再去回味,现在有很多东西看不懂为何如此,不理解他的优雅。
非常悲剧的是,正好要把写的例子编译的时候,电脑死机了,根本开不了,五一都放假了,只能等到放假结束送去维修,个人估计是硬盘坏了。
所以用另一台电脑配环境,继续游戏开发练习。
配环境中遇到一个问题,关于coff文件的问题,解决方案在这里:
http://www.eoeandroid.com/thread-308257-1-1.html
不懂原理,后面找到静态库和动态库等文件,再统一学习。
好的,开一个cocos2d-x for js打地鼠的例子。
链接新开: