Cocos2dx中零散知识点

cocos2dx中有三种定时器:schedule,scheduleUpdate,scheduleOnce。功能分别是 每隔几秒调用自定义函数、调用系统默认的update()函数、只调用一次自定义函数

1、scheduleUpdate
加入当前节点后,程序会每帧都会自动执行一次默认的Update函数。(注:一定是Update函数哦,若想调用其他自己命名的函数则使用schedule)

看例子,走起。

首先在HelloWord类的头文件中声明Update函数:

void Update(float dt);   //注意参数类型

然后在HelloWorld类源文件中实现函数Update:

voidHelloWorld::Update(float dt)

{

CCLOG("baibai");

}

现在我们可以调用了,在需要他不断执行的地方加入调用的代码就ok:

this->scheduleUpdate();    //this是当前节点,如layer,所以可以省略啦。

运行之后你将会看到不断有baibai被打印出来

停止方法:
this->unscheduleUpdate();

2、schedule
功能:每隔几秒执行一次函数

首先还是在HelloWorld中声明所要执行的函数:

void Move(float dt);

然后在源文件实现:

void HelloWorld::Move(floatdt)

{

CCLOG("baibai");

}

现在去执行他,注意参数哦

this->schedule(schedule_selector(HelloWorld::Move),1.0f); //每隔1.0f执行一次,省略参数则表示每帧都要执行

运行之后,baibai每隔1.0f才会被打印一次。

停止方法:
this->unschedule(schedule_selector(HelloWorld::Move));

3、scheduleOnce
功能:在几秒之后执行,并且只会执行一次。

我们就执行上面所写的Move函数吧。

this->scheduleOnce(schedule_selector(HelloWorld::Move),1.0f); //在1.0f之后执行,并且只执行一次。

运行一下,baibai只是被打印了一次就完了。。。

ok,定时器的调用已经讲完了,大家不妨自己写一些函数体验一下。

4、停止所有计时器
this->unscheduleAllSelectors()

CCNode类的setPosition,getPosition函数如果是一个Node的Child则获取的坐标就是该Node的本地坐标
另一个关键问题就是在cocos2d-x里就是各种对象的大小问题。因为在cocos2d-x里CCNode对象有缩放的方法setScaleX和setScaleY。所以在获取对象大小的时候必须根据情况明确指定获取对象原始大小,还是缩放后的大小。当然cocos2d-x里提供了对应函数来完成这些操作:
getContentSize函数来获得节点原始的大小。只是逻辑尺寸,不是像素
boundingBox函数来获得经过缩放和旋转之后的外框盒大小。
getContentSizeInPixels获得的是像素点大小

像素点和逻辑点关系:逻辑点大小 = 像素大小
getVisibleSize:默示获得视口(可视区域)的大小,若是DesignResolutionSize跟屏幕尺寸一样大,则getVisibleSize便是getWinSize。
getVisibleOrigin:默示可视区域的出发点坐标,这在处理惩罚相对地位的时辰很是有效,确保节点在不合辨别率下的地位一致。
坐标转换:

GL坐标系,cocos2d-x默认坐标系:

CCPoint CCDirector::convertToGL(const CCPoint& uiPoint)
{
CCSize s = m_obWinSizeInPoints;
float newY = s.height - uiPoint.y;
}
屏幕坐标系: 默认原点在左上角
CCPoint CCDirector::convertToUI(const CCPoint& glPoint)
{
CCSize winSize = m_obWinSizeInPoints;
float oppositeY = winSize.height - glPoint.y;

 return ccp(glPoint.x,oppositeY);

}

两种坐标的X方向没有变,只变了Y方向,cocos2d-x里默认的GL坐标系,即左下角为原点ccp(0.0f,0.0f)

// 创建精灵的五种方法  
//方法一:直接创建精灵  //适合于要显示的是这张图片的全部区域,  
CCSprite * sprite = CCSprite::create("Icon.png");  //上面那句话也可以根据需要这样来写:  
//CCString* fileName = CCString::createWithFormat("Icon_%d.jpg", flag);  
//CCSprite* sprite = CCSprite::create(fileName->getCString());  
sprite->setPosition(ccp(100, 100));  
this->addChild(sprite);  
// 方法二:参数 图片名称 矩形区域  
//适合于需要显示此图片的部分区域  
CCSprite * sprite = CCSprite::create("Icon.png",CCRectMake(0, 0, 30, 30));  
sprite->setPosition(ccp(100, 100));  
this->addChild(sprite);  
//方法三: 利用帧缓存中的一帧的名称声称一个对象  
// 适合于plist打包好的文件  
CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("test_icon.plist");  
CCSprite * sprite = CCSprite::createWithSpriteFrameName("Icon.png");  
sprite->setPosition(ccp(100, 100));  
this->addChild(sprite);  
//方法四: 利用另外一帧生成一个精灵对象    
//适合于做帧动画使用  
CCSpriteFrame * frame = CCSpriteFrame::create("Icon.png", CCRectMake(0, 0, 40, 30));  
CCSprite * sprite = CCSprite::createWithSpriteFrame(frame);  
sprite->setPosition(ccp(310, 150));  
addChild(sprite);  
//方法五:利用纹理,  
//适合于需要频繁使用的图片  
CCSpriteBatchNode* spriteTexture = CCSpriteBatchNode::create("iocn.png");  
spriteTexture->setPosition(CCPointZero);  
addChild(spriteTexture);  
CCSprite* sprite = CCSprite::createWithTexture(spriteTexture->getTexture());  
sprite->setPosition(ccp(visiblesize.width/2, 100));  
spriteTexture->addChild(sprite, 2);  

常用的封装方法

//返回场景 
static CCScene* scene(CCLayer*layer){CCScene *scene=CCScene::create();scene->addChild(layer);//scene->autorelease();return scene;}
//移动点static void moveNode(CCNode *node,CCPoint point){node->setPosition(node->getPosition()+point);}
//格式化,串接字符串static char* format(int v, const char* prefix = "", const char* suffix = ""){static char buf[2048];sprintf(buf, "%s%d%s", prefix, v, suffix);return buf;}
//创建动画static CCAnimation* CreateAnimation(const char* filename,int start,int end,int width,float delay){CCTexture2D *texture=CCTextureCache::sharedTextureCache()->addImage(filename);CCArray *array=CCArray::create();for (int i=start;i<end;i++){CCSpriteFrame *frame=CCSpriteFrame::createWithTexture(texture,CCRectMake(i*width,0,width,texture->getContentSize().height));array->addObject(frame);}return CCAnimation::createWithSpriteFrames(array,delay);}
//创建帧static CCSpriteFrame* getSpriteFrame(const char* filename, int pos, int width){CCTexture2D* texture = CCTextureCache::sharedTextureCache()->addImage(filename);CCSpriteFrame* frame = CCSpriteFrame::createWithTexture(texture, CCRectMake(pos*width, 0, width, texture->getContentSize().height));return frame;}//地图坐标转格子地图static CCPoint Point2Tile(CCTMXTiledMap* map, CCPoint ptInMap){int dx = map->getTileSize().width;int dy = map->getTileSize().height;int x = ptInMap.x / dx;int y = ptInMap.y / dy;y = map->getMapSize().height - 1 - y;return ccp(x, y);}
//格子地图坐标转地图坐标static CCPoint Tile2PointLB(CCTMXTiledMap* map, CCPoint ptTile){ptTile.y = map->getMapSize().height - 1 - ptTile.y;return ccp(ptTile.x * map->getTileSize().width,ptTile.y * map->getTileSize().height);}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/494486.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【每日SQL打卡】​​​​​​​​​​​​​​​DAY 6丨统计各专业学生人数【难度中等】

活动介绍&#xff1a; 「数据仓库技术交流群」已经正式启动每日SQL打卡&#xff0c;帮助大家扎实基础&#xff0c;努力工作之余&#xff0c;别忘了自我提升。 欢迎报名和邀请小伙伴参与&#xff0c;一个人可能走得很快&#xff0c;但一群人会走得很远。 &#x1f345;题目汇总(…

五问智能教育未来发展:重点解决什么问题?

来源&#xff1a;人民日报日前&#xff0c;首届中国智能教育大会在北京举行&#xff0c;教育部有关负责人、人工智能专家和教育专家、一些地方政府及教育行政部门负责人、大中小学校长、教师和企业家等近1000人参加。与会代表认为&#xff0c;智能教育将会越来越多地影响每一个…

【每日SQL打卡】​​​​​​​​​​​​​​​DAY 6丨寻找用户推荐人【难度简单】

活动介绍&#xff1a; 「数据仓库技术交流群」已经正式启动每日SQL打卡&#xff0c;帮助大家扎实基础&#xff0c;努力工作之余&#xff0c;别忘了自我提升。 欢迎报名和邀请小伙伴参与&#xff0c;一个人可能走得很快&#xff0c;但一群人会走得很远。 &#x1f345;题目汇总(…

Ubuntu下Memcache的安装与基本使用

在全世界范围内很多大负载站点采用了Memcache作缓存服务&#xff0c;以分担数据库服务器的压力。 这里只介绍在Ubuntu下如何配置Memcache和如何在PHP使用Memecache&#xff0c;对于更深入的了解&#xff0c;比如Memcache的运作机理或更高级的应用还是Google一下…^_^ 关于Memca…

实现超级玛丽上下左右运动

用Cocos2dx实现超级玛丽&#xff0c;首先用帧循环定时器判断方向&#xff0c;再在类中实现运行以及判断是否能运动。 方向控制 void LayerGame::moveMario(float dt) { #ifdef WIN32short key;key GetKeyState(F);if (key < 0) _marioDir Common::RIGHT;key GetKeyStat…

【每日SQL打卡】​​​​​​​​​​​​​​​DAY 7丨大的国家【难度简单】

活动介绍&#xff1a; 「数据仓库技术交流群」已经正式启动每日SQL打卡&#xff0c;帮助大家扎实基础&#xff0c;努力工作之余&#xff0c;别忘了自我提升。 欢迎报名和邀请小伙伴参与&#xff0c;一个人可能走得很快&#xff0c;但一群人会走得很远。 &#x1f345;题目汇总(…

自动驾驶前沿报告!解密六大关键技术,全球人才分布

来源&#xff1a;智东西摘要&#xff1a;清华-中国工程院知识智能联合研究中心从技术、人才、应用和趋势的维度盘点自动驾驶的发展。从传统车企到新造车势力&#xff0c;再到互联网大佬&#xff0c;都在加注自动驾驶。自动驾驶既指向了更高效安全的交通运营系统&#xff0c;也意…

利用工厂模式实现怪物系统

利用工厂模式可以有效的降低类与类的藕合性&#xff0c;增强代码的可重用性&#xff0c;工厂模式主要通过虚函数的原理进行。 当基类指针指向一个子类对象&#xff0c;通过这个指针调用子类和基类同名成员函数的时候&#xff0c;基类声明为虚函数「子类不写也可以」就会调子类…

【每日SQL打卡】​​​​​​​​​​​​​​​DAY 7丨好友申请 I :总体通过率【难度简单】

活动介绍&#xff1a; 「数据仓库技术交流群」已经正式启动每日SQL打卡&#xff0c;帮助大家扎实基础&#xff0c;努力工作之余&#xff0c;别忘了自我提升。 欢迎报名和邀请小伙伴参与&#xff0c;一个人可能走得很快&#xff0c;但一群人会走得很远。 &#x1f345;题目汇总(…

边缘计算技术发展与对策研究

来源&#xff1a;5G作者&#xff1a;洪学海&#xff0c;中国科学院计算技术研究所&#xff0c;中国科学院计算机网络信息中心&#xff0c;研究员&#xff1b;汪洋&#xff0c;中国科学院计算机网络信息中心。未来智能实验室是人工智能学家与科学院相关机构联合成立的人工智能&a…

Android初探:LINUX(Ubuntu)下安装开发环境

第一步&#xff1a; 安装Ubuntu, 我现在装的是12.04LTS&#xff0c;12.04LTS 将得到长达5年的更新支持&#xff0c;而新出来的12.10则只有两年的更新支持&#xff0c;并且Google Android开发/源码网站上也将12.04作为支持系统之一&#xff0c;所以不推荐12.10安装完ubuntu系统后…

windows下同时安装python2与python3

由于python2与python3并不相互兼容&#xff0c;并且差别较大&#xff0c;所以有时需要同时安装&#xff0c;但在操作命令行时&#xff0c;怎么区别python2与python3呢&#xff1f; 1.下载并安装Python 2.7.9和Python 3.4.1。 2.找到Python 2.7.9的安装目录C:\Python27&#x…

【每日SQL打卡】​​​​​​​​​​​​​​​DAY 7丨字节面试真题【难度困难】

活动介绍&#xff1a; 「数据仓库技术交流群」已经正式启动每日SQL打卡&#xff0c;帮助大家扎实基础&#xff0c;努力工作之余&#xff0c;别忘了自我提升。 欢迎报名和邀请小伙伴参与&#xff0c;一个人可能走得很快&#xff0c;但一群人会走得很远。 &#x1f345;题目汇总(…

发布 | 2018年中美智慧城市行业研究系列报告

来源&#xff1a;桥域咨询报告链接:https://pan.baidu.com/s/1fGrtzH0nLsldDvpE04DY6A 密码:q9q2未来智能实验室是人工智能学家与科学院相关机构联合成立的人工智能&#xff0c;互联网和脑科学交叉研究机构。未来智能实验室的主要工作包括&#xff1a;建立AI智能系统智商评测体…

oracle收发邮件存储过程

oracle收发邮件存储过程 2012-04-13 13:33:32| 分类&#xff1a; .NET | 标签&#xff1a; |字号大中小 订阅 CREATE OR REPLACE PROCEDURE PROC_SEND_EMAIL(P_TXT VARCHAR2, P_SUB VARCHAR2, …

commons-fileupload实现文件上传下载

commons-fileupload是Apache提供的一个实现文件上传下载的简单&#xff0c;有效途径,需要commons-io包的支持&#xff0c;本文是一个简单的示例 上传页面,注意设置响应头 <body><center><h1>文件上传页面</h1><hr><form action"${page…

【每日SQL打卡】​​​​​​​​​​​​​​​DAY 8丨判断三角形【难度简单】

活动介绍&#xff1a; 「数据仓库技术交流群」已经正式启动每日SQL打卡&#xff0c;帮助大家扎实基础&#xff0c;努力工作之余&#xff0c;别忘了自我提升。 欢迎报名和邀请小伙伴参与&#xff0c;一个人可能走得很快&#xff0c;但一群人会走得很远。 &#x1f345;题目汇总(…

【每日SQL打卡】​​​​​​​​​​​​​​​DAY 8丨平面上的最近距离【难度中等】

活动介绍&#xff1a; 「数据仓库技术交流群」已经正式启动每日SQL打卡&#xff0c;帮助大家扎实基础&#xff0c;努力工作之余&#xff0c;别忘了自我提升。 欢迎报名和邀请小伙伴参与&#xff0c;一个人可能走得很快&#xff0c;但一群人会走得很远。 &#x1f345;题目汇总(…

python实现统计你一共写了多少行代码

程序员要保证一定的代码量就必须勤奋的敲代码&#xff0c;但怎么知道自己一共写了多少代码呢&#xff0c;笔者用python写了个简单的脚本&#xff0c;遍历所有的.java,.cpp,.c文件的行数&#xff0c;但是正如大家所知&#xff0c;java生成了许多代码&#xff0c;所以有许多水分&…

工业机器人:四大家族垄断全球市场

来源&#xff1a;广发证券在世界工业机器人业界中&#xff0c;以瑞士的ABB、德国的库卡、日本的发那科和安川电机最为著名&#xff0c;并称工业机器人四大家族。全球机器人市场中&#xff0c;四大家族一直占据着重要位置&#xff0c;总市场份额一度超过50%以上。2015年以来由于…