如果你是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
{
public:
TestController();
~TestController();
//菜单回调函数
void menuCallback(Object * sender);
//关闭按钮回调函数
void closeCallback(Object * sender);
//触摸开始回调函数
bool onTouchBegan(Touch* touches, Event *event);
//触摸移动回调函数
void onTouchMoved(Touch* touches, Event *event);
//鼠标滚动回调函数
void onMouseScroll(Event *event);
private:
Point _beginPos;
Menu* _itemMenu;
};
#endif
看看如何初始化该类的
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_testCount; ++i)
{
// #if (CC_TARGET_PLATFORM == CC_PLATFORM_MARMALADE)
// auto label = LabelBMFont::create(g_aTestNames[i].c_str(), "fonts/arial16.fnt");
// #else
auto label = LabelTTF::create( g_aTestNames[i].test_name, "Arial", 24);
// #endif
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,