关于Cocos2d-x中demo的rem.js 使用demo

1843人阅读
cocos2dx(1)
如果你是cocos2dx beta 版的, 官方给的demo就在&cocos2d-x-3.0beta\build 中
打开cocos2d-win32.vc2012.sln
找到TextCpp项目 展开Classes
该TextCpp分2场景, 第一个场景就是主界面 要你选择测试的案例, 第二个场景就是测试案例的界面
AppDelegate 程序就是从这里开始的
controller 这就是程序的第一个场景, 即主界面
testBasic 这是第二个场景的基类,所有的测试案例界面都是基于这个场景的子类场景
BaseTest 这是第二个场景中的层的基类,所有的测试案例界场景都会调用基于这个层的子类层
tests.h 这是资源地址
VisibleRect 是用来方便设置坐标的类
我们先来看下AppDelegate.cpp中的代码//找到下面这段上面的都先不管
auto scene = Scene::create();//创建一个场景
auto layer = new TestController();//创建一个层
layer-&autorelease();//放入自动回收池中
scene-&addChild(layer);//把层放入场景中
director-&runWithScene(scene);//跑该场景
然后找到主界面类controller.h
#ifndef _CONTROLLER_H_
#define _CONTROLLER_H_
#include &cocos2d.h&
USING_NS_CC;
class TestController : public Layer
TestController();
~TestController();
//菜单回调函数
void menuCallback(Object * sender);
//关闭按钮回调函数
void closeCallback(Object * sender);
//触摸开始回调函数
bool onTouchBegan(Touch* touches, Event
//触摸移动回调函数
void onTouchMoved(Touch* touches, Event
//鼠标滚动回调函数
void onMouseScroll(Event *event);
Point _beginP
Menu* _itemM
看看如何初始化该类的
TestController::TestController()
: _beginPos(Point::ZERO)
// add close menu
auto closeItem = MenuItemImage::create(s_pathClose/*正常的图片*/, s_pathClose/*按下去的图片*/, CC_CALLBACK_1(TestController::closeCallback, this)/*触发的函数*/ );
auto menu =Menu::create(closeItem, NULL);//好似一个MenuItemImage集合
menu-&setPosition( Point::ZERO );
closeItem-&setPosition(Point( /*自定义的窗口类*/VisibleRect::right().x - 30, VisibleRect::top().y - 30));
// add menu items for tests 添加文字项菜单 用于测试
_itemMenu = Menu::create();
for (int i = 0; i & g_testC ++i)
// #if (CC_TARGET_PLATFORM == CC_PLATFORM_MARMALADE)
auto label = LabelBMFont::create(g_aTestNames[i].c_str(),
&fonts/arial16.fnt&);
auto label = LabelTTF::create( g_aTestNames[i].test_name, &Arial&, 24);
auto menuItem = MenuItemLabel::create(label, CC_CALLBACK_1(TestController::menuCallback, this));
_itemMenu-&addChild(menuItem, i + 10000);
menuItem-&setPosition( Point( VisibleRect::center().x, (VisibleRect::top().y - (i + 1) * LINE_SPACE) ));
//设置itemMenu容器的大小 以便于拉动
_itemMenu-&setContentSize(Size(VisibleRect::getVisibleRect().size.width, (g_testCount + 1) * (LINE_SPACE)));
_itemMenu-&setPosition(s_tCurPos);
addChild(_itemMenu);
addChild(menu, 1);
// Register Touch Event 注册触摸监听事件
auto listener = EventListenerTouchOneByOne::create();
listener-&setSwallowTouches(true);
//回调函数
listener-&onTouchBegan = CC_CALLBACK_2(TestController::onTouchBegan, this);
listener-&onTouchMoved = CC_CALLBACK_2(TestController::onTouchMoved, this);
_eventDispatcher-&addEventListenerWithSceneGraphPriority(listener, this);
//鼠标滚动事件
auto mouseListener = EventListenerMouse::create();
mouseListener-&onMouseScroll = CC_CALLBACK_1(TestController::onMouseScroll, this);
_eventDispatcher-&addEventListenerWithSceneGraphPriority(mouseListener, this);
TestController::~TestController()
void TestController::menuCallback(Object * sender)
//净化缓存, 包括纹理缓存, 精灵缓存和字体缓存
Director::getInstance()-&purgeCachedData();
// get the userdata, it's the index of the menu item clicked
//传进来的 sender 为点击的Menuitem
auto menuItem = static_cast&MenuItem *&(sender);
int idx = menuItem-&getZOrder() - 10000;
// create the test scene and run it
//创建场景
auto scene = g_aTestNames[idx].callback();
if (scene)
//运行场景
scene-&runThisTest();
scene-&release();
testBasic基类的主要功能就是创建一个返回的按钮
void TestScene::onEnter()
Scene::onEnter();
//add the menu item for back to main menu
//#if (CC_TARGET_PLATFORM == CC_PLATFORM_MARMALADE)
auto label = LabelBMFont::create(&MainMenu&,
&fonts/arial16.fnt&);
//返回按钮
auto label = LabelTTF::create(&MainMenu&, &Arial&, 20);
auto menuItem = MenuItemLabel::create(label, testScene_callback );
auto menu = Menu::create(menuItem, NULL);
menu-&setPosition( Point::ZERO );
menuItem-&setPosition( Point( VisibleRect::right().x - 50, VisibleRect::bottom().y + 25) );
addChild(menu, 1);
让我们看看BaseTest都做了什么
BaseTest.h
Created by Ricardo Quesada on 6/6/13.
#ifndef __TestCpp__BaseTest__
#define __TestCpp__BaseTest__
#include &cocos2d.h&
class BaseTest : public cocos2d::Layer
virtual std::string title()
virtual std::string subtitle()
//重新开始
virtual void restartCallback(Object* sender);
virtual void nextCallback(Object* sender);
virtual void backCallback(Object* sender);
virtual void onEnter()
virtual void onExit()
#endif /* defined(__TestCpp__BaseTest__) */
BaseTest.cpp
Created by Ricardo Quesada on 6/6/13.
#include &BaseTest.h&
#include &VisibleRect.h&
#include &testResource.h&
USING_NS_CC;
void BaseTest::onEnter()
Layer::onEnter();
// add title and subtitle 创建标题
std::string str = title();
const char * pTitle = str.c_str();
auto label = LabelTTF::create(pTitle, &Arial&, 32);
addChild(label, 9999);
label-&setPosition( Point(VisibleRect::center().x, VisibleRect::top().y - 30) );
std::string strSubtitle = subtitle();
if( ! strSubtitle.empty() )
auto l = LabelTTF::create(strSubtitle.c_str(), &Thonburi&, 16);
addChild(l, 9999);
l-&setPosition( Point(VisibleRect::center().x, VisibleRect::top().y - 60) );
// add menu 创建几个按钮
// CC_CALLBACK_1 == std::bind( function_ptr, instance, std::placeholders::_1, ...)
auto item1 = MenuItemImage::create(s_pathB1, s_pathB2, CC_CALLBACK_1(BaseTest::backCallback, this) );
auto item2 = MenuItemImage::create(s_pathR1, s_pathR2, CC_CALLBACK_1(BaseTest::restartCallback, this) );
auto item3 = MenuItemImage::create(s_pathF1, s_pathF2, CC_CALLBACK_1(BaseTest::nextCallback, this) );
auto menu = Menu::create(item1, item2, item3, NULL);
menu-&setPosition(Point::ZERO);
item1-&setPosition(Point(VisibleRect::center().x - item2-&getContentSize().width*2, VisibleRect::bottom().y+item2-&getContentSize().height/2));
item2-&setPosition(Point(VisibleRect::center().x, VisibleRect::bottom().y+item2-&getContentSize().height/2));
item3-&setPosition(Point(VisibleRect::center().x + item2-&getContentSize().width*2, VisibleRect::bottom().y+item2-&getContentSize().height/2));
addChild(menu, 9999);
void BaseTest::onExit()
Layer::onExit();
//等待重写
std::string BaseTest::title() const
return &&;
//等待重写
std::string BaseTest::subtitle() const
return &&;
//等待重写
void BaseTest::restartCallback(Object* sender)
log(&override restart!&);
//等待重写
void BaseTest::nextCallback(Object* sender)
log(&override next!&);
//等待重写
void BaseTest::backCallback(Object* sender)
log(&override back!&);
}这是测试层的基类,所以有很多函数定义需要之后补充
我们随便打开一个测试类比如UnitTest.h
#ifndef __UNIT_TEST__
#define __UNIT_TEST__
#include &../testBasic.h&
#include &../BaseTest.h&
class UnitTestScene : public TestScene
virtual void runThisTest()
class UnitTestDemo : public BaseTest
virtual void onEnter()
virtual void onExit()
virtual std::string title()
virtual std::string subtitle()
virtual void restartCallback(Object* sender)
virtual void nextCallback(Object* sender)
virtual void backCallback(Object* sender)
//-------------------------------------
class TemplateVectorTest : public UnitTestDemo
CREATE_FUNC(TemplateVectorTest);
virtual void onEnter()
virtual std::string subtitle()
void constFunc(const Vector&Node*&& vec)
class TemplateMapTest : public UnitTestDemo
CREATE_FUNC(TemplateMapTest);
virtual void onEnter()
virtual std::string subtitle()
void constFunc(const Map&std::string, Node*&& map)
class ValueTest : public UnitTestDemo
CREATE_FUNC(ValueTest);
virtual void onEnter()
virtual std::string subtitle()
void constFunc(const Value& value)
#endif /* __UNIT_TEST__ */
该类的场景继承基类场景,层继承基类的层 并重写了基类层的函数
而这些测试类在哪里被调用呢 &是在controller类中
const char *test_
//场景指针
std::function&TestScene*()&
} g_aTestNames[] = {
// TESTS MUST BE ORDERED ALPHABETICALLY
violators will be prosecuted
{ &AUnitTest&, []() { return new UnitTestScene(); }},
{ &ANewRenderTest&, []() { return new NewRendererTestScene(); } },
{ &Accelerometer&, []() { return new AccelerometerTestScene(); } },
{ &ActionManagerTest&, [](){return new ActionManagerTestScene(); } },
{ &ActionsEaseTest&, [](){return new ActionsEaseTestScene();} },
{ &ActionsProgressTest&, [](){return new ProgressActionsTestScene(); } },
{ &ActionsTest&, [](){ return new ActionsTestScene(); } },
{ &Box2dTest&, []() { return new Box2DTestScene(); } },
{ &Box2dTestBed&, []() { return new Box2dTestBedScene(); } },
{ &BugsTest&, []() { return new BugsTestScene(); } },
#if (CC_TARGET_PLATFORM != CC_PLATFORM_MARMALADE)
{ &ChipmunkTest&, []() { return new ChipmunkAccelTouchTestScene(); } },
{ &ClickAndMoveTest&, [](){return new ClickAndMoveTestScene(); } },
#if (CC_TARGET_PLATFORM != CC_PLATFORM_MARMALADE)
{ &ClippingNodeTest&, []() { return new ClippingNodeTestScene(); } },
{ &CocosDenshionTest&, []() { return new CocosDenshionTestScene(); } },
{ &ConfigurationTest&, []() { return new ConfigurationTestScene(); } },
{ &ConsoleTest&, []() { return new ConsoleTestScene(); } },
#if (CC_TARGET_PLATFORM != CC_PLATFORM_EMSCRIPTEN)
#if (CC_TARGET_PLATFORM != CC_PLATFORM_NACL)
#if (CC_TARGET_PLATFORM != CC_PLATFORM_MARMALADE)
#if (CC_TARGET_PLATFORM != CC_PLATFORM_BADA)
{ &CurlTest&, []() { return new CurlTestScene(); } },
{ &CurrentLanguageTest&, []() { return new CurrentLanguageTestScene(); } },
{ &DrawPrimitivesTest&, [](){return new DrawPrimitivesTestScene();} },
{ &EventDispatcherTest(NEW)&, []() { return new EventDispatcherTestScene(); } },
{ &EffectAdvancedTest&, []() { return new EffectAdvanceScene(); } },
{ &EffectsTest&, [](){return new EffectTestScene();} },
{ &ExtensionsTest&, []() { return new ExtensionsTestScene(); } },
{ &FileUtilsTest&, []() { return new FileUtilsTestScene(); } },
{ &FontTest&, []() { return new FontTestScene(); } },
{ &IntervalTest&, [](){return new IntervalTestScene(); } },
{ &KeyboardTest&, []() { return new KeyboardTestScene(); } },
#if (CC_TARGET_PLATFORM != CC_PLATFORM_BADA)
{ &KeypadTest&, []() { return new KeypadTestScene(); } },
{ &LabelTest&, [](){return new AtlasTestScene(); } },
{ &LabelTestNew&, [](){return new AtlasTestSceneNew(); } },
{ &LayerTest&, [](){return new LayerTestScene();} },
{ &MenuTest&, [](){return new MenuTestScene();} },
{ &MotionStreakTest&, [](){return new MotionStreakTestScene();} },
{ &MouseTest&, []() { return new MouseTestScene(); } },
{ &MutiTouchTest&, []() { return new MutiTouchTestScene(); } },
{ &NodeTest&, [](){return new CocosNodeTestScene();} },
{ &ParallaxTest&, [](){return new ParallaxTestScene(); } },
{ &ParticleTest&, [](){return new ParticleTestScene(); } },
{ &PerformanceTest&, []() { return new PerformanceTestScene(); } },
{ &PhysicsTest&, []() { return new PhysicsTestScene(); } },
{ &RenderTextureTest&, [](){return new RenderTextureScene(); } },
{ &RotateWorldTest&, [](){return new RotateWorldTestScene(); } },
{ &SceneTest&, [](){return new SceneTestScene();} },
{ &SchedulerTest&, [](){return new SchedulerTestScene(); } },
{ &ShaderTest&, []() { return new ShaderTestScene(); } },
{ &ShaderTestSprite&, []() { return new ShaderTestScene2(); } },
{ &SpineTest&, []() { return new SpineTestScene(); } },
{ &SpriteTest&, [](){return new SpriteTestScene(); } },
{ &TextInputTest&, [](){return new TextInputTestScene(); } },
{ &Texture2DTest&, [](){return new TextureTestScene(); } },
#if (CC_TARGET_PLATFORM != CC_PLATFORM_MARMALADE)
{ &TextureCacheTest&, []() { return new TextureCacheTestScene(); } },
{ &TexturePackerEncryption&, []() { return new TextureAtlasEncryptionTestScene(); } },
{ &TileMapTest&, [](){return new TileMapTestScene(); } },
{ &TouchesTest&, [](){return new PongScene();} },
{ &TransitionsTest&, [](){return new TransitionsTestScene();} },
{ &UserDefaultTest&, []() { return new UserDefaultTestScene(); } },
{ &ZwoptexTest&, []() { return new ZwoptexTestScene(); } },
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:5503次
排名:千里之外&>&&>&&>&&>&cocos2d-x-2.0中CCScrollView的使用Demo
cocos2d-x-2.0中CCScrollView的使用Demo
上传大小:2.76MB
cocos2d-x-2.0中CCScrollView的使用Demo
综合评分:4.2(213位用户评分)
收藏((4))
所需积分:0
下载次数:1434
审核通过送C币
创建者:nigelyq
创建者:nigelyq
课程推荐相关知识库
上传者其他资源上传者专辑
移动开发热门标签
VIP会员动态
android服务器底层网络模块的设计方法
所需积分:0
剩余积分:720
您当前C币:0
可兑换下载积分:0
兑换下载分:
兑换失败,您当前C币不够,请先充值C币
消耗C币:0
你当前的下载分为234。
cocos2d-x-2.0中CCScrollView的使用Demo
会员到期时间:
剩余下载次数:
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可奖励20下载分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:cocos2d-x(23)
1.CCOrbitCamera
2.CCFollow精灵跟随动画
CCFollow动作,可以让一个节点跟随另一个节点做位移。
他有两个静态工厂方法,后者可以设置一个跟随范围,离开范围就不再跟随。
bool initWithTarget (CCNode *pFollowedNode)
bool initWithTarget (CCNode *pFollowedNode, const CCRect &rect)
CCFollow经常用来设置layer跟随sprite,可以实现类似摄像机跟拍的效果。
3.Anchor Point 和 Position
1). anchor是一个CGPOINT,取值在(0.0f, 0,0f) 到 (1.0f, 1.0f)之间。
2). (0.0f, 0.0f)是这个CCSprite矩形区域的左下角,(1.0f, 1.0f)是右上角。
3). anchor决定了这个sprite的position指的是图片中哪个部分的位置,比如anchor在(0.0f, 0.0f),position在(100, 100),则这个sprite的左下角将被放在(100, 100)。
4). anchor决定对这个sprite进行旋转的原点。
5). anchor决定了对这个sprite进行缩放的原点。
4.cocos2d-x 坐标系:CCPoint convertToWorldSpace(const CCPoint& nodePoint);
5.void RenderTextureZbuffer::renderScreenShot()中的获取当前层图像的方法:this-&visit()后,怎么就到了texture中?
samples\Cpp\TestCpp\Classes\RenderTextureTest\RenderTextureTest.cpp
//渲染屏幕快照
void RenderTextureZbuffer::renderScreenShot()
&&& //创建一个512,512大小的渲染目标纹理。
&&& CCRenderTexture *texture = CCRenderTexture::create(512, 512);
&&& //如果无效直接返回。
&&& if (NULL == texture)
&&& //设置锚点为左下角。
&&& texture-&setAnchorPoint(ccp(0, 0));
&&& //开始渲染到目标纹理。
&&& texture-&begin();
&&& //将当前层渲染一遍。
&&& this-&visit();
&&& //结束渲染到目标纹理。
&&& texture-&end();
&&& //创建一个精灵。
&&& CCSprite *sprite = CCSprite::createWithTexture(texture-&getSprite()-&getTexture());
&&& //设置精灵的位置,透明度,Y方向翻转。
&&& sprite-&setPosition(ccp(256, 256));
&&& sprite-&setOpacity(182);
&&& sprite-&setFlipY(1);
&&& //将精灵放入到当前层的最前面。
&&& this-&addChild(sprite, 999999);
&&& //设置为绿色。
&&& sprite-&setColor(ccGREEN);
&&& //让精灵运行一个动画序列,表现为渐渐消失。
&&& sprite-&runAction(CCSequence::create(CCFadeTo::create(2, 0),
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& CCHide::create(),
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& NULL));
6.cocos2d 中 zorder 和 setVertexZ 的区别
1,zorder只在同辈中以及和父母起作用。大于0在父母上面,小于在下面,和坐标转换没有关系。
2,zvertex是局域的z值。虽然表面上也是大于0在父母上面,小于在下面。但zorder不管子的order多少,只要父母的zorder比其他东西大,父母的子也一定在其他东西的上面。但zvertex是遵循坐标转换原则,在换算到世界坐标后再比较。
3,zvertex可以是小数,但是不能太大,大过摄像机的近切面或者远切面就不会被显示了。zorder可以很大,但是只能是整数。
4,本质上zorder控制渲染顺序,zvertex只有在深度测试打开后才会影响画面。默认情况下深度测试时关闭的。
5,zvertex只有在使用正交摄像机的时候才能不影响xy值。默认不是正交摄像机。这是因为cocos建议使用zorder来控制上下关系,所以一般情况所有的zvertex都为0。也就不需要深度检测和正交摄像机了。
6,使用zorder的还有个好处是:因为alphablend和ztest有冲突的地方。在只使用zorder时候,可以不开ztest,这样就不冲突了
&7.在cocos2d-x中有一种指针的用法没有理解,比如CCMenuItem类中:
在CCMenuItem.h中定义如下:
class CC_DLL CCMenuItem : public CCNodeRGBA
protected:
SEL_MenuHandler
在CCMenuItem.cpp中,初始化如下:
bool CCMenuItem::initWithTarget(CCObject *rec, SEL_MenuHandler selector)
setAnchorPoint(ccp(0.5f, 0.5f));
m_pListener =
m_pfnSelector =
m_bEnabled =
m_bSelected =
调用如下:
void CCMenuItem::activate()
if (m_bEnabled)
if (m_pListener && m_pfnSelector)
//这一句该怎么理解?
(m_pListener-&*m_pfnSelector)(this);
if (kScriptTypeNone != m_eScriptType)
CCScriptEngineManager::sharedManager()-&getScriptEngine()-&executeMenuItemEvent(this);
又如在CCNotificationObserver.cpp中:
void CCNotificationObserver::performSelector(CCObject *obj)
if (m_target)
if (obj) {
(m_target-&*m_selector)(obj);
(m_target-&*m_selector)(m_object);
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:760355次
积分:9388
积分:9388
排名:第1762名
原创:104篇
转载:464篇
评论:181条
(2)(2)(9)(19)(13)(3)(12)(40)(32)(13)(29)(15)(7)(12)(37)(15)(23)(12)(20)(12)(13)(20)(31)(16)(11)(11)(3)(22)(16)(25)(13)(9)(12)(24)(8)(7)本站文章信息来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-!
无人驾驶汽车如何改变城市生活?听听他们怎么说
英国研发“杀生”机器人 通过生命体获取能量
韩春雨称已能重复实验结果 近期将有消息公布
未来两年人工智能要怎么走?看这篇就够了
据国外媒体报道,在过去两年内,聊天机器人(chatbot)、人工智能以及机器学习的研发和采用取得了巨大进展。许多初创公司正利用人工智能和...
霍金 视觉中国 图 英国著名物理学家霍金(Stephen Hawking)再次就人工智能(AI)发声,他认为:对于人类来说,强大AI的出现可能是最美妙的...
文|郑娟娟 今年,人工智能(AI) 60岁了。在AI60岁的时候,笔者想要介绍一下AI100,一个刚刚2岁的研究项目,但它的预设寿命是100年,甚至更长...
AlphaGo与李世石的人机大战,为大众迅速普及了人工智能的概念。 但对谷歌而言,除了下围棋,现在的人工智能进展到哪一步了?未来,人工智能...

我要回帖

更多关于 wdcalendar使用demo 的文章

 

随机推荐