模仿HelloWorldScene,写第一个Scene

看了半天的源码,有种看看都懂,一问都不知道的感觉。唉,还是实际点,来敲敲代码吧。

打开我的vs,新建类GameScene。为了公用,把类放在Class文件夹下吧。

一个场景继承cocos2d::Layer这个类,因为每个场景都是由层组成的,所以实现场景所以需要继承Layer。

HelloWorldScene里有四个方法,这应该是实现一个场景最基础的几个方法咯,所以我也在GameScene里仿着写这几个。

	static cocos2d::Scene* createScene();		//静态函数,通过该函数获取场景对象
	virtual bool init();				//初始化Scene函数
	void menuCloseCallback(cocos2d::Ref* pSender);	//关闭按钮回调函数
	CREATE_FUNC(GameScene);				//具体创建GameScene场景的宏函数
	/*
	这是一个宏,具体内容如下:
	#define CREATE_FUNC(__TYPE__) \
	static __TYPE__* create() \
	{ \
	__TYPE__ *pRet = new __TYPE__(); \
	if (pRet && pRet->init()) \
	{ \
	pRet->autorelease(); \
	return pRet; \
	} \
	else \
	{ \
	delete pRet; \
	pRet = NULL; \
	return NULL; \
	} \
	}
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="white-space:pre">		</span>CREATE_FUNC(GameScene);将转化成</span>
<span style="white-space:pre"></span><pre name="code" class="cpp"><span style="white-space:pre">	</span>static GameScene* create {<span style="font-family: Arial, Helvetica, sans-serif;"> </span>
	GameScene *pRet = new GameScene(); 
	if (pRet && pRet->init())
	{ 
	pRet->autorelease(); 
	return pRet;
	} 
	else 
	{ 
	delete pRet; 
	pRet = NULL; 
	return NULL; 
	}
*/

 在头文件定义好后,然后在GameScene.cpp里具体实现。 

USING_NS_CC;
//创建GameScene场景
Scene* GameScene::createScene() {
	auto scene = Scene::create();
	auto layer = GameScene::create();
	scene->addChild(layer);
	return scene;
}

bool GameScene::init() {
	//先实例化父类Layer的init方法,成功返回true,失败返回false
	if (!Layer::init()) {
		return false;
	}

	Size size = Director::getInstance()->getVisibleSize();
	Vec2 origin = Director::getInstance()->getVisibleOrigin();

	auto closeSprite = MenuItemImage::create("CloseNormal.png",//正常状态下的图片
											"CloseSelected.png",//被选中的状态下的图片	
											CC_CALLBACK_1(GameScene::menuCloseCallback, this)); //回调函数地址
	closeSprite->setPosition(Vec2(origin.x + size.width - closeSprite->getContentSize().width / 2,	//设置关闭菜单的大小
										origin.y + size.height - closeSprite->getContentSize().height / 2));
	auto menu = Menu::create(closeSprite, NULL);	//把它加入到菜单里
	menu->setPosition(Vec2::ZERO);<span style="white-space:pre">			</span>//设置菜单的位置
	this->addChild(menu, 1);

}

void GameScene::menuCloseCallback(Ref* pSender) {
	Director::getInstance()->end();
}

在AppDelegate.cpp里引入我这个场景的头文件,然后把初始运行的HelloWorld::createScene()改成我的GameScene::createScene();Ok,编译运行。


黑漆漆的一片,代表这第一步的成功额。。。



--小新

2014-8-19

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值