博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
cocos2d学习笔录1
阅读量:6449 次
发布时间:2019-06-23

本文共 4352 字,大约阅读时间需要 14 分钟。

CCDirector的主要作用:

1.访问和改变场景;

2.访问cocos2d-x的配置细节

3.访问视图(OPENGL,UIVIEW,UIWINDOW);

4.暂停,恢复和结束游戏;

5.在UIKit和OpenGL之间切换坐标


CCNode 常用API:

1.生成一个新的节点:

CCNode*childNoe = CCNode::create();

2.将新节点添加为子节点

myNode>addChile(childNode,0,123); //0是层级,123是tag属性

3.获取子节点:

CCNode *retrevedNode = myNode->getChildByTag(123);

4.通过tag删除子节点,cleanup会停止任何运行中的动作:

myNode->removeChildByTag(123,true);

5.通过节点指针删除节点:

myNode->removeChild(retrievedNode);

6.删除一个节点的所有子节点:

myNode->removeAllChildenWithCleanup(true);

7.从myNode的父节点删除myNode:

myNode->removeFromParentAndCleanup(true);


使用动作:

1.一下是一个动作的申明:

CCAction *action = CCBlind::create(10,20);

action->setTag(234);

2.运行这个动作会让节点闪烁:

myNode->runAction(action);

3.如果你想再以后使用此动作,你可以用tag获取:

CCAction*retrievedAction = myNode->getActionByTag(234);

4.你可以用tag停止相关连的动作:

myNode->stopActionByTag(234);

5.或者你也可以用动作指针停止动作:

myNode->stopAction(action);

6.你可以停止所有在此节点上运行的动作:

myNode->stopAllActions();


如果你想运行不同的方法,或者是每秒调用10次更新的方法的话,你应该使用一下代码:

void HelloScene::init()

{

     this->schedule(schedule_selector(HelloWorld::updataTen),0.1f);

}


void HelloScene::updateTen()

{

     //此方法将根据时间间隔来调用,每隔10秒

}

如果时间间隔(interval)为0的话,你应该使用scheduleUpdate方法。不过,如果你想之后停止对某个指定更新的方法的预定信息的话,上述代码更加合适。因为scheduleUpdate方法没有停止预定信息的功能。

停止预定信息

unschedule

OC中可以用一个隐式指针:_cmd

//用_cmd关键词停止当前方法的预定

[self unschedule:_cmd];

局限于OC


//随机数的产生

CCRANDOM_0_1 随机生成0-1之间的随机数

//优先级设置

this->scheduleUpdateWithPriority(0);

这里的优先级顺序是从低到高



CCScene是场景视图的第一个节点。通常CCScene的子节点都是继承自CCLayer。

问题:如果两个界面都是100M,那么瞬间就是200M太大了,怎么解决?

方法:可以加载一个loading界面来过渡!

CCTransitionFade*fade = CCTransitionFade::transitionWithDuration(1.f,Scene2::scen(),ccBLACK);  //最后一个参数是默认参数,可以不写,他默认ccBlack

//CCDirector::sharedDirector()->pushScene(fade);

//CCDirector::sharedDirector()->repleaseScene(fade);

push方法不会调用原来场景的析构方法,而replease方法会调用原来场景的内存,会调用析构函数。

问题:哪种情况用push来切换场景,哪种情况用replease来切换场景?

方法:如果是暂停来切换暂停场景,那么用pushScene,原来的游戏场景不需要释放,如果是游戏场景的切换,一般用repleaseScene方法来切换。

push一个场景必须pop才能释放内存,一般用replease来切换场景


//触摸注册事件//如果没有这个,默认的是多点触摸,Target是单点,Stand是多点触摸

void HelloWorld::registerWithTouchDispatcher() {     CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, 0, true); //第二个参数是优先级,越低的优先级越高,优先响应,true是触摸吞噬,如果是true的话,那么触摸就被它获取,后面的view不在接受 }


ccTouchBegan返回的是一个BOOL值,如果是true的话,那就意味着你不想让当前的触摸事件传到到其他触摸事件处理器。你实际上是“吞下了”这个触摸事件。


接受加速计事件:

和触摸输入一样,加速计必须在启用以后才能接受加速计事件:
this->setAccelerometerEnabled(true);
同样的,层里面要加入一个特定的方法来接受加速计事件:
void HelloWorld::didAccelerate(CCAcceleration*pAccelerationValue)
{

     CCLOG("pAccelerationValue:X:%f/y:%f/z:%f",pAccelerationValue.x,pAccelerationValue.y,pAccelerationValue.z);
}


注意:

资源文件名的大小写,真机上是区分大小写的,而模拟器是不区分的。

事件间隔动作:

CCMoveTo*move = CCMoveTo::create(3,ccp(100,200));
myNode->runAction(move);
重复动作:
CCRotateBy *rotateBy = CCRotateteBy::create(2,360);
CCRepeatForever*repeat = CCRepeatForever::cease(rotateBy);
舒缓动作:
CCMoveTo *move = CCMoveTo::create(3,cpp(100,200));
//节点慢慢启动,在移动中加速
CCEaseInOut*ease = CCEaseInOut::create(move,4);
myNode->runAction(ease);
cocos2d实现了一下CCEaseAction类:
例如:CCEaseBackIn
动作序列CCSequence
CCSequence *seq = [CCSequence actions:tint1,tint2,nil];
[label runAction:seq];
回调函数:
//CCCallFunc是执行对应的回调函数,其中回调函数不可带参数。一般使用静态成员函数create创建实例
CCCallFunc *callFunc = CCCallFunc::create(this,callfunc_selector(HelloWorld::funC_CallBack));
pLabel->runAction(callFunc);
//带参数的回调CCCallFuncN,其中带一个参数,一般由静态成员create创建实例
CCCallFuncN *callFuncN = CCCallFuncN::create(this,callfuncN_selector(HelloWorld::funcN_CallBack));
pLabel->runAction(callFuncN);
void HelloWorld::funcN_CallBack(void *sender)
{
     CCLabelTTF *label = (CCLabelTTF *)sender;
     label->setStrign("hello");
     CCLog("CallFuncN的回调");
}
//带两个参数的回调
CCString *str = CCString::create("data参数");
str->retain();
CCCallFuncND *callFuncND = CCCallFuncND::create(this,callfuncND_selector(HelloWorld::funcND_CallBack),str); //最后一个参数是void*可以是任意类型
pLabel->runAction(callFuncND);
void HelloWorld::funcN_CallBack(void *sender,void *data)
{
     CCString *str = (CCString *)data;
     CCLabelTTF *label = (CCLabelTTF *)sender;
     label->setString(str->getCString());
}
//CCCallFuncO
CCString *str = CCString::create("object参数");
str->retain();
CCCallFuncO*callFuncO = CCCallFuncO::create(this,callfuncO_selector(HelloWorld::funcO_CallBack),str);
pLabel->runAction(callFuncO);
void HelloWorld::funcO_CallBack(CCObject *object)
{
     CCString * = (CCString *)object;
     CCLog("%s",str->getCString());
}

本文转蓬莱仙羽51CTO博客,原文链接:http://blog.51cto.com/dingxiaowei/1366397,如需转载请自行联系原作者

你可能感兴趣的文章
明德扬至简设计法--verilog综合器和仿真器
查看>>
lvs负载均衡群集
查看>>
222
查看>>
Linux 124课程 4、 创建,查看,编辑文件
查看>>
通过思科模拟器CISCO PACKET TRACER学习网络11——扩展访问控制列表
查看>>
CMD、ENTRYPOINT
查看>>
golang[38]-区块链- 生成比特币地址
查看>>
ubuntu常用命令进程管理
查看>>
负载均衡器HAProxy,高可用集群keepalived,keepalived+lvs
查看>>
cobbler部署
查看>>
使用ASP.NET中的Chart.js在ASP.NETVisual数据中使用Chart.js的可视化
查看>>
react-native-gp-utils(对react-native全局进行配置,对内置对象原型)
查看>>
卡特彼勒:工程机械行业工业互联网鼻祖能带给我们什么启示?
查看>>
《2018年云上挖矿态势分析报告》发布,非Web类应用安全风险需重点关注
查看>>
中国船级社船舶设计审核云平台
查看>>
【Python学习笔记】布尔数据类型
查看>>
揭秘UOS独特的CPU模型
查看>>
Quick BI 的模型设计与生成SQL原理剖析
查看>>
Nginx +keepalived+varnish+lamp实现高可用、负载均衡集群
查看>>
9% off RS3gold rs3 gold is online
查看>>