`
7090
  • 浏览: 279493 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

cocos2d-x初学习

阅读更多
1:字符串绘制
cocos2dx的字符串绘制使用的是Label,cocos2dx并不直接支持在屏幕中绘制字符串(这是有道理的,因为我们不能直接把一个string做成一个节点,那样很难理解),如果要直接绘制的话,可以自己封装opengl函数(网上有很多例子,一般是用texture做)。

其实最简单的绘制例子就是最开始的那个Helloworld。核心代码如下:

// Create a label and initialize with string "Hello World". 
CCLabelTTF* pLabel = CCLabelTTF::labelWithString("Hello World", "Thonburi", 64); 
CC_BREAK_IF(! pLabel); 
 
// Get window size and place the label upper. 
CCSize size = CCDirector::sharedDirector()->getWinSize(); 
pLabel->setPosition(ccp(size.width / 2, size.height - 20)); 
 
// Add the label to HelloWorld layer as a child layer. 
this->addChild(pLabel, 1); 


2:Menu绘制
CCMenuItemImage *pCloseItem = CCMenuItemImage::itemFromNormalImage(
										"CloseNormal.png",
										"CloseSelected.png",
										this,							menu_selector(HelloWorld::menuCloseCallback) );
pCloseItem->setPosition( ccp(CCDirector::sharedDirector()->getWinSize().width - 20, 20) );
CCMenu* eMenu = CCMenu::menuWithItems(pCloseItem,NULL);
eMenu->setPosition( CCPointZero );
this->addChild(eMenu);

CCMenuItem* newGameItem=CCMenuItemFont::itemFromString("1234", this, NULL);
CCMenuItem* startGameItem=CCMenuItemFont::itemFromString("start Game",this,NULL);
CCMenuItemToggle* itemToggle=CCMenuItemToggle::itemWithTarget(this, NULL,CCMenuItemFont::itemFromString("开"));
CCMenu* pMenu=CCMenu::menuWithItems(newGameItem,startGameItem,itemToggle,NULL);
pMenu->alignItemsVertically();
this->addChild(pMenu, 1);


3:绘制图片
cocos2dx中并没有直接绘制图片的概念,我们一般是使用CCSprite。核心代码如下:

//Add add a splash screen, show the cocos2d splash image. 
CCSprite* pSprite = CCSprite::spriteWithFile("HelloWorld.png"); 
CC_BREAK_IF(! pSprite); 
 
// Place the sprite on the center of the screen 
pSprite->setFlipX(true); //可以手动设置图形旋转和镜像,而不是使用Action,因为有许多Action是个过程,而不是直接显示结果 
pSprite->setRotation(90); 
pSprite->setPosition(ccp(size.width/2, size.height/2)); 
 
// Add the sprite to HelloWorld layer as a child layer. 
this->addChild(pSprite, 0); 


4:基本图形绘制
cocos2dx封装了大量opengl函数,用于快速绘制基本图形,这些代码的例子在,tests\DrawPrimitivesTest目录下

注意,该方法是重载node的draw方法实现的,在智能机上,并不推荐直接绘制几何图形,因为大量的坐标编码会极大降低工作效率,应尽量使用Image。而且cocos2dx的渲染机制会造成前后遮挡问题,尤其是几何图形与图片等其他node混合绘制时。
void DrawPrimitivesTest::draw() 
{ 
        CCLayer::draw(); 
 
    CCSize s = CCDirector::sharedDirector()->getWinSize(); 
         
        // draw a simple line 
        // The default state is: 
        // Line Width: 1 
        // color: 255,255,255,255 (white, non-transparent) 
        // Anti-Aliased 
        glEnable(GL_LINE_SMOOTH); 
        ccDrawLine( CCPointMake(0, 0), CCPointMake(s.width, s.height) ); 
         
        // line: color, width, aliased 
        // glLineWidth > 1 and GL_LINE_SMOOTH are not compatible 
          //注意:线宽>1 则不支持GL_LINE_SMOOTH 
        // GL_SMOOTH_LINE_WIDTH_RANGE = (1,1) on iPhone 
        glDisable(GL_LINE_SMOOTH); 
        glLineWidth( 5.0f ); 
        /*glColor4ub(255,0,0,255);*/ 
        glColor4f(1.0, 0.0, 0.0, 1.0); 
        ccDrawLine( CCPointMake(0, s.height), CCPointMake(s.width, 0) ); 
 
        // TIP: 
        // If you are going to use always the same color or width, you don't 
        // need to call it before every draw 
        // 
        // Remember: OpenGL is a state-machine. 
         
        // draw big point in the center 
        // 注意:cocos2dx绘制的是方块点 
        glPointSize(64); 
        /*glColor4ub(0,0,255,128);*/ 
        glColor4f(0.0, 0.0, 1.0, 0.5); 
        ccDrawPoint( CCPointMake(s.width / 2, s.height / 2) ); 
         
        // draw 4 small points 
        // 注意:cocos2dx绘制的是方块点 
        CCPoint points[] = { CCPointMake(60,60), CCPointMake(70,70), CCPointMake(60,70), CCPointMake(70,60) }; 
        glPointSize(4); 
        /*glColor4ub(0,255,255,255);*/ 
        glColor4f(0.0, 1.0, 1.0, 1.0); 
        ccDrawPoints( points, 4); 
         
        // draw a green circle with 10 segments 
        glLineWidth(16); 
        /*glColor4ub(0, 255, 0, 255);*/ 
        glColor4f(0.0, 1.0, 0.0, 1.0); 
        //参数依次是:中心点,半径,角度,分段数,是否连接中心点 
        ccDrawCircle( CCPointMake(s.width/2,  s.height/2), 100, 0, 10, false); 
 
        // draw a green circle with 50 segments with line to center 
        glLineWidth(2); 
        /*glColor4ub(0, 255, 255, 255);*/ 
        glColor4f(0.0, 1.0, 1.0, 1.0); 
        ccDrawCircle( CCPointMake(s.width/2, s.height/2), 50, CC_DEGREES_TO_RADIANS(90), 50, true);   
         
        // open yellow poly 
        /*glColor4ub(255, 255, 0, 255);*/ 
        glColor4f(1.0, 1.0, 0.0, 1.0); 
        glLineWidth(10); 
        CCPoint vertices[] = { CCPointMake(0,0), CCPointMake(50,50), CCPointMake(100,50), CCPointMake(100,100), CCPointMake(50,100) }; 
        //参数依次是:点数组,点数量,是否封闭 
        ccDrawPoly( vertices, 5, false); 
         
        // closed purple poly 
        /*glColor4ub(255, 0, 255, 255);*/ 
        glColor4f(1.0, 0.0, 1.0, 1.0); 
        glLineWidth(2); 
        CCPoint vertices2[] = { CCPointMake(30,130), CCPointMake(30,230), CCPointMake(50,200) }; 
        ccDrawPoly( vertices2, 3, true); 
         
        // draw quad bezier path 
          //绘制有一个控制点的贝塞尔曲线 
        ccDrawQuadBezier(CCPointMake(0,s.height), CCPointMake(s.width/2,s.height/2), CCPointMake(s.width,s.height), 50); 
 
        // draw cubic bezier path 
          //绘制有两个控制点的贝塞尔曲线 
        ccDrawCubicBezier(CCPointMake(s.width/2, s.height/2), CCPointMake(s.width/2+30,s.height/2+50), CCPointMake(s.width/2+60,s.height/2-50),CCPointMake(s.width, s.height/2),100); 
 
        //恢复opengl的正常参数 
        // restore original values 
        glLineWidth(1); 
        /*glColor4ub(255,255,255,255);*/ 
        glColor4f(1.0, 1.0, 1.0, 1.0); 
        glPointSize(1); 
} 


参考资料:
http://4137613.blog.51cto.com/4127613/754729
分享到:
评论

相关推荐

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

    通过学习这些源代码,开发者不仅能理解Cocos2d-x的基本用法,还能学习到游戏开发的最佳实践和高级技巧。对于初学者,这是一个绝佳的动手实践机会;对于经验丰富的开发者,它提供了深入框架内部的窗口。总之,《Cocos...

    Cocos2d-x 3.x游戏开发之旅_PDF电子书下载 带书签目录 高清完整版

    《Cocos2d-x 3.x游戏开发之旅》是一本专为游戏开发者设计的详细教程,旨在引导读者深入了解和掌握Cocos2d-x 3.x框架进行游戏开发的技术与实践。Cocos2d-x是一个开源的游戏开发框架,广泛应用于移动平台,如iOS、...

    Tiled地图编辑器cocos2d-x

    而"比克尔.url"可能是指向Tiled或Cocos2d-x相关教程或社区的链接,对于初学者来说,这些资源可以帮助他们更好地学习和掌握这两款工具的使用。 总结起来,Tiled地图编辑器和Cocos2d-x的结合,为手机游戏开发提供了...

    cocos2d-x box2d 弹球

    【Cocos2d-x与Box2D结合应用】 Cocos2d-x是一个开源的游戏开发框架,基于C++,广泛应用于2D游戏开发。它提供了丰富的图形渲染、动画、物理模拟等功能,让开发者能够轻松创建各种游戏。Box2D则是一个流行的2D物理...

    Cocos2d-x初入学堂-->CCSprite基本处理(2)工程

    在Cocos2d-x初学者的学堂中,深入学习CCSprite的基本处理是至关重要的一步。CCSprite是Cocos2d-x引擎中一个核心的组件,它用于显示2D图像,如图片、精灵或动画帧。在这个教程中,我们将探讨如何创建、缩放、旋转以及...

    WP7版COCOS2D-X

    此外,COCOS2D-X还支持lua脚本,让游戏逻辑编写更为简洁,降低了学习曲线。 总的来说,WP7版COCOS2D-X结合了C++的灵活性和XNA的易用性,为Windows Phone平台的游戏开发开辟了新的道路。无论是对于经验丰富的游戏...

    cocos2d-x-4.0 构建2d游戏,交互式书籍,演示和其他图形应用程序的多平台框架.rar

    总的来说,Cocos2d-x 4.0是一个强大、全面的2D游戏开发工具,无论你是经验丰富的专业开发者还是初入游戏行业的新人,都能从中受益。通过深入学习和实践,你可以利用Cocos2d-x 4.0打造出令人惊叹的2D游戏和互动应用,...

    FishingJoy

    《FishingJoy》是一款基于Cocos2d-x引擎开发的iOS游戏,它的开发过程涵盖了从零开始的游戏编程知识。Cocos2d-x是一款强大的开源游戏引擎,尤其适用于2D游戏的开发,它支持多平台,包括iOS、Android、Windows等。在本...

    手机游戏编程学习笔记Ⅰ(2013)word文件

    他还打算从简单的项目开始,逐步深入,例如Cocos2d-x,但觉得直接学习可能过于复杂,因此决定先从基础的Eclipse+ADT实践做起。 【学习日记的作用】 作者认为写学习日记能跟踪学习进度,便于日后复习,甚至可能帮助...

    大学生游戏实习报告.docx

    报告中提到了学习C++编程语言以及Cocos2d-x游戏引擎的使用,这些技能在游戏开发领域中有着不可替代的作用。C++作为一种面向对象的编程语言,以其高效的性能和强大的功能被广泛用于游戏引擎开发中。通过学习和掌握C++...

    CocosStudio_v1.6.0.0

    CocosStudio_v1.6.0.0,这个名字对于游戏开发者来说并不陌生,它是一款由Cocos2d-x团队推出的、专业且免费的游戏开发工具集。自发布以来,CocosStudio因其强大的功能和友好的用户界面,深受广大开发者的喜爱。这个...

    小游戏源码-潮爷爷带你玩转重阳节.rar

    根据文件名,我们可能推测是使用Unity3D或Cocos2d-x等游戏引擎,这些通常会使用C#或JavaScript编写游戏逻辑。 2. **游戏引擎**:游戏引擎是游戏开发的核心,负责处理渲染、物理模拟、音频处理等。如果是Unity3D,...

    【cocos creater】7.仿《弓箭传说》- 控制主角朝向敌人.rar

    在游戏开发领域,cocos creator是一个非常流行的2D游戏引擎,它提供了丰富的功能和易用的界面,让开发者能够快速构建游戏。这个教程我们将探讨如何利用cocos creator来模仿《弓箭传说》中的主角控制和朝向敌人的机制...

    android游戏引擎

    虽然标题提到的是"Android游戏引擎",但许多现代游戏引擎如Unity、Unreal Engine、Cocos2d-x等都支持跨平台开发,这意味着同一份代码可以编译并运行在Android、iOS、PC等多个平台上,极大地提高了开发效率。...

    iPhone4 开发Demo-1

    例如,它可能会演示如何使用SpriteKit或Cocos2d-x这样的游戏框架来创建游戏对象、处理碰撞检测以及执行游戏循环。 4. **用户界面设计**:良好的用户界面是吸引玩家的关键。在GameKitSample中,我们可以看到如何使用...

    ios-弹射小球.zip

    开发者没有采用专业游戏框架如Cocos2d-x,而是自己实现了这一物理引擎,这在技术上更具挑战性,但也更利于理解底层逻辑。 抛物线方程在二维空间中的表示为:y = x^2 / (2 * g) - (v^2 * sin^2θ) / (2 * g),其中g...

    游戏安全——手游安全技术入门源代码

    6. **游戏引擎逆向分析**:许多手游基于Unity、Unreal Engine或Cocos2d-x等游戏引擎开发。了解这些引擎的工作原理,以及如何对外部数据进行解码和解析,能帮助我们定位并保护关键的游戏逻辑。 7. **源代码分析**:...

    手机游戏基础培训材料

    2. 技术实现:讲解了手机游戏开发所使用的编程语言(如Java、C++、Unity Script等)、游戏引擎(如Unity、Unreal Engine、Cocos2d-x等)以及如何进行跨平台开发。 3. 用户体验:强调了游戏界面设计、操作便捷性、...

    合成大西瓜源码.zip

    通常,网页版小游戏可能使用HTML5、JavaScript、CSS等技术,而手机应用版则可能使用Unity3D、Cocos2d-x或者原生的Android或iOS开发语言如Java、Swift。根据"合成大西瓜"的特性,可能是使用HTML5与JavaScript来实现的...

Global site tag (gtag.js) - Google Analytics