[置顶] 【cocos2d-x入门实战】微信飞机大战之二:别急,先处理好CCScene和CCLayer的关系
转载请表明地址:http://blog.csdn.net/jackystudio/article/details/11713197
在整个游戏开始之前,我们先看一下HelloWorld示例中CCScene和CCLayer之间的关系是怎么处理的。
//HelloWorldScene.h
#ifndef __HELLOWORLD_SCENE_H__
#define __HELLOWORLD_SCENE_H__ #include "cocos2d.h" class HelloWorld : public cocos2d::CCLayer
{
public:
virtual bool init(); static cocos2d::CCScene* scene();//通过此函数获取场景指针 LAYER_CREATE_FUNC(HelloWorld);
}; #endif // __HELLOWORLD_SCENE_H__
//HelloWorldScene.cpp
#include "HelloWorldScene.h" USING_NS_CC; CCScene* HelloWorld::scene()
{
CCScene *scene = CCScene::create();//创建并返回场景指针 HelloWorld *layer = HelloWorld::create(); scene->addChild(layer); return scene;
} bool HelloWorld::init()
{
if ( !CCLayer::init() )
{
return false;
}
return true;
}
cocos2d-x的示例中采用的是创建一个继承于CCLayer的HelloWorldScene,然后通过HelloWorldScene这个Layer中提供一个产生CCScene的指针的静态函数,获取场景的指针,载入场景。
但是我们这里并不打算这么做,通过一个CCLayer的子类来获取CCScene的指针,这样用起来很奇怪,所以,我把CCScene和CCLayer严格的分开来使用。
1.创建GameScene类继承于CCScene。
2.创建GameLayer类继承于CCLayer。
3.为GameScene添加成员变量 GameLayer* _gameLayer。
4.在GameScene的init里把_gameLayer add到场景中。
这样就能把GameScene和GameLayer结合起来,同时又分工独立。在后面的其他场景也是这样进行处理的。GameScene的结构如下。
//GameScene.h
#pragma once #include "cocos2d.h"
#include "GameLayer.h" USING_NS_CC; class GameScene :
public CCScene
{
public: GameScene(void); ~GameScene(void); SCENE_CREATE_FUNC(GameScene); virtual bool init(); GameLayer* _gameLayer;//把GameLayer暴露给GameScene };
//GameScene.cpp
#include "GameScene.h" GameScene::GameScene(void)
{
_gameLayer=NULL;
} GameScene::~GameScene(void)
{
} bool GameScene::init()
{
bool bRet=false;
do
{
CC_BREAK_IF(!CCScene::init());
_gameLayer=GameLayer::create();//在这里获取GameLayer实例
CC_BREAK_IF(!_gameLayer);
this->addChild(_gameLayer);//add _gameLayer到场景中
bRet=true;
} while (0); return bRet;
}
而GameLayer就不再产生场景指针了。导演类直接从GameScene中获取场景指针。GameLayer其余部分的结构和HelloWorldScene就一致了。
//AppDelegate.cpp
CCScene *pScene = GameScene::create();
pDirector->runWithScene(pScene);
[置顶] 【cocos2d-x入门实战】微信飞机大战之二:别急,先处理好CCScene和CCLayer的关系的更多相关文章
- [置顶] 【cocos2d-x入门实战】微信飞机大战之六:子弹层的处理
这一篇将会处理完子弹层的其他要点. 1.子弹的初始位置 子弹的初始位置在飞机的机头位置,因为飞机在游戏的过程中会随着玩家的触摸而改变其位置,所以,子弹的初始位置只能以当前飞机位置为基准进行添加. CC ...
- [置顶] 【cocos2d-x入门实战】微信飞机大战之三:飞机要起飞了
转载请表明地址:http://blog.csdn.net/jackystudio/article/details/11730601 不过明眼人一看就知道起飞的不是飞机,是背景,相对运动引起的错觉. 1 ...
- [置顶] 【cocos2d-x入门实战】微信飞机大战之四:飞机登场咯
转载请表明地址:http://blog.csdn.net/jackystudio/article/details/11757175 昨天收到了电子工业出版社寄过来的<cocos2d-x游戏开发之 ...
- [置顶] 【cocos2d-x入门实战】微信飞机大战之十三:游戏场景过渡
原创作品,转载请标明:http://blog.csdn.net/jackystudio/article/details/12082043 游戏是实现了,但是如果有个欢迎界面和一个结束界面就更好了. 欢 ...
- [置顶] 【cocos2d-x入门实战】微信飞机大战之十二:分数的本地存储
转载请表明地址:http://blog.csdn.net/jackystudio/article/details/12036237 作为一个单机游戏,连分数存储的的功能都没有,让它怎么在单机游戏圈里混 ...
- 【一】仿微信飞机大战cocos2d-x3.0rc1
參考 [偶尔e网事] 的 [cocos2d-x入门实战]微信飞机大战 cocos2dx 2.0版本号,偶尔e网事他写的很具体,面面俱到,大家很有必要看下.能够通过以下链接跳转: cocos2d-x入 ...
- 用DIV+Css+Jquery 实现的旧版微信飞机大战。
用jquery 实现的旧版微信飞机大战. 以前一直都是做后台和业务逻辑,前端很少去做, 现在个小游戏. 方向键控制方向,Ctrl 键 放炸弹(当然你的有炸弹,哈哈)! 主要都是用div+Css实现的, ...
- Cocos2d-x 3.0final 终结者系列教程16-《微信飞机大战》实现
看到cocos2d-x推出了3.1版本号,真是每月一次新版本号,速度. 另一个好消息就是http://cn.cocos2d-x.org/上线了,祝贺!啥时候把我的视频和教程放上去呢?!! . 视频下载 ...
- 用Javascript模拟微信飞机大战游戏
最近微信的飞机大战非常流行,下载量非常高. 利用JS进行模拟制作了一个简单的飞机大战[此源码有很多地方可以进行重构和优化] [此游戏中没有使用HTML5 任何浏览器都可以运行]. 效果图: 原理:利用 ...
随机推荐
- [LeetCode]题解(python):150-Evaluate Reverse Polish Notation
题目来源: https://leetcode.com/problems/evaluate-reverse-polish-notation/ 题意分析: 给定一个数组,用这个数组来表示加减乘除,例如 [ ...
- AutoIt 函数学习之----WinWaitActive
WinWaitActive函数 暂停脚本的执行直至指定窗口被激活(成为活动状态)为止. WinWaitActive ( "窗口标题"[, "窗口文本"[, 超时 ...
- 7.java.lang.IllegalAccessException
java.lang.IllegalAccessException 没有访问权限 当应用程序要调用一个类,但当前的方法即没有对该类的访问权限便会出现这个异常.对程序中用了Package的情况下要注意这个 ...
- Oracle当前用户SQL
select sesion.sid,sesion.serial#,sesion.username,sesion.sql_id,sesion.sql_child_number,optimizer_mod ...
- [Leetcode][Python]33: Search in Rotated Sorted Array
# -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 33: Search in Rotated Sorted Arrayhttps ...
- cors技术
简称跨域资源共享: 若是配置nodejs: 需在公共路由添加三句话:代码如下: // 全局头设置 app.all('*', function(req, res, next) { res.set({ ' ...
- 链表-Add Two Numbers
第一版代码(很挫很罗嗦,不过是第一次做,记录一下成长的脚步!继续努力!) /*struct ListNode { int val; struct ListNode *next; };*/ typede ...
- 判断一个指定的Service是否存在的方法
这是一个判断一个指定的Service是否存在的方法.它被用于监视一个Service是否由于已经运转,如果由于各种原因Service已经被停止了.这是在重新启动指定Service.它被用于一个Appli ...
- HTML之学习笔记(三)文本标签
标题标签 html的标题标签从h1~h6共六个级别,权值不断降低,即不断变小,不用使用CSS控制来取代h标签,因为网页搜索引擎通过搜索到你的页面,找到你页面的h标签并为h标签建立索引,如果h标签被替代 ...
- JavaScript之Ajax
简介:AJax是在2005年被Adaptive Path的Jesse James Garrett发明的,用户概括异步加载页面内容的技术---说通俗点,Ajax就是实现局部页面通过JavaScript与 ...