`
473687880
  • 浏览: 535551 次
文章分类
社区版块
存档分类
最新评论

cocos2d-x创建精灵

 
阅读更多

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游戏开发实战pdf含目录

    本书首先会介绍Cocos2d-x 3.x的基础知识,包括安装环境、项目创建、构建流程以及基本的场景管理。读者将学习如何在不同平台上配置Cocos2d-x开发环境,了解项目的目录结构和构建过程,掌握Scene、Layer、Node等核心...

    cocos2d-x-3.1.zip

    3. **渲染引擎**:Cocos2d-x 3.1包含了强大的2D渲染引擎,能够处理精灵(Sprites)、纹理(Textures)、动画(Animations)、粒子系统(Particle Systems)等图形元素。 4. **场景管理**:使用Scene类来管理游戏的...

    cocos2d-x 动画工具 Flash2Cocos2d-x 1.3

    此外,Flash2Cocos2d-x 1.3还优化了资源导出的效率和格式,支持导出为cocos2d-x兼容的精灵表(Sprite Sheets)和骨骼动画(Spine或DragonBones)。这样,游戏在运行时可以更有效地加载和渲染动画,提高游戏性能,...

    cocos2d-x-cocos2d-x-2.2.2.zip

    cocos2d-x不仅适用于游戏开发,还可以用于创建教育软件、互动媒体和其他2D图形应用,其强大的场景管理、精灵(Sprite)系统和粒子效果等功能,使得开发者能够快速构建各种复杂的2D场景。 总的来说,cocos2d-x 2.2.2...

    Cocos2d-x实战:C++卷(2版)源代码

    Cocos2d-x提供了精灵动画的支持,可以方便地创建和播放帧动画。 3. **动作(Actions)与效果**:Cocos2d-x的动作系统允许开发者对游戏对象施加各种效果,如移动、旋转、缩放、淡入淡出等,实现丰富的视觉表现。 4....

    Cocos2d-x实战C++卷关东升著完整版pdf

    《Cocos2d-x实战C++卷》是关东升所著的一本深入探讨Cocos2d-x游戏引擎开发的专业书籍。Cocos2d-x是一个开源的、跨平台的2D游戏开发框架,广泛应用于iOS、Android、Windows等多个操作系统。本书以C++语言为主要编程...

    cocos2d-x 3.0

    cocos2d-x 3.0中的cc::Animate类可以轻松管理这些帧,通过`createWithFrames`方法创建动画,并使用`runAction`将动画添加到精灵上。 3. 物理引擎:如果游戏需要更真实的物理效果,比如重力、碰撞检测,可以集成Box...

    Cocos2d-x实战 JS卷 Cocos2d-JS开发

    1. **Cocos2d-x入门**:介绍Cocos2d-x的基本架构,包括场景(Scene)、层(Layer)、节点(Node)等概念,以及如何设置项目环境,创建和管理游戏资源。 2. **图形与动画**:讲解如何使用Cocos2d-x的绘图API绘制2D...

    使用cocos2d-x-2.0-2.0.4开发的简单跨平台益智类魔塔小游戏

    在本项目中,开发者利用cocos2d-x 2.0.4版本创建了一个简单的益智类魔塔小游戏,旨在展示cocos2d-x在跨平台游戏开发中的应用能力。 1. **cocos2d-x框架**: - **C++基础**:cocos2d-x 2.0.4主要采用C++编写,这...

    经典版本 方便下载 源码 旧版本 3.8 官网找不到了 cocos2d-x-3.8.zip

    cocos2d-x 是一个跨平台的游戏开发框架,它基于C++,同时提供了Lua和JavaScript的绑定,让开发者可以方便地在多种操作系统上创建2D游戏、演示程序和其他图形交互应用。这个“cocos2d-x-3.8.zip”压缩包包含的是cocos...

    Cocos2d-x实战_Lua卷 _第2版

    首先,Cocos2d-x的核心特性在于它的渲染引擎,它提供了丰富的2D图形绘制功能,如精灵(Sprite)、批次渲染(Batching)、动作(Actions)和转换(Transitions)。开发者可以通过Lua语言调用这些功能,创建出动态的、...

    Cocos2d-x实战 JS卷

    3. **图形渲染**:学习如何使用Cocos2d-x的绘图API,包括纹理、精灵批处理、动画和粒子系统,创建丰富的视觉效果。 4. **物理引擎**:了解Cocos2d-x内置的Box2D或Chipmunk物理引擎,如何模拟真实世界的物理行为,如...

    Cocos2d-x学习笔记

    - 掌握Cocos2d-x的基本架构:Cocos2d-x框架中包括场景(Scene)、层(Layer)、精灵(Sprite)、动作(Action)等基本组件,学习如何使用这些组件来构建游戏逻辑。 - 理解资源管理:在Cocos2d-x中,资源管理是开发...

    cocos2d-x-3.13.1.zip

    通过学习cocos2d-x的API文档,可以快速上手创建游戏场景、添加交互元素、编写游戏逻辑。同时,利用其提供的工具如cocos console、cocos creator等,可以进行项目构建、调试和资源管理。 五、未来展望 随着cocos2d-x...

    cocos2d-x 案例开发大全 第二章(源码)

    4. **精灵(Sprite)和动画(Animation)**:cocos2d-x中的精灵是可移动的2D图像,可以组合成复杂的动画效果。通过SpriteBatchNode优化大批量精灵的渲染效率,同时,使用Animate类实现帧动画。 5. **物理引擎(Physics ...

    cocos2d-x游戏源码 三国策略游戏源码

    cocos2d-x是一个开源的游戏开发框架,它基于cocos2d-x,用于创建2D游戏、演示程序和其他图形/交互式应用程序。cocos2d-x是用C++编写的,但同时也支持Lua和JavaScript作为脚本语言,使得开发者可以根据自己的喜好选择...

    cocos2d-x 跑酷源码

    1. 动画系统:cocos2d-x的动画系统通过组合.plist文件创建精灵动画,例如角色的跑动、跳跃动作。 2. 地图拼接:TMX或CSV格式的文件描述了游戏地图的结构,cocos2d-x的TiledMap类可以加载这些文件,动态拼接地图,...

    cocos2d-x 《保卫萝卜》源代码

    Cocos2d-x提供了一系列的类,如Scene(场景)、Layer(层)、Sprite(精灵)和Node(节点),它们构成了游戏世界的基本元素。在《保卫萝卜》中,每个萝卜、怪物、炮塔都可能被表示为Sprite,而游戏地图和各种交互...

    《Cocos2d-x实战 Lua卷》源码.7z

    1. **Cocos2d-x架构**:了解Cocos2d-x的核心组件,如场景(Scene)、层(Layer)、精灵(Sprite)、动作(Action)等,以及如何用Lua来控制这些元素。 2. **Lua与C++交互**:Cocos2d-x支持Lua作为脚本语言,源码会展示如何...

    cocos2d-1.0.1-x-0.10.0

    Cocos2d-x 是一个开源的游戏开发框架,主要用于创建2D游戏、图形界面以及实时应用程序。这个框架基于C++,并且提供了多种语言接口,包括Python、JavaScript和Lua,让开发者可以选择他们熟悉的编程语言进行游戏开发。...

Global site tag (gtag.js) - Google Analytics