Cocos2d-x开源、跨平台的游戏引擎
一、下载
http://cocos2d-x.org/projects/cocos2d-x/wiki/Download
二、安装 环境:Ubuntu 12.04.1 32bit
$ mkdir /path/to/cocos2d-x
$ mv cocos2d-2.0-rc2-x-2.0.1.zip /path/to/cocos2d-x
$ cd /path/to/cocos2d-x
$ unzip cocos2d-2.0-rc2-x-2.0.1.zip
$ subl ~/.bashrc
export COCOS2DX_ROOT=/path/to/cocos2d-x
export NDK_ROOT=/path/to/android-ndk-r8b // 需要Android Ndk环境
三、HelloWorld 需要有Android SDK环境与Ant,点击查看
$ cd $COCOS2DX_ROOT/HelloWorld/proj.android
$ chmod u+x build_native.sh
$ ./build_native.sh // 编译库
$ android update project -p . -t android-10 // 生成Ant需要的build.xml文件
$ ant debug install // 安装到机器上
四、Cocds2d-x基础
主要类介绍
类 | 说明 | 作用 | 关系 |
---|---|---|---|
CCDirector |
导演(单例) | 负责场景的切换以及场景的信息。如宽度,高度,旋转场景内容。 | 包含多个 CCScene |
CCScene |
场景 | 场景包含有布景,精灵,每场戏的不同,要切换场景。游戏中可分为主界面, 游戏, 分数榜,结束界面等。 | 包含多个 CCLayer |
CCLayer |
布景 | 类似是层的概念,也可来源于PS的层的概念。每一层都带有众多精灵等 | 包含多个 CCSprite |
CCSprite |
精灵 | 就是演员的,演员就需要加入到层里面去的。有相应的动作。 | 包含多个 CCAction |
CCAction |
动作 | 精灵的动作。 | |
CCMenu |
菜单 |
场景的转换
CCScene* scene =CCScene::node();// 创建sceneCCLayer* layer =CCLayer::node();// 创建layer
scene->addChild(layer);// 添加layer到sceneCCScene* preScene =CCDirector::ShareDirector()->getRunningScene();// 获取当前正在显示的场景if(preScene ==null){// 如果当前没有正在显示的场景CCDirecotr::ShareDirector()->runWithScene(scene);// 显示myScene场景}else{// 否则CCDirecotr::ShareDirector()->replaceScene(scene);// 替换成myScene场景}
常见宏
NS_CC_BEGIN
// cocos2d命名空间开始
NS_CC_END
// cocos2d命名空间结束
USING_NS_CC;// 声明cocos2d命名空间
CC_SYNTHESIZE_READONLY(varType, varName, funName)// 声明一个成员变量以及getfunName函数,没有set函数。getfunName已经实现,其实现就是返回这个值。
CC_SYNTHESIZE_READONLY_PASS_BY_REF(varType, varName, funName)// 类似CC_SYNTHESIZE_READONLY,不过getfunName返回的是引用。
CC_SYNTHESIZE(varType, varName, funName)// 声明一个成员变量以及getfunName,setfunName函数.函数声明和实现都有
CC_SYNTHESIZE_PASS_BY_REF(varType, varName, funName)// 类似CC_SYNTHESIZE,不过getfunName返回的是引用。
CC_PROPERTY_READONLY(varType, varName, funName)// 声明一个成员变量以及getfunName函数,没有set函数。getfunName函数的实现要自己做
CC_PROPERTY_READONLY_PASS_BY_REF(varType, varName, funName)// 类似CC_PROPERTY_READONLY,不过getfunName返回的是引用。getfunName函数的实现要自己做
CC_PROPERTY(varType, varName, funName)// 声明一个成员变量以及getfunName,setfunName函数.函数实现要自己做
CC_PROPERTY_PASS_BY_REF(varType, varName, funName)// 类似CC_PROPERTY,,不过getfunName返回的是引用
4.1 动作
CCAction
:动作,分为瞬时动作 CCActionInstanse
,延时动作 CCActionInterval
动作 | 说明 | 构造 CCActionInterval |
参数说明 |
---|---|---|---|
CCMoveTo |
移动到目标位置 | CCMoveTo::actionWithDuration(2, ccp(100, 100)) |
时间,位置 |
CCMoveBy |
从目标位置移动 | CCMoveBy::actionWithDuration(2, ccp(100, 100)) |
时间,位置 |
CCScaleTo |
缩放至多少倍 | CCScaleTo::actionWithDuration(2, 0.5f) |
时间,倍数(x、Y柚同时缩放) |
CCScaleBy |
放大至多少倍 | CCScaleBy::actionWithDuration(2, 2f, 3f) |
时间,x柚放大倍数,Y柚放大倍数 |
CCRotateTo |
旋转多少角度 | CCRotateTo::actionWithDuration(2, 45f) |
时间,角度(正数顺时间,负数逆时针) |
CCRotateBy |
旋转多少角度 | CCRotateBy::actionWithDuration(2, 360f) |
时间,角度(正数顺时间,负数逆时针) |
CCSkewTo |
倾斜 | CCSkewTo::actionWithDuration(2, 37.2f, -37.2f) |
时间,X柚倾斜角度,Y柚倾斜角度 |
CCSkewBy |
倾斜 | CCSkewBy::actionWithDuration(2, 37.2f, -37.2f) |
时间,X柚倾斜角度,Y柚倾斜角度 |
CCJumpTo |
跳跃 | CCJumpTo::actionWithDuration(2, ccp(300,300), 50, 4) |
时间,目标坐标,跳的高度,跳的次数 |
CCJumpBy |
跳跃 | CCJumpBy::actionWithDuration(2, ccp(300,300), 50, 4) |
时间,目标坐标,跳的高度,跳的次数 |
CCBezierTo |
贝塞尔曲线运行 | CCBezierTo::actionWithDuration(3, bezier) |
时间,ccBezierConfig 注结构体 |
CCBezierBy |
贝塞尔曲线运行 | CCBezierBy::actionWithDuration(3, bezier) |
时间,ccBezierConfig 结构体 |
CCBlink |
闪 | CCBlink::actionWithDuration(2, 10) |
时间,次数 |
CCFadeIn |
淡入 | CCFadeIn::actionWithDuration(1.0f) |
时间 |
CCFadeOut |
淡出 | CCFadeOut::actionWithDuration(1.0f) |
时间 |
CCTintTo |
颜色变化 | CCTintTo::actionWithDuration(2, 255, 0, 255) |
时间,红,绿,蓝 |
CCTintBy |
颜色变化 | CCTintBy::actionWithDuration(2, 255, 0, 255) |
时间,红,绿,蓝 |
CCAnimate |
动画 | CCAnimate::actionWithDuration(3, animation, false) |
时间,CCAnimation 注,是否恢复原始帧 |
动作组合方式 | 说明 | 构造 CCAction |
参数 |
---|---|---|---|
CCSequence |
动作序列,有序地一个一个执行动作 | CCSequence::actions(actionTo, actionToBack, NULL) |
动作1、运作2、…、后面必须加NULL表示没有了 |
CCRepeatForever |
重复执行动作 | CCRepeatForever::actionWithAction(actionTo) |
动作 |
CCSpawn |
同时执行动作 | CCSpawn::actions(actionTo, actionToBack, NULL) |
动作1、运作2、…、后面必须加NULL表示没有了 |
动作回调 | 说明 | 构造 | 参数 |
---|---|---|---|
CCCallFunc |
不带参数的回调 | CCCallFunc::actionWithTarget(this, callfunc_selector(Class::callback1)) |
当前动作,回调函数注 |
CCCallFuncN |
不带参数但带调用本身 | CCCallFuncN::actionWithTarget(this, callfuncN_selector(Class::callback2)) |
当前动作,回调函数注 |
CCCallFuncND |
带参数的回调 | CCCallFuncND::actionWithTarget(this, callfuncND_selector(Class::callback3), (void*)0xbebabeba) |
当前动作,回调函数注 |
CCSize size =CCDirector::sharedDirector()->getWinSize();// 获取屏幕大小CCSprite* pSprite =CCSprite::spriteWithFile("HelloWorld.png");// 创建精灵CCActionInterval* actionTo =CCMoveTo::actionWithDuration(2,CCPointMake(size.width-40, size.height-40));
pSprite->runAction(actionTo);// 运行动作
4.2 菜单
CCMenu
:菜单,参考: http://www.cocos2d-x.org/reference/native-cpp/d1/da0/classcocos2d_1_1_c_c_menu.html
// 创建菜单ItemCCMenuItem* m1 =CCMenuItemFont::itemFromString("新游戏",this, menu_selector(MainLayer::onNewGame));// menu_selector为全局常量CCLabelBMFont* label =CCLabelBMFont::labelWithString("Enable AtlasItem","fonts/bitmapFontTest3.fnt");CCMenuItem* m2 =CCMenuItemLabel::itemWithLabel(label,this, menu_selector(MainLayer::onNewGame));// 通过Label创建ItemCCMenuItem* m3 =CCMenuItemAtlasFont// 通过CCSprite*spriteNormal =CCSprite::spriteWithFile("image.png",CCRectMake(0,23*2,115,23));CCSprite*spriteSelected =CCSprite::spriteWithFile("image.png",CCRectMake(0,23*1,115,23));CCSprite*spriteDisabled =CCSprite::spriteWithFile("image.png",CCRectMake(0,23*0,115,23));CCMenuItem* m4 =CCMenuItemSprite::itemFromNormalSprite(spriteNormal, spriteSelected, spriteDisabled,this,
menu_selector(MainLayer::onNewGame));CCMenuItem* m5 =CCMenuItemImage::itemFromNormalImage("image.png","imagep.png",this, menu_selector(MainLayer::onNewGame));CCMenuItem* m6 =CCMenuItemToggle::itemWithTarget(this, menu_selector(MainLayer::onNewGame),CCMenuItemFont::itemFromString("High"),CCMenuItemFont::itemFromString("Low"),...,
NULL);
m6->getSubItems()->addObject(CCMenuItemFont::itemFromString("33%"));
m6->setSelectedIndex(2);// 添加菜单Item到菜单中CCMenu* menu =CCMenu::menuWithItems(m1, m2, m3, m4, m5, m6, NULL);// 最后必须加NULLvoidMainLayer::onNewGame(CCObject* pSender){// 回调}
4.3 多层
CCLayerMultiplex
:多个层,参考: http://www.cocos2d-x.org/reference/native-cpp/d3/d7e/classcocos2d_1_1_c_c_layer_multiplex.html
CCLayer* pLayer1 =newMenuLayer1();CCLayer* pLayer2 =newMenuLayer2();CCLayer* pLayer3 =newMenuLayer3();CCLayer* pLayer4 =newMenuLayer4();CCLayerMultiplex* layer =CCLayerMultiplex::layerWithLayers(pLayer1, pLayer2, pLayer3, pLayer4, NULL);
addChild(layer,0); pLayer1->release();
pLayer2->release();
pLayer3->release();
pLayer4->release();CCDirector::sharedDirector()->replaceScene(this);// 切换((CCLayerMultiplex*)m_pParent)->switchTo(0);
4.4 进度条
CCProgressTimer
:进度条
type | 说明 |
---|---|
kCCProgressTimerTypeRadialCCW |
径向逆时针旋转 |
kCCProgressTimerTypeRadialCW |
径向顺时针旋转 |
kCCProgressTimerTypeHorizontalBarLR |
水平从左往右 |
kCCProgressTimerTypeHorizontalBarRL |
水平从右往左 |
kCCProgressTimerTypeVerticalBarBT |
垂直从下往上 |
kCCProgressTimerTypeVerticalBarTB |
垂直从上往下 |
CCProgressTimer* pt =CCProgressTimer::progressWithFile("image.png");
pt->setType(kCCProgressTimerTypeRadialCCW);
pt->setType(kCCProgressTimerTypeRadialCW);
pt->setType(kCCProgressTimerTypeHorizontalBarLR);
pt->setType(kCCProgressTimerTypeHorizontalBarRL);
pt->setType(kCCProgressTimerTypeVerticalBarBT);
pt->setType(kCCProgressTimerTypeVerticalBarTB);CCProgressTo* to =CCProgressTo::actionWithDuration(2,100);// 时间,百分比
pt->runAction(CCRepeatForever::actionWithAction(to));
4.5 场景转换
CCTransitionScene
:场景转换效果
效果 | 说明 | 方法 | 参数 |
---|---|---|---|
CCTransitionFade |
以颜色淡出淡入 | transitionWithDuration(时间, 场景, ccBLACK) |
ccc3(255,0,0) :三原色 |
CCTransitionFlipX |
水平翻转屏幕 | transitionWithDuration(时间, 场景, kOrientationRightOver) |
kOrientationLeftOver :从左往右 kOrientationRightOver :从右往左 |
CCTransitionFlipY |
垂直翻转屏幕 | transitionWithDuration(时间, 场景, kOrientationUpOver) |
kOrientationUpOver :从上往下 kOrientationDownOver :从下往上 |
CCTransitionFlipAngular |
角度翻转屏幕 | transitionWithDuration(时间, 场景, kOrientationRightOver) |
kOrientationLeftOver :从左下角往上 kOrientationRightOver :从右上角往下 |
CCTransitionZoomFlipX |
水平翻转并缩小/放大 | transitionWithDuration(时间, 场景, kOrientationRightOver) |
kOrientationLeftOver :从左(放大)往右 kOrientationRightOver :从右(放大)往左 |
CCTransitionZoomFlipY |
垂直翻转并缩小/放大 | transitionWithDuration(时间, 场景, kOrientationUpOver) |
kOrientationUpOver :从上(放大)往下 kOrientationDownOver :从下(放大)往上 |
CCTransitionZoomFlipAngular |
角度翻转并缩小/放大 | transitionWithDuration(时间, 场景, kOrientationRightOver) |
kOrientationLeftOver :从左下角(放大)往上 kOrientationRightOver :从右上角(放大)往下 |
CCTransitionShrinkGrow |
收缩出放大入 | transitionWithDuration(时间, 场景) |
|
CCTransitionRotoZoom |
转收缩出转放大入 | transitionWithDuration(时间, 场景) |
|
CCTransitionMoveInL |
从左移动入 | transitionWithDuration(时间, 场景) |
|
CCTransitionMoveInR |
从右移动入 | transitionWithDuration(时间, 场景) |
|
CCTransitionMoveInT |
从上移动入 | transitionWithDuration(时间, 场景) |
|
CCTransitionMoveInB |
从下移动入 | transitionWithDuration(时间, 场景) |
|
CCTransitionSlideInL |
从左平滑移入 | transitionWithDuration(时间, 场景) |
|
CCTransitionSlideInR |
从右平滑移入 | transitionWithDuration(时间, 场景) |
|
CCTransitionSlideInT |
从上平滑移入 | transitionWithDuration(时间, 场景) |
|
CCTransitionSlideInB |
从下平滑移入 | transitionWithDuration(时间, 场景) |
|
CCTransitionCrossFade |
交叉淡入两个场景 | transitionWithDuration(时间, 场景) |
|
CCTransitionPageTurn |
翻页 | transitionWithDuration(时间, 场景, 参数) |
true :合上 false :翻开 |
CCTransitionFadeTR |
往右上角马赛克退出 | transitionWithDuration(时间, 场景) |
|
CCTransitionFadeBL |
往左下角马赛克退出 | transitionWithDuration(时间, 场景) |
|
CCTransitionFadeUp |
往上角马赛克退出 | transitionWithDuration(时间, 场景) |
|
CCTransitionFadeDown |
往下角马赛克退出 | transitionWithDuration(时间, 场景) |
|
CCTransitionTurnOffTiles |
随机马赛克退出 | transitionWithDuration(时间, 场景) |
|
CCTransitionSplitRows |
基数行左,偶数行右退出 | transitionWithDuration(时间, 场景) |
|
CCTransitionSplitCols |
基数行上,偶数行下退出 | transitionWithDuration(时间, 场景) |
CCTransitionFade* tfScene =CCTransitionFade::transitionWithDuration(2,newCCScene(), ccBLACK);if(tfScene){CCDirector::sharedDirector()->replaceScene(pScene);}
4.6 效果
类 | 说明 | 静态函数 |
---|---|---|
CCShaky3D |
摇动的3D | CCShaky3D::actionWithRange(5, true, ccg(15,10), t) // 范围 是否摇动 网格大小 时间 |
CCWaves3D |
波浪3D | CCWaves3D::actionWithWaves(5, 40, ccg(15,10), t) |
CCFlipX3D |
水平翻转3D | CCFlipX3D::actionWithDuration(t) |
CCFlipY3D |
垂直翻转3D | CCFlipY3D::actionWithDuration(t) |
CCLens3D |
镜面3D | CCLens3D::actionWithPosition(CCPointMake(size.width/2,size.height/2), 240, ccg(15,10), t) |
CCRipple3D |
波纹3D | CCRipple3D::actionWithPosition(CCPointMake(size.width/2,size.height/2), 240, 4, 160, ccg(32,24), t) |
CCLiquid |
液体效果 | CCLiquid::actionWithWaves(4, 20, ccg(16,12), t) |
CCWaves |
波浪效果 | CCWaves::actionWithWaves(4, 20, true, true, ccg(16,12), t) |
CCTwirl |
晃动效果 | CCTwirl::actionWithPosition(CCPointMake(size.width/2, size.height/2), 1, 2.5f, ccg(12,8), t) |
CCShakyTiles3D |
摇动马赛克 | CCShakyTiles3D::actionWithRange(5, true, ccg(16,12), t) |
CCShatteredTiles3D |
破碎马赛克 | CCShatteredTiles3D::actionWithRange(5, true, ccg(16,12), t) |
CCShuffleTiles |
随机马赛克 | CCShuffleTiles::actionWithSeed(25, ccg(16,12), t) |
CCFadeOutTRTiles |
往右上角马赛克淡出 | CCFadeOutTRTiles::actionWithSize(ccg(16,12), t) |
CCFadeOutBLTiles |
往左下角马赛克淡出 | CCFadeOutBLTiles::actionWithSize(ccg(16,12), t) |
CCFadeOutUpTiles |
往上马赛克淡出 | CCFadeOutUpTiles::actionWithSize(ccg(16,12), t) |
CCFadeOutDownTiles |
往下马赛克淡出 | CCFadeOutDownTiles::actionWithSize(ccg(16,12), t) |
CCTurnOffTiles |
马赛克随机消失 | CCTurnOffTiles::actionWithSeed(25, ccg(48,32) , t) |
CCWavesTiles3D |
波浪马赛克 | CCWavesTiles3D::actionWithWaves(4, 120, ccg(15,10), t) |
CCJumpTiles3D |
跳动的3D马赛克 | CCJumpTiles3D::actionWithJumps(2, 30, ccg(15,10), t) |
CCSplitRows |
基数往左,偶数往下 | CCSplitRows::actionWithRows(9, t) |
CCSplitCols |
基数往上,偶数往下 | CCSplitCols::actionWithCols(9, t) |
CCPageTurn3D |
3D翻页效果 | CCPageTurn3D::actionWithSize(ccg(15,10), t) |
4.7 节点
节点嵌套节点
CCSprite* pSprite1 =newCCSprite();// 一个精灵相当于一个节点CCSprite* pSprite2 =newCCSprite(); pSprite1->addChild(pSprite2);// 一个节点嵌套另一个节点 pSprite1->runAction(action);// 如果父节点执行动作,那此时所有子节点都会执行该动作。
节点删除与清除
prettyprint(node, false/true); // 节点,false不清理正在运行的动作、true清理正在运行的动作
4.8 精灵
类 | 说明 | 静态函数 | 参数 |
---|---|---|---|
CCSprite |
精灵 | CCSprite::spriteWithTexture(CCTexture2D*) |
质地 |
CCSprite::spriteWithTexture(CCTexture2D*, CCRect&) |
质地, CCRect 注 矩形 |
||
CCSprite::spriteWithTexture(CCTexture2D*, CCRect&, CCPoint&) |
质地,矩形,CCPoint 注 点 |
||
CCSprite::spriteWithSpriteFrame(CCSpriteFrame*) |
CCSpriteFrame 注 精灵框架 |
||
CCSprite::spriteWithSpriteFrameName(char*) |
CCSpriteFrame名称 | ||
CCSprite::spriteWithFile(char*) |
文件名 | ||
CCSprite::spriteWithFile(char*, CCRect&) |
文件名,矩形 | ||
CCSprite::spriteWithBatchNode(CCSpriteBatchNode*, CCRect&) |
CCSpriteBatchNode 注批量节点,矩形 |
||
CCSpriteBatchNode |
精灵批量节点 | CCSpriteBatchNode->addChild(CCSprite) |
添加多个精灵到节点上 |
4.9 定时器
schedule(schedule_selector(Class::callback),1);// 回调,时间;每隔1秒执行一次voidClass::callback(ccTime dt){} unschedule(schedule_selector(Class::callback));// 取消定时器
4.10 内存管理 原则:每个自定义类必须继承 cocos2d::CCObject
对象
CCObject对象的内存管理相关接口
// 引用次数+1 virtualvoidCCObject::retain(void);// 引用次数-1;若引用计数器=0,则delete this; virtualvoidCCObject::release(void);// helper方法,快速判断当前对象只有唯一引用 boolCCObject::isSingleRefrence(void);// 返回引用次数 unsignedintCCObject::retainCount(void);// 自动释放(自动管理)CCObject*CCObject::autorelease(void);
手动管理内存
classMyClass:public cocos2d::CCObject{public:MyClass();~MyClass();}MyClass* obj =newMyClass();...
obj->release();// 谁生成(new、copy)谁负责release// 谁retain,谁负责release。
obj->retain();...
obj->release();// 传递赋值时,需要先retain形参,后release原指针,最后赋值。(注意,因为这里没有使用自赋值检查,所以这组顺序不能错。)voidCCNode::setGrid(CCGridBase* pGrid){
CC_SAFE_RETAIN(pGrid);
CC_SAFE_RELEASE(m_pGrid);
m_pGrid = pGrid;}
自动管理内存
MyClass* obj =newMyClass();
obj->autorelease();// 每帧绘制结束,就自动release池中的对象。
Cocos2d-x开源、跨平台的游戏引擎的更多相关文章
- RPG JS:免费开源的跨平台RPG游戏引擎
RPG JS是一个2D RPG游戏制作引擎,目前版本基于Ease|JS游戏引擎,基于Canvas Engine的新版本即将发布. RPG JS是免费且开源的. RPG JS有着完善的文档支持. RPG ...
- Unity3D游戏开发初探—1.跨平台的游戏引擎让.NET程序员新生
一.Unity3D平台简介 Unity是由Unity Technologies开发的一个让轻松创建诸如三维视频游戏.建筑可视化.实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的 ...
- 开源项目OEIP 游戏引擎与音视频多媒体(UE4/Unity3D)
现开源一个项目 OEIP 项目实现的功能Demo展示 这个项目演示了在UE4中,接入摄像机通过OEIP直接输出到UE4纹理上,并直接把UE4里的RenderTarget当做输入源通过OEIP里GPU管 ...
- Genesis-3D开源游戏引擎简介!
Genesis-3D由搜狐畅游公司超百人引擎研发团队历时数年耗费巨资自主研发,是国内外首款商业开源的3D游戏引擎平台.它包括跨平台渲染引擎.2D引擎.物理引擎.音效系统.粒子系统.动画系统.服务器引擎 ...
- 记录一下八款开源 Android 游戏引擎
记录一下八款开源 Android 游戏引擎 虽然android学了点点,然后现在又没学了(我为啥这么没有恒心呢大哭).以后有时间还是要继续学android的,一定要啊!虽然现在没学android游戏编 ...
- 八款开源 Android 游戏引擎[转]
记录一下,以备不时之需~~~~~ 虽然android学了点点,然后现在又没学了(我为啥这么没有恒心呢大哭).以后有时间还是要继续学android的,一定要啊!虽然现在没学android游戏编程,不过还 ...
- 《Genesis-3D开源游戏引擎-FQA常见问题解答》2014年01月10号版本
1.Genesis-3D开源游戏引擎主要面向哪些用户人群?有限制吗? 1.我们的引擎没有限制,只要您想了解和使用我们的引擎,就可以加入Genesis-3D的大家庭.2.我们的主要用户群是各个相关的企业 ...
- 开源HTML5游戏引擎Kiwi.js 1.0正式发布
Kiwi.js是由GameLab开发的一款全新的开源HTML5 JavaScript游戏引擎.在经过一年多的开发和测试之后,终于在日前正式发布了Kiwi.js 1.0版本. 其创始人Dan Milwa ...
- 2016年 最火的 15 款 HTML5 游戏引擎
HTML5游戏从2014年Egret引擎开发的神经猫引爆朋友圈之后,就开始一发不可收拾,今年<传奇世界>更是突破流水2000万!从两年多的发展来看,游戏开发变得越来越复杂,需要制作各种炫丽 ...
随机推荐
- Java IO流杂谈
创建文件和删除文件(File类) import java.io.File; import java.io.IOException; public class T2 { public static vo ...
- django之class Meta
通过一个内嵌类 "class Meta" 给你的 model 定义元数据, 类似下面这样: class Foo(models.Model): bar = models.CharFi ...
- SP14932 【LCA - Lowest Common Ancestor】
专业跟队形 唯一一个有$\LaTeX$的 裸的$LCA$,我用的是$Tarjan~LCA$,注意两点相同特判 #include<iostream> #include<cstdio&g ...
- 如何在CI中写工具类,在哪个目录写
在Libraries目录写工具类,可以参考项目中七牛的集成写法 而Helps目录写的是辅助函数(公共函数)这一类的
- java okhttp 发送图片
@RequestMapping(value="/demo2", method=RequestMethod.POST) @ResponseBody public String dem ...
- Python3 反向传播神经网络-Min-Batch(根据吴恩达课程讲解编写)
# -*- coding: utf-8 -*- """ Created on Sat Jan 20 13:47:54 2018 @author: markli " ...
- Redis创建高可用集群教程【Windows环境】
模仿的过程中,加入自己的思考和理解,也会有进步和收获. 在这个互联网时代,在高并发和高流量可能随时爆发的情况下,单机版的系统或者单机版的应用已经无法生存,越来越多的应用开始支持集群,支持分布式部署了. ...
- MySQL服务器发生OOM的案例分析
[问题] 有一台MySQL5.6.21的服务器发生OOM,分析下来与多种因素有关 [分析过程] 1.服务器物理内存相对热点数据文件偏小,62G物理内存+8G的SWAP,数据文件大小约550G 触发OO ...
- Redis高可用之哨兵模式Sentinel配置与启动(五)
0.Redis目录结构 1)Redis介绍及部署在CentOS7上(一) 2)Redis指令与数据结构(二) 3)Redis客户端连接以及持久化数据(三) 4)Redis高可用之主从复制实践(四) 5 ...
- JSP(Servlet)中从连接池获取连接
1) 建立连接. 2) 执行SQL. 3) 处理结果. 4) 释放资源. Connection pool:连接池 DataSource: LDAP ( Light directory access p ...