[Cocos2d-x for WP8学习笔记] 一些基本概念,建立自己的启动界面
流程控制:场景是相对不变的游戏元素集合,游戏在场景间的切换就是流程控制。
场景、层和精灵:它们是不同层次的游戏元素。通常,场景包含层,层包含精灵,场景与层是其他游戏元素的容器,而精灵是展示给玩家的图形。
节点和渲染树:一切可以显示的游戏元素都是渲染树的节点。Cocos2d-x通过遍历渲染树绘制游戏画面。场景、层或精灵作为渲染树节点,我们并没有对它们的层次做硬性限制,例如开发者可以向精灵中添加层。
动作:作用于游戏元素,规定了游戏元素运动的方式。帧动画是作用于精灵的一种特殊动作。
类似Objective-C的代码风格:使用初始化方法或工厂方法创建对象,使用访问器方法模拟属性。Cocos2d-x提供了Objective-C风格的容器CCArray和CCDictionary。
内存管理:类似Objective-C的引用计数内存管理机制,同时提供半自动的对象自动回收池,实现灵活的管理内存。
生命周期:AppDelegate负责控制游戏的生命周期。
首先新建一个MainScene的类,并模仿HelloWorld引入需要的头文件等,项目中加入两张图片,主界面和主界面按钮上的背景。

CCDirector:导演类,控制游戏流程
将AppDelegate中创建的第一个场景改为刚创建的MainScene CCScene *pScene = MainScene::scene();
CCScene:场景,层的容器 CCLayer:层,各种内容的容器
在MainScene中实现一些必须的方法,如初始化等等
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
bool MainScene::init(){ bool bRet = false; do { if ( !CCLayer::init() ) { break; } CCSize size = CCDirector::sharedDirector()->getWinSize(); CCSprite* mainback = CCSprite::create("Background/main_back.jpg"); mainback->setPosition(ccp(size.width * 0.5, size.height * 0.5)); this->addChild(mainback); CCSprite* btback1 = CCSprite::create("Background/main_button_back.png"); btback1->setPosition( ccp(size.width * 0.5, size.height * 0.5) ); CCLabelTTF* pLabelStart = CCLabelTTF::create("Start", "Consolas", 28); pLabelStart->setPosition( ccp(75, 20) ); pLabelStart->setColor(ccc3(0, 0,0)); this->addChild(btback1,1); btback1->addChild(pLabelStart, 5); CCSprite* btback2 = CCSprite::create("Background/main_button_back.png"); btback2->setPosition( ccp(size.width * 0.5, size.height * 0.5-70) ); CCLabelTTF* pLabelExit = CCLabelTTF::create("Exit", "Consolas", 28); pLabelExit->setPosition( ccp(75, 20) ); pLabelExit->setColor(ccc3(0, 0, 0)); btback2->addChild(pLabelExit, 6); this->addChild(btback2,2); setTouchEnabled(true); bRet = true; } while (0); return bRet;} |
在这段代码中,分别添加了一张背景,两张按钮背景,两段文字。
CCSprite:精灵,代表了游戏的最小可见单位。
上面添加的每张图片都是一个精灵。
CCSprite和CCLayer都继承自CCNode,而addChild正是CCNode中的方法,因此可以向层或者精灵中中添加精灵。
下面的代码在MainScene层响应触摸事件,获取坐标,并执行退出操作:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
void MainScene::ccTouchesBegan(CCSet* touches, CCEvent *event){ if(touches->count()==1) { CCTouch* touch = dynamic_cast<CCTouch*>(touches->anyObject()); CCPoint position = touch->getLocationInView(); position=CCDirector::sharedDirector()->convertToGL(position); CCLOG("X = %f Y = %f",position.x,position.y); if(position.x>166&&position.x<313&&position.y>306&&position.y<353) { CCDirector::sharedDirector()->end(); } }} |
本文固定链接: http://blog.liubaicai.com/?p=131 转载请注明
本文固定链接: http://blog.liubaicai.com/?p=157 转载请注明
[Cocos2d-x for WP8学习笔记] 一些基本概念,建立自己的启动界面的更多相关文章
- [Cocos2d-x for WP8学习笔记] HelloWorld结构分析
先来看一下目录结构: Assets:游戏资源文件,图片音频等,Resource文件夹也有类似功能 include:用于放置游戏头文件 Shaders:渲染器着色器文件(大雾) cocos2dorig. ...
- [Cocos2d-x for WP8学习笔记] HelloWorld
Cocos2d-x 是一个支持多平台的 2D 手机游戏引擎,使用 C++ 开发,基于OpenGL ES,基于Cocos2d-iphone,支持 WOPhone, iOS 4.1, Android 2. ...
- deepin linux学习笔记(四)进不去图形界面怎么办?
目录 deepin linux学习笔记(四)进不去图形界面怎么办? 前言 更换成lxde桌面 进不去图形界面怎么办? 总结 deepin linux学习笔记(四)进不去图形界面怎么办? 前言 生命不息 ...
- JavaScript:学习笔记(2)——基本概念与数据类型
JavaScript:学习笔记(2)——基本概念与数据类型 语法 1.区分大小写.Test 和 test 是完全不同的两个变量. 2.语句最好以分号结束,也就是说不以分号结束也可以. 变量 1.JS的 ...
- OpenFlow Switch学习笔记(一)——基础概念
OpenFlow Switch v1.4.0规范是在2013年10月14号发布,规范涵盖了OpenFlow Switch各个组件的功能定义.Controller与Switch之间的通信协议Open F ...
- es6学习笔记-class之一概念
前段时间复习了面向对象这一部分,其中提到在es6之前,Javasript是没有类的概念的,只从es6之后出现了类的概念和继承.于是乎,花时间学习一下class. 简介 JavaScript 语言中,生 ...
- Docker:学习笔记(1)——基础概念
Docker:学习笔记(1)——基础概念 Docker是什么 软件开发后,我们需要在测试电脑.客户电脑.服务器安装运行,用户计算机的环境各不相同,所以需要进行各自的环境配置,耗时耗力.为了解决这个问题 ...
- WP8 学习笔记(001_环境配置)
Step 1 WP8 的开发要求64位操作系统,Windows 8及以上版本,需要激活版,建议网上买一个注册码.详见安装双系统. Step 2 安装好系统并已经激活之后,需要安装Windows Ph ...
- [Cocos2d-x for WP8学习笔记] 获取系统字体
在Cocos2d-x for WP8较新的版本中,获取字体这一块,在wp8下默认返回了null,只能内嵌字体文件解决. 其实可以通过下面的方法获取系统的字体文件 CCFreeTypeFont::loa ...
随机推荐
- ui-router 留存
学习 ui-router - 路由控制 022014年01月 参考原文:https://github.com/angular-ui/ui-router/wiki/URL-Routing 在你的应用中大 ...
- sql 添加索引强大
以前没有亲自添加过索引,今天添加了一下,果真强大.几百倍的速度提升. SELECT * FROM tbl_sys_menu m WHERE m.SID in (SELECT mr.MENU_SID F ...
- PHP - 请求阻塞,Session写阻塞
之前写某些代码的时候,发现用户莫名奇妙地阻塞了,而且这种阻塞的情况还比较难以形容: 使用session过程中,在开启session后,同一浏览器,执行同一程序,不同页面会被锁.不同浏览器不会出现这种情 ...
- Java服务器工程师任职资格
Java服务器端开发工程师 1.Java服务器端3年以上开发经验 2.至少一个完整游戏项目经验 3.熟练掌握OOA.OOD.OOP 4.掌握常见网游协议开发方法 5.对TCP/IP有深入了解 6.对消 ...
- Spring事务管理API
- 遍历List集合时,删除数据的问题
一.问题描述 有时候,我们会遇到在遍历List集合的过程中删除数据的情况. 看着自己写的代码,感觉完全没有问题,但就是达不到预期的效果,这是为什么呢?下面我们来分析下 String str1 = ne ...
- $(window).load()和$(document).ready()
一.前言 我们在编写前端代码的js文件时,往往是会先写一个$(function(){}),然后才会在大括号里面继续写我们自己的代码.当时并不能理解为什么要添加这样一个东西,只是把它当做一个标签一样添加 ...
- Unity3D中暂停时的动画及粒子效果实现
暂停是游戏中经常出现的功能,而Unity3D中对于暂停的处理并不是很理想.一般的做法是将Time.timeScale设置为0.Unity的文档中对于这种情况有以下描述: The scale at wh ...
- Maven01 环境准备、maven项目结构、编译/测试/打包/清除、安装、
0 前提准备 0.1 安装java开发环境 0.2 安装maven工具 1 maven项目基本结构 如图所示,整个maven项目有业务文件.测试文件.POM依赖管理文件:其实还有一个资源文件resou ...
- 关于java是值传递还是引用传递
一.概念 实际上对这两种传递方式,知乎上有个回答说得很好: 值传递和引用传递,属于函数调用时参数的求值策略(Evaluation Strategy),这是对调用函数时,求值和传值的方式的描述,而非传递 ...