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游戏开发初认识(八) 触摸事件与碰撞检測
玩过植物大战僵尸都知道,要在草坪里放一朵向日葵或者其他的植物仅仅需触摸那个植物将其拖入到想要摆放的位置,这事实上就是这节要写的触摸事件.还能够发现当我们的僵尸出来的时候,我们的小豌豆会发子弹攻击僵尸, ...
随机推荐
- C 语言学习guideline
Kernighan和Ritchie的<The C Programming Language>(中译名<C程序设计语言>)堪称经典中的经典,不过旧版的很多内容都已过时,和现在的标 ...
- c/c++优秀博文
C进阶指南(1):整型溢出和类型提升.内存申请和管理 http://blog.jobbole.com/72830/ 软件开发中应避免的10个问题
- React如何性能调优
一. 二.调优例子 <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset=&q ...
- Servlet的response输出到页面时乱码的解决方法
package com.mhb; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.Servle ...
- Java String.compareTo()方法
描述:java.lang.String.compareTo() 方法比较两个字符串的字典. 比较是基于字符串中的每个字符的Unicode值.此String对象表示的字符序列的 参数字符串表示的字符序列 ...
- Spring中的mappingResources和mappingDirectoryLocations
今天使用Spring+Hibernate进行事务管理,按照顺序也就是配置,DataSource,Sessionfactory,事务管理器以及拦截器. DateSource可以直接使用Hibernate ...
- INSERT ... ON DUPLICATE KEY UPDATE Syntax
一 mybatis中返回自动生成的id 当有时我们插入一条数据时,由于id很可能是自动生成的,如果我们想要返回这条刚插入的id怎么办呢.在mysql数据中我们可以在insert下添加一个selectK ...
- java--面向抽象编程
所谓面向抽象编程是指当设计某种重要的类时,不让该类面向具体的类,而是面向抽象类,及所设计类中的重要数据是抽象类声明的对象,而不是具体类声明的对象.就是利用abstract来设计实现用户需求. 比如:我 ...
- hdu 4617 Weapon(叉积)
大一学弟表示刚学过高数,轻松无压力. 我等学长情何以堪= = 求空间无限延伸的两个圆柱体是否相交,其实就是叉积搞一搞 详细点就是求两圆心的向量在两直线(圆心所在的直线)叉积上的投影 代码略挫,看他的吧 ...
- 根据dwarfdump、Symbolicatecrash查找错误代码
dSYM文件获取:1.build2.Archive 获取app UUID 命令:dwarfdump --uuid YourApp.app.dSYM 1.YourApp.app/YourApp2.You ...