cocos2d-x总结(二)第一个场景(scene)

文章出处:http://www.cnblogs.com/w121640121/archive/2011/11/28/2266908.html


cocos2d-x的模板里已经建立好了一个HelloWord,其中classes文件夹用于保存本地的C++代码;Resource为资源的根目录,也就是在程序需要加载资源的地方,只要是放在此目录下的文件,都可以只用文件名就能加载到程序中,无需添加额外的路径信息;win32或者ios文件夹主要保存与平台相关的东西。要建立自己的场景只需要将HelloWorldScene.h和HelloWorldScene.cpp文件删除,然后再更改一下AppDelegate.cpp文件里的内容。


AppDelegate

AppDelegate.cpp文件主要进行了游戏的全局初始化。在AppDelegate::initInstance()函数中,根据平台的不同,分别进行不同窗口的创建。在WIN32平台下,初始化函数如下:

#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)        
// Initialize OpenGLView instance, that release by CCDirector when application terminate.        
// The HelloWorld is designed as HVGA.        
CCEGLView * pMainWnd = new CCEGLView();        
CC_BREAK_IF(!pMainWnd || ! pMainWnd->Create(TEXT("MyTest"), 320, 480));
#endif  // CC_PLATFORM_WIN32

可以看出,WIN32平台下,初始化了一个320*480的窗口,更改此数值就可以更改窗口的尺寸。而在IOS平台下,此窗口的建立则根据UIViewController所建立的窗口来初始化窗口尺寸,IOS平台下默认窗口大小为适应设备尺寸的。

接下来是程序的入口函数AppDelegate::applicationDidFinishLaunching()。程序的全局初始化工作可以在此函数中定义。里边涉及到的第一个cocos2d组件就是CCDirector.


CCDirector

顾名思义,这个是游戏的“总导演”,主要负责获取全局的CEGL视窗,设置显示参数,切换场景等。

在AppDelegate::applicationDidFinishLaunching()中的最后一句

// create a scene. it's an autorelease object    
CCScene *pScene = HelloWorld::scene();    
// run    
pDirector->runWithScene(pScene);

为进入到默认的HelloWorldScene.h文件中声明的场景。如建立自己的场景,只需要将此场景替换掉就OK了。


建立自己的场景

下面开始建立自己的场景。取名为MyFirstScene

MyFirstScene.h文件:

#ifndef MYFIRSTSCENE_H
#define MYFIRSTSCENE_H
#include "cocos2d.h"
class CMyFirstScene : public cocos2d::CCLayer
{
public: 
// 初始化  
virtual bool init();    
// 进入场景 
virtual void onEnter(); 
// 显示此场景    
static  void Show();    
// 节点函数 
LAYER_NODE_FUNC(CMyFirstScene);};
#endif

MyfirstScene.cpp文件:

#include "MyFirstScene.h"
using namespace cocos2d;
bool CMyFirstScene::init()
{    
    if(!CCLayer::init())    
    {        
        return false;    
    }    
    // do something    
    return true;
}
 
void CMyFirstScene::onEnter()
{    
    // do something    
    CCLayer::onEnter();
}
 
void CMyFirstScene::Show()
{    
    // 建立场景和层    
    cocos2d::CCScene *pNewScene = cocos2d::CCScene::node();         
    CMyFirstScene *pLayer = CMyFirstScene::node();
    pNewScene->addChild(pLayer);    
    // 切换场景    
    cocos2d::CCScene *pCurScene = cocos2d::CCDirector::sharedDirector()->getRunningScene();    
    if(NULL == pCurScene)    
    {        
        cocos2d::CCDirector::sharedDirector()->runWithScene(pNewScene);    
    }    
    else   
    {        
        cocos2d::CCDirector::sharedDirector()->replaceScene(pNewScene);    
    }
}

场景类继承与CCLayer,层相当于一个大容器,可以承载许多东西。场景里就是通过这个层将所有的东西显示出来。

这个类里重载了两个函数,一个是init()函数,当这个场景被创建的时候,就会调用此函数,因此初始化工作就可以在这个函数内完成。第二个函数是onEnter(),它与init()的区别是,当这个场景被显示的时候才会被调用,因此可以进行一些类似于精灵位置等初始化的工作。

头文件里还有一个奇怪的东西LAYER_NODE_FUNC(CMyFirstScene); 这个宏在引擎内部(CCLayer.h)被定义。主要是为自己建的层增加一个node()函数,node()函数的作用是new一个实例,并将它加入autorelease,也就是所有由node()函数得来的指针,都不需要手动的释放(除非自己想要)。

最后一个函数是定义的静态的Show函数,这个函数可以方便的在多个场景之间进行切换。在任何时候想切换的某一个场景的时候,只需要调用该类的Show函数就可以解决了。这个函数先生成了一个场景(CCScene)和一个层(CCLayer),然后将这个层加入的场景中。接着判断前端是否有场景正在显示,如果没有,则直接显示该场景,否则进行切换。


运行

最后打开AppDelegate.cpp文件,将#include "HelloWorldScene.h" 替换为 #include "MyFirstScene.h",将AppDelegate::applicationDidFinishLaunching()最后两句删除,改为CMyFirstScene::Show();运行一下,就可以看到刚刚建立的场景了。

下一次将会加入一些内容,让场景看起来更加丰富。




内容概要:本文档详细介绍了Analog Devices公司生产的AD8436真均方根-直流(RMS-to-DC)转换器的技术细节及其应用场景。AD8436由三个独立模块构成:轨到轨FET输入放大器、高动态范围均方根计算内核和精密轨到轨输出放大器。该器件不仅体积小巧、功耗低,而且具有广泛的输入电压范围和快速响应特性。文档涵盖了AD8436的工作原理、配置选项、外部组件选择(如电容)、增益调节、单电源供电、电流互感器配置、接地故障检测、三相电源监测等方面的内容。此外,还特别强调了PCB设计注意事项和误差源分析,旨在帮助工程师更好地理解和应用这款高性能的RMS-DC转换器。 适合人群:从事模拟电路设计的专业工程师和技术人员,尤其是那些需要精确测量交流电信号均方根值的应用开发者。 使用场景及目标:①用于工业自动化、医疗设备、电力监控等领域,实现对交流电压或电流的精准测量;②适用于手持式数字万用表及其他便携式仪器仪表,提供高效的单电源解决方案;③在电流互感器配置中,用于检测微小的电流变化,保障电气安全;④应用于三相电力系统监控,优化建立时间和转换精度。 其他说明:为了确保最佳性能,文档推荐使用高质量的电容器件,并给出了详细的PCB布局指导。同时提醒用户关注电介质吸收和泄漏电流等因素对测量准确性的影响。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值