sprite我暂时简单理解为一个可以移动的实体,随便什么都可以,就是一张贴图,移动,不过可以变换动作(另一张贴图)。
吐槽一下:cocos2d-x的C++代码写的不是很严谨。
下面我们来看下创建的基本流程:
class HelloWorld : public cocos2d::CCLayerColor
我们的HelloWorld继承CCLayerColor,为毛不是CCLayer呢,因为根据教程上将 我们酱紫可以设置背景色,其实实际中都是贴图,如果游戏只出现一个纯色作为背景色,玩家会吐你一脸。
建立场景时会这么做:
bool AppDelegate::applicationDidFinishLaunching()
{
// initialize director
CCDirector *pDirector = CCDirector::sharedDirector();
pDirector->setOpenGLView(CCEGLView::sharedOpenGLView());
// turn on display FPS
pDirector->setDisplayStats(true);
// set FPS. the default value is 1.0/60 if you don't call this
pDirector->setAnimationInterval(1.0 / 60);
// create a scene. it's an autorelease object
CCScene *pScene = HelloWorld::scene();
// run
pDirector->runWithScene(pScene);
return true;
}
当然这是cocos2d-x的末班自动生成的。
那里面要生成精灵嘛:
CCScene* HelloWorld::scene()
{
CCScene * scene = NULL;
do
{
// 'scene' is an autorelease object
scene = CCScene::create();
CC_BREAK_IF(! scene);
// 'layer' is an autorelease object
HelloWorld *layer = HelloWorld::create();
CC_BREAK_IF(! layer);
// add layer as a child to scene
scene->addChild(layer);
} while (0);
// return the scene
return scene;
}
里面的create会调到:
CCScene *CCScene::create()
{
CCScene *pRet = new CCScene();
if (pRet && pRet->init())
{
pRet->autorelease();
return pRet;
}
else
{
CC_SAFE_DELETE(pRet);
return NULL;
}
}
也就是init也是真正需要我们定制的:
// on "init" you need to initialize your instance
bool HelloWorld::init()
{
if (!CCLayerColor::initWithColor( ccc4(255,255,255,255) ))
{
return false;
}
CCSize winSize = CCDirector::sharedDirector()->getWinSize();
CCSprite *player = CCSprite::create("Player.png",
CCRectMake(0,0,27,40));
player->setPosition(ccp(player->getContentSize().width/2, winSize.height/2));
addChild(player);
schedule(schedule_selector(HelloWorld::gameLogic),1.0);
return true;
}
看见没,上面就调用了CCLayerColor的函数了。然后里面创建了一个精灵。当然里面还有不严谨的地方,之后我会指出来。
我们看重要的一句逻辑:
schedule(schedule_selector(HelloWorld::gameLogic),1.0);
这句的作用 API有说明:Callback interval time in seconds. 0 means tick every frame, 就是每隔一段时间回调一次。当然我们使用这个回调来产生敌人的。
依次调用的函数有:
void HelloWorld::gameLogic( float dt )
{
addTarget();
}
void HelloWorld::addTarget()
{
CCSprite* target = CCSprite::create("Target.png", CCRectMake(0,0,27,40));
if (NULL == target)
{
CCLOG("Create target failed");
return;
}
CCSize winSize = CCDirector::sharedDirector()->getWinSize();
const int minY = target->getContentSize().height/2;
const int maxY = winSize.height-minY;
const int rangeY = maxY- minY;
const int actualY = (rand()%rangeY)+minY;
target->setPosition(ccp(winSize.width+target->getContentSize().width/2, actualY));
addChild(target);
const int minDuration = 2;
const int maxDuration = 4;
const int rangeDuration = maxDuration-minDuration;
const int actualDuration = (rand()%rangeDuration)+minDuration;
CCFiniteTimeAction* action = CCMoveTo::create((float)actualDuration, ccp(-target->getContentSize().width/2, actualY));
CCFiniteTimeAction* actionMoveDone = CCCallFuncN::create( this,callfuncN_selector(HelloWorld::spriteMoveFinished));
target->runAction(CCSequence::create(action,actionMoveDone,NULL));
}
看到没,上面的函数段加了
if (NULL == target)
{
CCLOG("Create target failed");
return;
}
源代码是木有的,我认为这是应该的。
上面的代码主要是用来添加敌人,设置动作开始、结束。
好了。大家可以直接去下载代码,编译,享受搞出来可以动弹的画面的快乐吧。
分享到:
相关推荐
官网中文docs文档的例子下载 创建工程的时候一定要创建一样的文件名 http://www.cocos2d-x.org/docs/tutorial/framework/native/how-to-drag-and-drop-sprites/zh
第1章 Cocos2D-X引擎的介绍 1 1.1 何为游戏引擎 1 1.1.1 游戏的核心—引擎 1 1.1.2 引擎的特点 2 1.1.3 知名的引擎介绍 4 1.1.4 引擎的分类 5 1.2 Cocos2D-X引擎的来历 8 1.3 引擎的版本 9 1.4 下载与安装 10 1.5 ...
本文实践自 Ray Wenderlich、Tony Dahbura 的文章《How to Use Animations and Sprite Sheets in Cocos2D 2.X》,文中使用Cocos2D,我在这里使用Cocos2D-x 2.1.4进行学习和移植。在这篇文章,将会学习到如何创建一个...
是由object-C移植而来的JavaScript版本。 主要功能: 流程控制(Flow control):非常容易地管理不同场景(scenes)之间的流程控制 ...http://article.ityran.com/archives/tag/cocos2d-html5系列教程
Cocos2d-x 动态光照演示这个简单的 Cocos2d-x 项目演示了如何从精灵表加载精灵帧创建动画用法线贴图初始化点光源效果并启发你的动画这是完整的教程:设置为了保持存储库的大小,我们没有将 Cocos2d-x 本身添加到存储...
cocos2d-x来加载资源,除了常用的方法之外,我们还可以用plist来创建一个资源组,这样不仅在加载多个资源是方便,而且还利于管理,那么怎么使用plist呢,下面我就举一个简单的例子,来和大家共同学习一下plist。
我写了一个比较完整的类,给cocos2d-x的朋友使用。 支持浮点数字的显示和整形 创建的时候调用 Number* num = Number::create(); 之后设置一个KeyName 假设你的图片叫 baise0.png,baise1.png...... 小数点的图片是:...
cocos2dx初学者 cocos2dx3.2 创建精灵 更改资源路径 删除及回车键
一个人物奔跑的效果,利用自己写的CAnimate类辅助精灵创建动画
render flash animation in cocos2d-x, a animation sprite extension for cocos2d-x, base on hierarchies node like bone. Sprite类 CCHierarchiesSprite类更注重动画播放性能,通过缓存动画数据获得更高的运行...
一个最小的cocos2d-x iPhone / iPad项目,说明如何在屏幕上拖动精灵。 设置 SpriteDraggerX使用的预构建的Cocos2D-X库。 确保您具有和 ,然后: sudo npm install rapidgame -g rapidgame prebuild cd ...
最近看到网上介绍cocos2d的资料很多,看了看cocos2d也支持wp7,下载了个 Cocos2d-XNA 安装包,写个小例子玩玩,熟悉下cocos2d 程序很简单,就一个入门级的小游戏,写完后放手机里运行了下效果还可以 开发环境 vs2010,...
通过这个例子可以学到了很多有关场景、布景层、精灵、菜单、标签、场景切换动画等很多知识。
使用Cocos Studio 创建的帧动画,使用Cocos Studio 创建帧动画可以提高开发效率,节约开发成本
【iOS-Cocos2d游戏开发之二十一 】自定义精灵类并为你的精灵设置攻击帧以及扩展Cocos2d源码的CCAnimation简化动画创建! http://blog.csdn.net/xiaominghimi/article/details/6993764
用于创建贝塞尔曲线路径,可匀速运动 - Used to create a Bezier curve path with uniform motion 更新日志: 2020.2.7: 新添加三阶贝塞尔曲线 平滑度自定义 该工程基于cocos creator 2.2.2版本! (可以直接在上面...
html5 挺火,写个html5游戏玩玩吧,想起cocos2d 貌似各个平台都有,网上找了找,下载了个Cocos2d-html5引擎包。 貌似另一个开源引擎lufylegend.js也很好,下次用用lufylegend.js试试。 开发环境 chrome Cocos2d-...