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);}

Cocos2dx中零散知识点相关推荐

  1. 【零散知识点总结2】

    大部分知识点来源于该博主--骆昊 知识点来源于网络,知道的可以在评论区贴上来源喔 <零散知识点总结1> 该文章涉及:Dubbo.HTTP和HTTPS.Mybatis.Hibernate. ...

  2. 【零散知识点总结1】

    大部分知识点来源于该博主--骆昊 知识点来源于网络,知道的可以在评论区贴上来源喔 <零散知识点总结1> 该文章涉及:Dubbo.HTTP和HTTPS.Mybatis.Hibernate. ...

  3. 【零散知识点总结4】

    大部分来源于网络 <零散知识点总结1> 该文章涉及:Dubbo.HTTP和HTTPS.Mybatis.Hibernate. Zookeeper.Kafka.Elasticsearch.Re ...

  4. 【零散知识点总结3】

    大部分知识点来源于该博主--骆昊 知识点来源于网络,知道的可以在评论区贴上来源喔 <零散知识点总结1> 该文章涉及:Dubbo.HTTP和HTTPS.Mybatis.Hibernate. ...

  5. Cocos2d-X中实现菜单特效

    Cocos2d-X中能够讲菜单和动作结合起来使用实现菜单特效 程序实例1:使用菜单和动作的组合实现菜单特效<一> #include "MenuItem.h"CCScen ...

  6. cocos2d-x中的curl

    将请求的接口的动作放在互斥锁中进行 1: 2: 3: pthread_mutex_t mutex; 4: pthread_t thread; 5: sem_t * m_structSem; 6: 7: ...

  7. Cocos2d-x中的坐标系

    绘图坐标系:它是最常见的坐标系,与OpenGL采用的坐标系相同,以左下角为原点,向右为X轴正方向,向上为Y轴正方向.在Cocos2d-x中,一切绘图相关的操作都使用绘图坐标系,如游戏元素中的Posit ...

  8. 【cocostudio】发布资源在Cocos2d-x中如何使用

    http://cn.cocos2d-x.org/tutorial/show?id=1945 1. 新版本的加载方式: 使用Cocos Studio 2.0发布的CSB资源更换了加载方式,需要用CSLo ...

  9. 深入cocos2d-x中的touch事件

    深入cocos2d-x中的touch事件 在文章cocos2d-x中处理touch事件中简单讨论过怎样处理touch事件, 那么今天来深入了解下cocos2d-x中是怎样分发touch事件的. 我们最 ...

最新文章

  1. 题目1483:求最大最小数
  2. WINCE注册表应用
  3. AI:2020年6月16日晚20点陆奇博士演讲《正视挑战把握创业创新机会》
  4. boost::log::static_type_dispatcher用法的测试程序
  5. Vue项目设置代理解决开发环境下的跨域问题
  6. 2.MongoDB基本操作
  7. Qt文档阅读笔记-Fortune Client Example实例解析
  8. 创建一个方便设计的自定义栅格布局
  9. CreateJS基础 学习笔记(上)
  10. “Git 不是昙花一现!”
  11. iOS·Charts·集成步骤
  12. NSTimer 的正确用法你真的知道吗?
  13. windows10电脑连接小爱音箱(完美解决连接上无声音)
  14. 126邮箱stmp服务器,网易邮箱开启13周年庆 与3.2亿用户共享快乐
  15. 学it中的python怎么样_长安大专网教学历
  16. 威盛wm8880 android4.2系统,还能更低吗? 威盛推出249元平板新芯片组
  17. 推荐系统组队学习之协同过滤
  18. windows一键睡眠,不是休眠!
  19. 道路匹配MapMatching:GPS轨迹点常用聚类算法介绍(K-Means聚类、蚁群算法等)
  20. MobaXterm安装

热门文章

  1. 99%算法工程师不知道的if/else优化技巧
  2. 0基础讲解机器学习算法-朴素贝叶斯分类器
  3. 深度学习中不得不学的Graph Embedding方法
  4. 维多利亚的秘密 2005-2018年视频合集
  5. docker 部署Python项目 以及dockerfile文件的编写
  6. 风控模型师面试准备--技术篇(逻辑回归、决策树、集成学习)
  7. 总结出来的一些ASP.NET程序性能优化的注意事项[不断补充]
  8. 网站运行怎么选服务器,wordpress外贸建站服务器怎么选
  9. 洛谷 P1091 合唱队形
  10. 在VMware中装Win server 2012配置Hyper-v