ios游戏开发--cocos2d学习(1)
创建一个cocos2d项目,直接运行,效果如图:

左下角显示当前的帧率,即每秒的帧数,更新屏幕的频率。
---------------------------------------------------------------------------------------------------------------
有几个概念必须要理解:
1.导演类:CCDirector,所有类的父类,控制整个游戏项目的运行,包括场景、人物等的显示.
2.层和布景:CCLayer和CCScene,都继承自CCNode节点类。CCScene类似于现实生活中的场景,在这个场景中又可以铺垫其他的事件,如一个舞台是一个场景,在这个场景中可以上演话剧、小品、唱歌等各种节目,那么这节目可以看作是一个CCLayer,我可以创建唱歌层:SingCCLayer,让它继承CCLayer,然后添加元素,就是演员。一个节点CCNode即是一个可视化的元素,如可以创建一个CCLabelTTF标签,放入CCLayer中,或者按钮等,丰富自定义的场景布局。
-------------------------------------------------------------------------------------------
--基础代码讲解--
(1)打开HelloWorldLayer.h头文件,你可以看到HelloWorldLayer类是继承自
CCLayer类的。
CCScene只是一个抽象的概念,默认的设置场景的方法是在你的类里面使用
一个静态初始化方法(static initializer)+(id) scene。此方法会生成一
个CCScene对象,并且将当前自定义层(这里指的是HelloWorldLayer)的对象添加到场景节点中。几乎在任何情况
下,CCScene都是在这里创建和使用的。以下是一个通用的+(id)
scene方法:
+(CCScene *) scene
{
//
创建一个场景,注意场景Scene和层Layer以及各个元素都是CCNode的子类,创建对象时均可用类方法:node
CCScene *scene = [CCScene node];
// 创建一个本类的一个对象
HelloWorldLayer *layer = [HelloWorldLayer node];
// 在场景中添加自定义层
[scene addChild: layer];
// return the scene
return scene;
}
(2)之后就是层Layer的初始化并显示在场景中,跟OC中一样,使用-(id)init方法:
-(id) init
{
if( (self=[super init]) ) {
//
生成和初始化一个标签对象,在2d中标签有3种,CCLabelTTF是其中一种
CCLabelTTF *label = [CCLabelTTF labelWithString:@"Hello
World" fontName:@"Marker
Felt" fontSize];
// 从当前CCDirector得到当前屏幕的尺寸
CGSize size =
[[CCDirector
sharedDirector]
winSize];
// 将标签定位在屏幕中央
label. , size. );
// 将标签添加到视图层中
[self addChild: label];
return self;
}
(3)下面在init方法中做一点小小修改,让它感觉起来是我们动手做过的小程序,而不是一个死的模板。
首先,在init方法中做两处修改:一是启用触摸输入,二是设置一个以后可以用来调用对象的标记:tag。在列表2-3中标出了这两处修改:
-(id) init
{
if( (self=[super init]) ) {
// 生成和初始化一个标签对象,在2d中标签有3种,CCLabelTTF是其中一种
];
// 从当前CCDirector得到当前屏幕的尺寸
CGSize size =
[[CCDirector sharedDirector] winSize];
// 将标签定位在屏幕中央
label.position = ccp(
size. ,
size. );
// 将标签添加到视图层中
[self addChild:
label];
//添加标签tag
label.;//可以用任何数字,但建议用常量
//启动可触摸模式
self.isTouchEnabled=YES;//这样,点击屏幕,相关触摸函数才会响应触摸
return self;
}
(4)响应触摸的函数:
-(void)ccTouchesBegan:(NSSet
*)touches withEvent:(UIEvent *)event{
//CCLabelTTF *label=(CCLabelTTF *)[self
getChildByTag:10];
CCNode
*node=[];
//验证返回的节点是CCLabelTTF类的对象
NSAssert([node isKindOfClass:[CCLabelTTF class]], @"node is not a
CCLabelTTF!");
CCLabelTTF
*label=(CCLabelTTF
*)node;
label.scale=CCRANDOM_0_1();//我们使用了cocos2d
的CCRANDOM_0_1()宏来改变标签的大小属性,使它在0和1之间变化。每次你点
击屏幕都会让标签尺寸发生变化.
}
ios游戏开发--cocos2d学习(1)的更多相关文章
- ios游戏开发--cocos2d学习(2)
在第一节中简单介绍了2d项目模板HelloWorld的基础代码,并做了一点小小的改变,像触摸接收.旋转.移动和颜色转变序列CCSequence的使用等等,2d本身封装好了很多方便使用的动作,只需要调用 ...
- ios游戏开发--cocos2d学习(3)
------------继续上一节的内容. “接收触摸事件”: CCLayer类是用来接收触摸输入的.不过你要首先启用这个功能才可以使用它. self.isTouchEnabled = YES;//此 ...
- 开发者经验谈:如何一天时间搞定iOS游戏开发?
开发者经验谈:如何一天时间搞定iOS游戏开发? 在一天时间里将完成iPhone游戏开发由梦想变为现实? 本文作者给出了从创意转变成现实的详细答案.使用苹果原生游戏引擎SpriteKit,遵循一定的原则 ...
- ios游戏开发 Sprite Kit教程:初学者 1
注:本文译自Sprite Kit Tutorial for Beginners 目录 Sprite Kit的优点和缺点 Sprite Kit vs Cocos2D-iPhone vs Cocos2D- ...
- CocosCreator游戏开发---菜鸟学习之路(一)
PS(废话): 辞职后在家好久好久了,久到经济不允许了,接着就准备再次出去找工作了,然而工作哪有那么好找,特别是像我这种菜鸟.而且我还准备转行,准备去做游戏,技能等级接近于0,那工作就更难找了.既然如 ...
- cocos2d-x ios游戏开发初认识(六) 渲染的优化
做程序开发肯定要考虑到内存的优化,毕竟iphone本身的内存就不是非常大.这一节主要说这个cocos2d开发对内存的优化,详细表如今,既能够对同样的精灵(图片)仅仅渲染一次,也能够对不能的精灵仅仅渲染 ...
- 2011斯坦福大学iOS应用开发教程学习笔记(第一课)MVC.and.Introduction.to.Objective-C
blog.csdn.net/totogo2010/article/details/8205810 目录(?)[-] 第一课名称 MVC and Introduction to Objective-C ...
- cocos2d-x ios游戏开发初认识(九) 音效、粒子系统与存储
我们知道.一个游戏少不了声音.一些好听的声音会提起你对游戏的兴趣,当然做好听的声音不是我们要学的,我们的目的是把声音在适当的时候放出来.顺便在这节中会说下简单的粒子系统和文件存储. 一.声音的播放: ...
- cocos2d-x ios游戏开发初认识(八) 触摸事件与碰撞检測
玩过植物大战僵尸都知道,要在草坪里放一朵向日葵或者其他的植物仅仅需触摸那个植物将其拖入到想要摆放的位置,这事实上就是这节要写的触摸事件.还能够发现当我们的僵尸出来的时候,我们的小豌豆会发子弹攻击僵尸, ...
随机推荐
- 包含中文的字符串中截取前N个字符
package com.wangzhu.string; import java.io.UnsupportedEncodingException; public class SubStringDemo1 ...
- Linux资源监控命令/工具(网络)
1.手动/自动设定与启动/关闭IP参数:ifconfig,ifup,ifdown 这三个指令的用途都是在启动网络接口,不过,ifup与ifdown仅能就/etc/sysconfig/netw ...
- React 性能调优原理
一.React影响性能的两个地方 二.调优原理
- 核心思想:百度网盘怎么盈利(互联网的高速更新决定了:亏钱你还有点机会,放弃连门都进不了),战略预备队 good
百度做网盘很大程度就是为了防止别人依靠网盘做大和积累点技术储备.腾讯邮箱怎么赚钱?腾讯影音怎么赚钱?互联网的高速更新决定了,一些你看不起眼的软件很可能就会席卷整个市场,所以互联网大佬宁愿一些项目亏钱也 ...
- ORA-12571 : TNS : 包写入程序失败
错误原因 解决方案 修改D:/oracle/ora92/network/admin目录下sqlnet.ora,将”NAMES.DEFAULT_DOMAIN =” 这一行用#注释掉,将“SQLNET.A ...
- 将SQLServer2005中的数据同步到Oracle中
有时由于项目开发的需要,必须将SQLServer2005中的某些表同步到Oracle数据库中,由其他其他系统来读取这些数据.不同数据库类型之间的数据同步我们可以使用链接服务器和SQLAgent来实现. ...
- [HIHO1184]连通性二·边的双连通分量(双连通分量)
题目链接:http://hihocoder.com/problemset/problem/1184 题意裸,写个博客记下输出姿势. /* ━━━━━┒ギリギリ♂ eye! ┓┏┓┏┓┃キリキリ♂ mi ...
- ie6调试工具Debugbar
http://www.my-debugbar.com/wiki/Doc/DebugbarInstall
- sdut 2351 In Danger (找规律)
题目:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2351 题意:xyez, xy表示一个十进 ...
- android开发中如何结束所有的activity
每一个activity都有自己的生命周期,被打开了最终就要被关闭. 四种结束当前的activity方法 //关闭当前activity方法一 finish(); //关闭当前界面方法二 android. ...