【Cocos2dX(2.x)_Lua开发之三】在Lua中使用自定义精灵(Lua脚本与自创建类之间的访问)及Lua基础讲解

本站文章均为李华明Himi原创,转载务必在明显处注明:(作者新浪微博:@李华明Himi )
转载自【黑米GameDev街区】
原文链接: http://www.himigame.com/lua-game/985.html


          ☞ 点击订阅 ☜
本博客最新动态!及时将最新博文通知您!

                 

分享
 

本篇做起来比较累,大家请参考最新篇【COCOS2DX-LUA 脚本开发之四】使用tolua++编译pkg,从而创建自定义类让Lua脚本使用

此篇可能会在最新的cocos2dx版本中出现如下问题:

1
2
LUA ERROR: ...24F82-1230-41FE-8A04-C445FB7D1BAB/mtet.app/hello.lua:35:
 error in function 'addChild'. argument #2 is 'MySprite'; 'CCNode' expected.

最近Himi都没有更新博文了,其实也是犹豫写本cocos2d(x)引擎书籍在做准备,目录的草稿都写好了,目录中包含的大家最感兴趣的cocos2d/x动作编辑器的详细制作流程与源码! 但是遗憾的是Himi还是腾不出时间去写;

放弃去写的另外一个原因就是因为支持我的童鞋门,在7月份就说过要为大家奉上关于cocos2dx-lua的系列教程,但是一直由于时间等问题一再拖到现在,如果Himi真要准备写书估计半年内都基本很难有时间更新博客的,当然也考虑到公司项目,最终放弃; 

顺便说一句,关于Himi9个技术群,不论是cocos2d-iphone、cocos2dx、android还是以后陆续公布的Unity3D群,周期性的Himi和管理员们会定期清理(一切都是为了更多想学习的新童鞋考虑),希望大家进群冒泡,积极讨论。好了,废话就不多说了,从今天开始Himi为童鞋们出cocos2dx-lua的系列开发教程,希望大家还一如既往得支持;3Q 

Himi 当前开发工具等版本如下:

mac: 10.8      xcode:4.4.1       cocos2dx :cocos2d-2.0-rc2-x-2.0.1

本篇介绍两个知识点:  1. Lua基础         2.在lua脚本中使用我们自定义的精灵类

一:lua基础

关于Lua的其实很早前Himi写过一篇关于cocos2dx-Lua 的基础博文了,但是是cocos2dx 1.x版本的,对于不是很熟悉的童鞋,Himi还是建议去看一看,连接:【iOS-cocos2d-X 游戏开发之八】在Cocos2dX游戏中使用Lua脚本进行游戏开发(基础篇)并介绍脚本在游戏中详细用途! Himi以后更新的Lua系列都是基于Cocos2dx 2.x版本的了。

二:在lua脚本中使用我们自定义的精灵类

首先创建cocos2dx-lua项目,然后在项目中添加我们的自定义精灵类:这里Himi类名为:HSprite

HSprite.h:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//
//  HSprite.h
//  cocos2dx_lua_tests_by_Himi
//
//  Created by Himi on 12-8-30.
//
//
 
#ifndef cocos2dx_lua_tests_by_Himi_HSprite_h
#define cocos2dx_lua_tests_by_Himi_HSprite_h
 
#include "cocos2d.h"
using namespace cocos2d;
 
class HSprite : public cocos2d::CCSprite{
 
public:
    static HSprite* createHSprite(const char* _name);
    void hspriteInit();
};
#endif

HSprite.cpp:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//
//  HSprite.cpp
//  cocos2dx_lua_tests_by_Himi
//
//  Created by Himi on 12-8-30.
//
//
 
#import "HSprite.h"
 
HSprite* HSprite::createHSprite(const char* _name){
    HSprite* sp = new HSprite();
    if(sp && sp->initWithFile(_name)){
        sp->hspriteInit();
        sp->autorelease();
        return sp;
    }
    CC_SAFE_DELETE(sp);
    return NULL;
}
 
void HSprite::hspriteInit(){
    CCMessageBox("create HSprite success", "Himi_Lua");
}

以上代码不做解释了,很简单,继承CCSprite,添加一个自动释放的创建函数(createHSprite)以及一个自定义初始化函数(hspriteInit)

下面我们打开LuaCocos2d.cpp 类,这个类在项目的 libs/lua/cocos2dx_support目录下,如下图:

然后开始添加我们自定义精灵类,让Lua脚本能认识它;

 步骤分为3步:

 1. 注册我们的自定义类:

在LuaCocos2d.cpp类中搜索“tolua_reg_types”这个函数,然后在其中进行注册:

1
tolua_usertype(tolua_S,"HSprite");

如下图所示:

第二步:声明我们自定义类的函数:

搜索“tolua_Cocos2d_open”这个函数,然后在其中添加如下代码:

1
2
3
4
tolua_cclass(tolua_S, "HSprite", "HSprite", "CCSprite", NULL);
    tolua_beginmodule(tolua_S,"HSprite");
    tolua_function(tolua_S,"createHSprite",tolua_Himi_HSprite_createHSrpite00);
    tolua_endmodule(tolua_S);

如下图:

这里开始解释:

首先定义能让脚本认识的类函数,遵循如下:

a)  tolua_cclass(tolua_S, “HSprite”, “HSprite”, “CCSprite”, NULL);

tolua_cclass声明哪个类函数,第一个状态值默认:tolua_S

后两个参数:是自定义类类名

再往后是继承的父类类名

b)添加参数开始声明:

tolua_beginmodule(tolua_S,”HSprite”);

c)  添加自定类函数:

tolua_function(tolua_S,”createHSprite”,tolua_Himi_HSprite_createHSrpite00);

第一个参数默认,第二个参数自定义类名,第三个:实现脚本与自定义类之间的转换实现函数

注意,这里有多个函数,可以继续写;

d) 结束自定义函数:

tolua_endmodule(tolua_S);

第三步:实现我们的脚本之间转换函数  tolua_Himi_HSprite_createHSrpite00

实现如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/* method: create of class  HSprite */
#ifndef TOLUA_DISABLE_tolua_Himi_HSprite_createHSrpite00
static int tolua_Himi_HSprite_createHSrpite00(lua_State* tolua_S)
{
#ifndef TOLUA_RELEASE
    tolua_Error tolua_err;
    if (
        !tolua_isusertable(tolua_S,1,"HSprite",0,&tolua_err) ||
        !tolua_isstring(tolua_S,2,0,&tolua_err) ||
        !tolua_isnoobj(tolua_S,3,&tolua_err)
        )
        goto tolua_lerror;
    else
#endif
    {
        const char* pszFileName = ((const char*)  tolua_tostring(tolua_S,2,0));
        {
            HSprite* tolua_ret = (HSprite*)  HSprite::createHSprite(pszFileName);
            int nID = (tolua_ret) ? tolua_ret->m_uID : -1;
            int* pLuaID = (tolua_ret) ? &tolua_ret->m_nLuaID : NULL;
            tolua_pushusertype_ccobject(tolua_S, nID, pLuaID, (void*)tolua_ret,"HSprite");
        }
    }
    return 1;
#ifndef TOLUA_RELEASE
tolua_lerror:
    tolua_error(tolua_S,"#ferror in function 'create'.",&tolua_err);
    return 0;
#endif
}
#endif //#ifndef TOLUA_DISABLE

如下图所示:

这里Himi解释下:

童鞋们可以从第 384行的 #endif 把这个实现函数分为两部分来看,

首先是375~384之间的代码:

1
2
3
4
5
6
7
8
9
10
#ifndef TOLUA_RELEASE
    tolua_Error tolua_err;
    if (
        !tolua_isusertable(tolua_S,1,"HSprite",0,&tolua_err) ||
        !tolua_isstring(tolua_S,2,0,&tolua_err) ||
        !tolua_isnoobj(tolua_S,3,&tolua_err)
        )
        goto tolua_lerror;
    else
#endif

这里是对参数类型的判断:

tolua_isusertable  是否为”第三个参数”自定义类型

tolua_isstring  是否为字符串类型

tolua_isnoobj  结束(没有参数的判断)

然后是386~392之间的代码段:

1
2
3
4
5
6
7
const char* pszFileName = ((const char*)  tolua_tostring(tolua_S,2,0));
        {
            HSprite* tolua_ret = (HSprite*)  HSprite::createHSprite(pszFileName);
            int nID = (tolua_ret) ? tolua_ret->m_uID : -1;
            int* pLuaID = (tolua_ret) ? &tolua_ret->m_nLuaID : NULL;
            tolua_pushusertype_ccobject(tolua_S, nID, pLuaID, (void*)tolua_ret,"HSprite");
        }

这里是对脚本代码的解析从而调用的自定义创建的函数

最后我们修改  hello2.lua  脚本中的代码:(创建cocos2dx-lua项目默认Resources下自带的文件)

在脚本最后”– run”下代码修改如下:

1
2
3
4
5
6
-- run
local sceneGame = CCScene:create()
-- sceneGame:addChild(createLayerFram())
-- sceneGame:addChild(createLayerMenu())
sceneGame:addChild(createHimiLayer())
CCDirector:sharedDirector():runWithScene(sceneGame)

这里Himi注视了另个layer的添加,添加了自己的Layer

1
sceneGame:addChild(createHimiLayer())

然后将Himi自定义方法添加在脚本中,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
local function createHimiLayer()
    local layerH = CCLayer:create()
 
    local _font = CCLabelTTF:create("Himi_(cocos2dx-Lua)教程","Arial",33)
    _font:setPosition(230,280)
    layerH:addChild(_font)
 
    --创建自定义类型精灵
    local hsprite = HSprite:createHSprite("himi.png")
    hsprite:setPosition(100,100)
    hsprite:setScale(1.5)
    hsprite:setRotation(45)
    layerH:addChild(hsprite)
    return layerH
end

创建自己定义的精灵,然后进行调用缩放,旋转,设置坐标函数。

ok,运行后的接图如下:

本站文章均为李华明Himi原创,转载务必在明显处注明:(作者新浪微博:@李华明Himi )
转载自【黑米GameDev街区】
原文链接: http://www.himigame.com/lua-game/985.html


          ☞ 点击订阅 ☜
本博客最新动态!及时将最新博文通知您!

                 

分享
 

本篇做起来比较累,大家请参考最新篇【COCOS2DX-LUA 脚本开发之四】使用tolua++编译pkg,从而创建自定义类让Lua脚本使用

此篇可能会在最新的cocos2dx版本中出现如下问题:

1
2
LUA ERROR: ...24F82-1230-41FE-8A04-C445FB7D1BAB/mtet.app/hello.lua:35:
 error in function 'addChild'. argument #2 is 'MySprite'; 'CCNode' expected.

最近Himi都没有更新博文了,其实也是犹豫写本cocos2d(x)引擎书籍在做准备,目录的草稿都写好了,目录中包含的大家最感兴趣的cocos2d/x动作编辑器的详细制作流程与源码! 但是遗憾的是Himi还是腾不出时间去写;

放弃去写的另外一个原因就是因为支持我的童鞋门,在7月份就说过要为大家奉上关于cocos2dx-lua的系列教程,但是一直由于时间等问题一再拖到现在,如果Himi真要准备写书估计半年内都基本很难有时间更新博客的,当然也考虑到公司项目,最终放弃; 

顺便说一句,关于Himi9个技术群,不论是cocos2d-iphone、cocos2dx、android还是以后陆续公布的Unity3D群,周期性的Himi和管理员们会定期清理(一切都是为了更多想学习的新童鞋考虑),希望大家进群冒泡,积极讨论。好了,废话就不多说了,从今天开始Himi为童鞋们出cocos2dx-lua的系列开发教程,希望大家还一如既往得支持;3Q 

Himi 当前开发工具等版本如下:

mac: 10.8      xcode:4.4.1       cocos2dx :cocos2d-2.0-rc2-x-2.0.1

本篇介绍两个知识点:  1. Lua基础         2.在lua脚本中使用我们自定义的精灵类

一:lua基础

关于Lua的其实很早前Himi写过一篇关于cocos2dx-Lua 的基础博文了,但是是cocos2dx 1.x版本的,对于不是很熟悉的童鞋,Himi还是建议去看一看,连接:【iOS-cocos2d-X 游戏开发之八】在Cocos2dX游戏中使用Lua脚本进行游戏开发(基础篇)并介绍脚本在游戏中详细用途! Himi以后更新的Lua系列都是基于Cocos2dx 2.x版本的了。

二:在lua脚本中使用我们自定义的精灵类

首先创建cocos2dx-lua项目,然后在项目中添加我们的自定义精灵类:这里Himi类名为:HSprite

HSprite.h:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//
//  HSprite.h
//  cocos2dx_lua_tests_by_Himi
//
//  Created by Himi on 12-8-30.
//
//
 
#ifndef cocos2dx_lua_tests_by_Himi_HSprite_h
#define cocos2dx_lua_tests_by_Himi_HSprite_h
 
#include "cocos2d.h"
using namespace cocos2d;
 
class HSprite : public cocos2d::CCSprite{
 
public:
    static HSprite* createHSprite(const char* _name);
    void hspriteInit();
};
#endif

HSprite.cpp:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//
//  HSprite.cpp
//  cocos2dx_lua_tests_by_Himi
//
//  Created by Himi on 12-8-30.
//
//
 
#import "HSprite.h"
 
HSprite* HSprite::createHSprite(const char* _name){
    HSprite* sp = new HSprite();
    if(sp && sp->initWithFile(_name)){
        sp->hspriteInit();
        sp->autorelease();
        return sp;
    }
    CC_SAFE_DELETE(sp);
    return NULL;
}
 
void HSprite::hspriteInit(){
    CCMessageBox("create HSprite success", "Himi_Lua");
}

以上代码不做解释了,很简单,继承CCSprite,添加一个自动释放的创建函数(createHSprite)以及一个自定义初始化函数(hspriteInit)

下面我们打开LuaCocos2d.cpp 类,这个类在项目的 libs/lua/cocos2dx_support目录下,如下图:

然后开始添加我们自定义精灵类,让Lua脚本能认识它;

 步骤分为3步:

 1. 注册我们的自定义类:

在LuaCocos2d.cpp类中搜索“tolua_reg_types”这个函数,然后在其中进行注册:

1
tolua_usertype(tolua_S,"HSprite");

如下图所示:

第二步:声明我们自定义类的函数:

搜索“tolua_Cocos2d_open”这个函数,然后在其中添加如下代码:

1
2
3
4
tolua_cclass(tolua_S, "HSprite", "HSprite", "CCSprite", NULL);
    tolua_beginmodule(tolua_S,"HSprite");
    tolua_function(tolua_S,"createHSprite",tolua_Himi_HSprite_createHSrpite00);
    tolua_endmodule(tolua_S);

如下图:

这里开始解释:

首先定义能让脚本认识的类函数,遵循如下:

a)  tolua_cclass(tolua_S, “HSprite”, “HSprite”, “CCSprite”, NULL);

tolua_cclass声明哪个类函数,第一个状态值默认:tolua_S

后两个参数:是自定义类类名

再往后是继承的父类类名

b)添加参数开始声明:

tolua_beginmodule(tolua_S,”HSprite”);

c)  添加自定类函数:

tolua_function(tolua_S,”createHSprite”,tolua_Himi_HSprite_createHSrpite00);

第一个参数默认,第二个参数自定义类名,第三个:实现脚本与自定义类之间的转换实现函数

注意,这里有多个函数,可以继续写;

d) 结束自定义函数:

tolua_endmodule(tolua_S);

第三步:实现我们的脚本之间转换函数  tolua_Himi_HSprite_createHSrpite00

实现如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/* method: create of class  HSprite */
#ifndef TOLUA_DISABLE_tolua_Himi_HSprite_createHSrpite00
static int tolua_Himi_HSprite_createHSrpite00(lua_State* tolua_S)
{
#ifndef TOLUA_RELEASE
    tolua_Error tolua_err;
    if (
        !tolua_isusertable(tolua_S,1,"HSprite",0,&tolua_err) ||
        !tolua_isstring(tolua_S,2,0,&tolua_err) ||
        !tolua_isnoobj(tolua_S,3,&tolua_err)
        )
        goto tolua_lerror;
    else
#endif
    {
        const char* pszFileName = ((const char*)  tolua_tostring(tolua_S,2,0));
        {
            HSprite* tolua_ret = (HSprite*)  HSprite::createHSprite(pszFileName);
            int nID = (tolua_ret) ? tolua_ret->m_uID : -1;
            int* pLuaID = (tolua_ret) ? &tolua_ret->m_nLuaID : NULL;
            tolua_pushusertype_ccobject(tolua_S, nID, pLuaID, (void*)tolua_ret,"HSprite");
        }
    }
    return 1;
#ifndef TOLUA_RELEASE
tolua_lerror:
    tolua_error(tolua_S,"#ferror in function 'create'.",&tolua_err);
    return 0;
#endif
}
#endif //#ifndef TOLUA_DISABLE

如下图所示:

这里Himi解释下:

童鞋们可以从第 384行的 #endif 把这个实现函数分为两部分来看,

首先是375~384之间的代码:

1
2
3
4
5
6
7
8
9
10
#ifndef TOLUA_RELEASE
    tolua_Error tolua_err;
    if (
        !tolua_isusertable(tolua_S,1,"HSprite",0,&tolua_err) ||
        !tolua_isstring(tolua_S,2,0,&tolua_err) ||
        !tolua_isnoobj(tolua_S,3,&tolua_err)
        )
        goto tolua_lerror;
    else
#endif

这里是对参数类型的判断:

tolua_isusertable  是否为”第三个参数”自定义类型

tolua_isstring  是否为字符串类型

tolua_isnoobj  结束(没有参数的判断)

然后是386~392之间的代码段:

1
2
3
4
5
6
7
const char* pszFileName = ((const char*)  tolua_tostring(tolua_S,2,0));
        {
            HSprite* tolua_ret = (HSprite*)  HSprite::createHSprite(pszFileName);
            int nID = (tolua_ret) ? tolua_ret->m_uID : -1;
            int* pLuaID = (tolua_ret) ? &tolua_ret->m_nLuaID : NULL;
            tolua_pushusertype_ccobject(tolua_S, nID, pLuaID, (void*)tolua_ret,"HSprite");
        }

这里是对脚本代码的解析从而调用的自定义创建的函数

最后我们修改  hello2.lua  脚本中的代码:(创建cocos2dx-lua项目默认Resources下自带的文件)

在脚本最后”– run”下代码修改如下:

1
2
3
4
5
6
-- run
local sceneGame = CCScene:create()
-- sceneGame:addChild(createLayerFram())
-- sceneGame:addChild(createLayerMenu())
sceneGame:addChild(createHimiLayer())
CCDirector:sharedDirector():runWithScene(sceneGame)

这里Himi注视了另个layer的添加,添加了自己的Layer

1
sceneGame:addChild(createHimiLayer())

然后将Himi自定义方法添加在脚本中,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
local function createHimiLayer()
    local layerH = CCLayer:create()
 
    local _font = CCLabelTTF:create("Himi_(cocos2dx-Lua)教程","Arial",33)
    _font:setPosition(230,280)
    layerH:addChild(_font)
 
    --创建自定义类型精灵
    local hsprite = HSprite:createHSprite("himi.png")
    hsprite:setPosition(100,100)
    hsprite:setScale(1.5)
    hsprite:setRotation(45)
    layerH:addChild(hsprite)
    return layerH
end

创建自己定义的精灵,然后进行调用缩放,旋转,设置坐标函数。

ok,运行后的接图如下:

 
 
 

【Cocos2dX(2.x)_Lua开发之三】的更多相关文章

  1. MVC5 网站开发之三 数据存储层功能实现

    数据存储层在项目Ninesky.DataLibrary中实现,整个项目只有一个类Repository.   目录 奔跑吧,代码小哥! MVC5网站开发之一 总体概述 MVC5 网站开发之二 创建项目 ...

  2. Windows7上搭建Cocos2d-x 3.1.1开发环境

    前言 现在,越来越多的公司采用Cocos2d-x 3.0来开发游戏了,但是现在这样的文章并不多,所以打算写一系列来帮助初学者快速掌握Cocos2d-x 3.0.首先就从开发环境的大家说起吧. 开发工具 ...

  3. Chrome扩展开发之三——Chrome扩展中的数据本地存储和下载

    目录: 0.Chrome扩展开发(Gmail附件管理助手)系列之〇——概述 1.Chrome扩展开发之一——Chrome扩展的文件结构 2.Chrome扩展开发之二——Chrome扩展中脚本的运行机制 ...

  4. [置顶] cocos2d-x 3.0游戏开发xcode5帅印博客教学 003.[HoldTail]游戏世界以及背景画面

    cocos2d-x 3.0游戏开发xcode5帅印博客教学 003.[HoldTail]游戏世界以及背景画面 写给大家的前言,在学习cocos2d-x的时候自己走了很多的弯路,也遇到了很多很多问题,不 ...

  5. [置顶] cocos2d-x 3.0游戏开发xcode5帅印博客教学 004.[HoldTail]主角的上下飞行跟移动

    cocos2d-x 3.0游戏开发xcode5帅印博客教学 004.[HoldTail]主角的上下飞行跟移动 写给大家的前言,在学习cocos2d-x的时候自己走了很多的弯路,也遇到了很多很多问题,不 ...

  6. Cocos2d-x 3.1.1开发环境

    Windows7上搭建Cocos2d-x 3.1.1开发环境   前言 现在,越来越多的公司采用Cocos2d-x 3.0来开发游戏了,但是现在这样的文章并不多,所以打算写一系列来帮助初学者快速掌握C ...

  7. 多线程开发之三 GCD

    NSThread.NSOperation.GCD 总结: 无论使用哪种方法进行多线程开发,每个线程启动后并不一定立即执行相应的操作,具体什么时候由系统调度(CPU 空闲时就会执行) 更新 UI 应该在 ...

  8. osx下配置Cocos2d-x 3.x Android开发环境

    配置前需要准备的 首先需要看一下官网文档 http://www.cocos.com/doc/article/index?type=cocos2d-x&url=/doc/cocos-docs-m ...

  9. cocos2d-x 2.2 wp8 开发手记

    最近有朋友问我有没有搞过  wp8 的cocos2dx开发 回复:额,没有.(感觉超没面子对方是妹子 = = ) 本着帮妹子试试的态度  就开始了 今天工作 第一我印象中wp8 开发必须要用 vs20 ...

随机推荐

  1. 洛谷 P1049 装箱问题【正难则反/01背包】

    题目描述 有一个箱子容量为V(正整数,0<=V<=20000),同时有n个物品(0<n<=30,每个物品有一个体积(正整数). 要求n个物品中,任取若干个装入箱内,使箱子的剩余 ...

  2. HDU 1863 畅通工程 最小生成树

    思路: 比较典型的最小生成树的题目了..在这里用求最小生成树的经典算法K(Kruskal)算法和P(Prim)算法.我的 K 算法用的是结构体来存图,P 算法用的是邻接矩阵来存图,K算法的复杂度是O( ...

  3. linux安装mysql数据库(5.7之前的版本)

    到mysql官网下载mysql编译好的二进制安装包   解压32位安装包: 进入安装包所在目录,执行命令:tar mysql-5.6.17-linux-glibc2.5-i686.tar.gz   复 ...

  4. java随机打乱集合顺序

    public static void main(String[] args) { List <Integer> intList = new ArrayList<Integer> ...

  5. 【Linux】CentOS7上安装搜狗输入法

    找到一篇资料,提供安装搜狗输入法的方法,在http://www.cnblogs.com/Yiutto/p/6204085.html[也是本文的参考原地址] 请大家自行下载fcitx.tar.gz 1. ...

  6. 无法通过windows installer服务安装此安装程序包。您必须安装带有更新版本windows Installer服务的Windows

    无法通过windows installer服务安装此安装程序包.您必须安装带有更新版本windows installer服务的Windows 出现这个问题不让安装程序,可以到微软网站更新Windows ...

  7. json格式在线解析

    地址:https://www.bejson.com/ { "PN": "123456", "DomainName": ".gxyc ...

  8. 损失函数(loss function)

    通常而言,损失函数由损失项(loss term)和正则项(regularization term)组成.发现一份不错的介绍资料: http://www.ics.uci.edu/~dramanan/te ...

  9. 码云的GIT操作

    git操作 git initgit add .git commit -m ""git remote add origin https://git.coding.net/jessei ...

  10. Android Fragment 真正的完全解析

    出处: 自从Fragment出现,曾经有段时间,感觉大家谈什么都能跟Fragment谈上关系,做什么都要问下Fragment能实现不~~~哈哈,是不是有点过~~~ 本篇博客力求为大家说明Fragmen ...