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;
}
源代码是木有的,我认为这是应该的。
上面的代码主要是用来添加敌人,设置动作开始、结束。
好了。大家可以直接去下载代码,编译,享受搞出来可以动弹的画面的快乐吧。
分享到:
相关推荐
本书首先会介绍Cocos2d-x 3.x的基础知识,包括安装环境、项目创建、构建流程以及基本的场景管理。读者将学习如何在不同平台上配置Cocos2d-x开发环境,了解项目的目录结构和构建过程,掌握Scene、Layer、Node等核心...
3. **渲染引擎**:Cocos2d-x 3.1包含了强大的2D渲染引擎,能够处理精灵(Sprites)、纹理(Textures)、动画(Animations)、粒子系统(Particle Systems)等图形元素。 4. **场景管理**:使用Scene类来管理游戏的...
此外,Flash2Cocos2d-x 1.3还优化了资源导出的效率和格式,支持导出为cocos2d-x兼容的精灵表(Sprite Sheets)和骨骼动画(Spine或DragonBones)。这样,游戏在运行时可以更有效地加载和渲染动画,提高游戏性能,...
cocos2d-x不仅适用于游戏开发,还可以用于创建教育软件、互动媒体和其他2D图形应用,其强大的场景管理、精灵(Sprite)系统和粒子效果等功能,使得开发者能够快速构建各种复杂的2D场景。 总的来说,cocos2d-x 2.2.2...
Cocos2d-x提供了精灵动画的支持,可以方便地创建和播放帧动画。 3. **动作(Actions)与效果**:Cocos2d-x的动作系统允许开发者对游戏对象施加各种效果,如移动、旋转、缩放、淡入淡出等,实现丰富的视觉表现。 4....
《Cocos2d-x实战C++卷》是关东升所著的一本深入探讨Cocos2d-x游戏引擎开发的专业书籍。Cocos2d-x是一个开源的、跨平台的2D游戏开发框架,广泛应用于iOS、Android、Windows等多个操作系统。本书以C++语言为主要编程...
cocos2d-x 3.0中的cc::Animate类可以轻松管理这些帧,通过`createWithFrames`方法创建动画,并使用`runAction`将动画添加到精灵上。 3. 物理引擎:如果游戏需要更真实的物理效果,比如重力、碰撞检测,可以集成Box...
1. **Cocos2d-x入门**:介绍Cocos2d-x的基本架构,包括场景(Scene)、层(Layer)、节点(Node)等概念,以及如何设置项目环境,创建和管理游戏资源。 2. **图形与动画**:讲解如何使用Cocos2d-x的绘图API绘制2D...
在本项目中,开发者利用cocos2d-x 2.0.4版本创建了一个简单的益智类魔塔小游戏,旨在展示cocos2d-x在跨平台游戏开发中的应用能力。 1. **cocos2d-x框架**: - **C++基础**:cocos2d-x 2.0.4主要采用C++编写,这...
cocos2d-x 是一个跨平台的游戏开发框架,它基于C++,同时提供了Lua和JavaScript的绑定,让开发者可以方便地在多种操作系统上创建2D游戏、演示程序和其他图形交互应用。这个“cocos2d-x-3.8.zip”压缩包包含的是cocos...
首先,Cocos2d-x的核心特性在于它的渲染引擎,它提供了丰富的2D图形绘制功能,如精灵(Sprite)、批次渲染(Batching)、动作(Actions)和转换(Transitions)。开发者可以通过Lua语言调用这些功能,创建出动态的、...
3. **图形渲染**:学习如何使用Cocos2d-x的绘图API,包括纹理、精灵批处理、动画和粒子系统,创建丰富的视觉效果。 4. **物理引擎**:了解Cocos2d-x内置的Box2D或Chipmunk物理引擎,如何模拟真实世界的物理行为,如...
- 掌握Cocos2d-x的基本架构:Cocos2d-x框架中包括场景(Scene)、层(Layer)、精灵(Sprite)、动作(Action)等基本组件,学习如何使用这些组件来构建游戏逻辑。 - 理解资源管理:在Cocos2d-x中,资源管理是开发...
通过学习cocos2d-x的API文档,可以快速上手创建游戏场景、添加交互元素、编写游戏逻辑。同时,利用其提供的工具如cocos console、cocos creator等,可以进行项目构建、调试和资源管理。 五、未来展望 随着cocos2d-x...
4. **精灵(Sprite)和动画(Animation)**:cocos2d-x中的精灵是可移动的2D图像,可以组合成复杂的动画效果。通过SpriteBatchNode优化大批量精灵的渲染效率,同时,使用Animate类实现帧动画。 5. **物理引擎(Physics ...
cocos2d-x是一个开源的游戏开发框架,它基于cocos2d-x,用于创建2D游戏、演示程序和其他图形/交互式应用程序。cocos2d-x是用C++编写的,但同时也支持Lua和JavaScript作为脚本语言,使得开发者可以根据自己的喜好选择...
1. 动画系统:cocos2d-x的动画系统通过组合.plist文件创建精灵动画,例如角色的跑动、跳跃动作。 2. 地图拼接:TMX或CSV格式的文件描述了游戏地图的结构,cocos2d-x的TiledMap类可以加载这些文件,动态拼接地图,...
Cocos2d-x提供了一系列的类,如Scene(场景)、Layer(层)、Sprite(精灵)和Node(节点),它们构成了游戏世界的基本元素。在《保卫萝卜》中,每个萝卜、怪物、炮塔都可能被表示为Sprite,而游戏地图和各种交互...
1. **Cocos2d-x架构**:了解Cocos2d-x的核心组件,如场景(Scene)、层(Layer)、精灵(Sprite)、动作(Action)等,以及如何用Lua来控制这些元素。 2. **Lua与C++交互**:Cocos2d-x支持Lua作为脚本语言,源码会展示如何...
Cocos2d-x 是一个开源的游戏开发框架,主要用于创建2D游戏、图形界面以及实时应用程序。这个框架基于C++,并且提供了多种语言接口,包括Python、JavaScript和Lua,让开发者可以选择他们熟悉的编程语言进行游戏开发。...