Scenes in Cocos2D
https://www.makeschool.com/docs/?source=mgwu#!/cocos2d/1.0/scenes
Scenes in Cocos2D
In Cocos2D you have to have a CCScene as the root node of your scene graph. CCScene is a subclass of CCNode. Any CCNode subclass can be added to a scene by using the addChild: method. By default any CCScene is initialized as a full screen node. Only one CCScene can be active at a time. The currenty active scene is considered on the stage.
Scene lifecycle
Cocos2D provides multiple lifecyle events that can be relevant for your scenes and other nodes in your scene. These events are trigerred when a scene gets initialized and when it becomes active/inactive. Each of the scene transition events is represented by one method in CCNode that gets called by the CCDirector. You can override these methods in any CCNode. The Objective-C default initializer method init gets called when scene/node is initialized from Cocos2D code. When you created your scene/node in SpriteBuilder didLoadFromCCB is the designated initializer method. Here is an overview of all the lifecycle methods:
init: The default Obj-C initializer. If the scene is not created in SpriteBuilder you mostly use this method to build the scene by adding different nodes as children.
didLoadFromCCB: If you created your scene in SpriteBuilder this method is called when the complete scene is loaded and all code connections are set up. You implement this method to access and manipulate the content of the scene. You cannot access child nodes of the scene or code connection variables before this method is called.
onEnter: This method gets called as soon as the replacement of the currently active scene with this scene begins. If you are using an animated scene transition this method will be called at the beginning of the transition. You can add any code that shall be executed when the scene starts to enter the stage.
onEnterTransitionDidFinish: If you are using an animated scene transition this method will be called when the transition finishes. If you are not using transitions this method is called at the same time as
onEnter. Implement this method to execute code once the scene has fully entered the stage.onExit: Is called when the scene leaves the stage. If the scene leaves the stage with a transition, this event is called when the transition finishes.
onExitTransitionDidStart: Is called when the scene leaves the stage. If the scene leaves the stage with a transition, this event is called when the transition starts.
Note: you have to call the super implementation when you override
onEnter,onEnterTransitionDidFinish,onExitoronExitTransitionDidStart.
Scene Graph and Scene Management
Each CCScene stores a hierarchy of different CCNode instances. CCScene itself is an invisible node that is only used as a container. Most CCNodesubclasses are used to present an object on the screen (a single color surface or a texture). The hierarchical structure of CCNode instances is called the scene graph.
The following diagram shows multiple different scenes and scene graphs of a game: 
The diagram represents three different scenes of which each contains multiple nodes. There are a couple of takeaways from this diagram:
- CCDirector is the instance that controls which scene gets presented on the stage. One can tell
CCDirectorto present the main menu, the gameplay scene or the highscore scene.CCDirectorwill only present one scene at a time. - CCScenes are used to build a logical group of objects. In Cocos2D this always means one scene represents one screen. One will have scenes for menus, leaderboards, gameplay, etc. Scenes itself don't have a representation, their sole goal is to group
CCNodeinstances. - CCNodes Basically anything that is visible in Cocos2D is a subclass of
CCNode.
Games in Cocos2D consist of different scenes. The flow of the game is defined by telling the CCDirector when which scene shall be presented (menu first, then gameplay, then leaderboard). The content of the scenes is a compilation of different nodes. A CCNode can again contain other CCNode instances. The hierarchy of CCNode instances in a scene is called the scene graph.
Creating a Scene
The default SpriteBuilder and Cocos2D projects come with one scene. For most games you will have to create additional scenes. You can either create scenes in SpriteBuilder or in code.
Create a Scene CCB-File in SpriteBuilder and load the scene in code utilizing CCBReader:
CCScene *gameplayScene = [CCBReader loadAsScene:@"Gameplay"];
Create a subclass of
CCScenein Xcode and intialize:CCScene *gameplayScene = * [GameplayScene scene];
When to create the Scene content
For most games you will create the content for your scenes in SpriteBuilder or in the init method of your CCScene subclass. However, when certain scenes need to allocate a lot of memory it can be helpful to create the actual scene content in the onEnter method and removing it when onExit is called. This way the memory is only used when the scene is active on the stage.
Switching between Scenes
The CCDirector is responsible for presenting and hiding scenes. The easiest way to replace a scene, without a transition is using the replaceScene: method:
[[CCDirector sharedDirector] replaceScene:gameplayScene];
Using this method the CCDirector will replace the currently active scene with the gameplayScene.
Transitioned Scene Changes
If you want to provide a transition effect for swapping the scene you can use the replaceScene:withTransition:. It takes a CCTransition as parameter. A CCTransition can be easily created using one of the initializer methods that provide pre defined transition effects:
CCTransition *transition = [CCTransition transitionCrossFadeWithDuration:1.f];
[[CCDirector sharedDirector] replaceScene:gameplayScene withTransition:transition];
To get an overview of the different available transitions and the transition options, take a look at the Cocos2D class reference for CCTransition.
Using the Scene Navigation stack
Another option instead of replacing scenes is pushing and popping scenes. When you push a new scene, the old scene gets deactivated but remains in a the stack of scenes. When you pop a scene that scene gets removed from the navigation stack and the top most controller of the navigation stack gets presented.
Cocos2D provides methods to pop and push scenes with or without transitions:
pushScene:withTransition:popScene:withTransition:pushScene:popScene
Additionally there is a popToRootScene method that empties the complete navigation stack and returns to the first scene.
When building User Interfaces with multiple scenes (e.g. menu structures) you should use the navigation stack instead of manually replacing scenes. The most common pattern is to provide a back button that pops the latest scene on the navigation stack.
Scenes in Cocos2D的更多相关文章
- 高屋建瓴 cocos2d-x-3.0架构设计 Cocos2d (v.3.0) rendering pipeline roadmap(原文)
Cocos2d (v.3.0) rendering pipeline roadmap Why (the vision) The way currently Cocos2d does rendering ...
- cocos2d-x项目101次相遇: Scenes , Director, Layers, Sprites
cocos2d-x 101次相遇 / 文件夹 1 安装和环境搭建 -xcode 2 Scenes , Director, Layers, Sprites 3 建立图片菜单 4 在 ...
- cocos2d Programming Guide
http://python.cocos2d.org/doc/programming_guide/index.html The cocos2d Programming Guide provides in ...
- cocos2d学习网址
http://python.cocos2d.org/doc/programming_guide/index.html http://bbs.tairan.com/article-25-1.html h ...
- 小尝试一下 cocos2d
好奇 cocos2d 到底是怎样一个框架,正好有个项目需要一个游戏框架,所以稍微了解了一下.小结一下了解到的情况. 基本概念 首先呢,因为 cocos2d 是基于 pyglet 做的,你完全可以直接用 ...
- 采用cocos2d-x lua 制作数字滚动效果样例
require "Cocos2d"require "Cocos2dConstants"local testscene = class("testsce ...
- Cocos2d 利用继承Draw方法制作可显示三维数据(宠物三维等)的三角形显示面板
很久没有写博客了,这段时间比较忙,又是搬家又是做自己的项目,还有太多琐碎的事情缠身,好不容易抽出时间把最近自己做的一些简单例子记录一下. 在我的项目中,我需要一个显示面板来显示游戏中的一个三维数据,例 ...
- iPhone开发与cocos2d 经验谈
转CSDN jilongliang : 首先,对于一个完全没有mac开发经验,甚至从没摸过苹果系统的开发人员来说,首先就是要熟悉apple的那一套开发框架(含开发环境IDE.开发框架uikit,还有开 ...
- cocos2d学习记录
视频 - http://www.manew.com/forum-105-3.html一个论坛帖 - http://www.zhihu.com/question/21114802官网 - http:// ...
随机推荐
- compileReleaseJavaWithJavac
如果你打release 包的时候,出现这个问题,那么请你先跑一下程序,肯定是有什么方法名,或者什么东西没找到. release 的时候不会报错,只有你跑的时候才会报错.
- Java学习笔记23---内部类之局部内部类只能访问final的局部变量
局部内部类是定义在方法体或代码块中的类,在笔记19中已有过简单介绍. 今天要讨论的是局部内部类为什么只能访问为常量的局部变量. 作者: 博客园--蝉蝉 请尊重作者劳动成果,转载请在标题注明“转载”字样 ...
- PJMEDIA之录音器的使用(capture sound to avi file)
为了熟悉pjmedia的相关函数以及使用方法,这里练习了官网上的一个录音器的例子. 核心函数: pj_status_t pjmedia_wav_writer_port_create ( pj_pool ...
- 《Cracking the Coding Interview》——第9章:递归和动态规划——题目1
2014-03-20 02:55 题目:小朋友跳台阶,每次跳1层或2层,那么跳N层总共有多少种跳法. 解法:斐波那契数列. 代码: // 9.1 A child can run up the stai ...
- python学习笔记五:模块和包
一.模块用import导入 cal.py: #!/usr/bin/python def add(x,y): return x+y if __name__ == '__main__': print ad ...
- 【Max Points on a Line 】cpp
题目: Given n points on a 2D plane, find the maximum number of points that lie on the same straight li ...
- Eclipse安装使用
1.访问https://www.eclipse.org/downloads/下载最新的Eclipse工具包或者百度通过其他路径下载需要的版本 2.下载完成后将压缩包进行解压的得到相应的文件 3.进入解 ...
- mac虚拟机上(centos系统)怎样实现共享本机文件
首先加载vboxadditions,可以从https://download.virtualbox.org/virtualbox/下载,记得一定要跟virtualBox版本对应 然后打开virtualb ...
- Oz 创建Debian8镜像
<template> <name>Debian8.7-zxy</name> <os> <name>Debian</name> & ...
- 用Linkedhashmap的LRU特性及SoftReference软引用构建二级缓存
LRU: least recently used(近期最少使用算法).LinkedHashMap构造函数可以指定其迭代顺序:LinkedHashMap(int initialCapacity, flo ...