- 浏览: 279493 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
zhang_shuai870717:
求指教。没懂
Graphics 的translate(int x, int y) 函数 -
刘亮love小雪:
楼主我还是没有懂啊
Graphics 的translate(int x, int y) 函数 -
wenhaoliu:
大侠!我在从ios平台移植到android平台遇到很多问题!编 ...
android平台移植总结 -
lansehuan:
dwpcny 写道楼主 你给得链接是你自己才能看得啊 。我也遇 ...
cocos2d-x,windows环境配置总结 -
leishengwei:
u_xtian 写道jifengyu 写道楼主你好,我想问一下 ...
(转)Android开发:在EditText中关闭软键盘
1:字符串绘制
cocos2dx的字符串绘制使用的是Label,cocos2dx并不直接支持在屏幕中绘制字符串(这是有道理的,因为我们不能直接把一个string做成一个节点,那样很难理解),如果要直接绘制的话,可以自己封装opengl函数(网上有很多例子,一般是用texture做)。
其实最简单的绘制例子就是最开始的那个Helloworld。核心代码如下:
2:Menu绘制
3:绘制图片
cocos2dx中并没有直接绘制图片的概念,我们一般是使用CCSprite。核心代码如下:
4:基本图形绘制
cocos2dx封装了大量opengl函数,用于快速绘制基本图形,这些代码的例子在,tests\DrawPrimitivesTest目录下
注意,该方法是重载node的draw方法实现的,在智能机上,并不推荐直接绘制几何图形,因为大量的坐标编码会极大降低工作效率,应尽量使用Image。而且cocos2dx的渲染机制会造成前后遮挡问题,尤其是几何图形与图片等其他node混合绘制时。
参考资料:
http://4137613.blog.51cto.com/4127613/754729
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
发表评论
-
C++正则表达式匹配、分割字符串
2017-11-14 16:32 2147#include "stdafx.h" # ... -
C语言字节对齐示例
2014-09-23 16:44 772#include "stdafx.h" ... -
(转)C语言字节对齐
2014-09-23 16:16 713文章最后本人做了一幅图,一看就明白了,这个问题网上讲的不少,但 ... -
C++ stl中remove的实现
2013-09-24 23:14 985原文:http://www.cplusplus.com/ref ... -
(转)c++ explicit构造函数
2013-09-11 18:51 696按照默认规定,只有一 ... -
(转)string替换所有指定字符串(C++)
2013-07-27 17:01 1891C++的string提供了replace方法来实现字符串的替换 ... -
C++哲学
2013-01-10 20:34 850即:只为用到的东西付出代价。 -
jni文件传递方法参数
2012-11-26 17:43 5653使用jni从java传递多个参数到c++时,如果是多个参数,当 ... -
(转)C++ string类的一些函数方法
2012-10-24 14:41 894string类的构造函数: string(const char ... -
CCTMXTiledMap使用的几个事项
2012-08-02 11:12 7389项目中的地图层采用coco ... -
android平台移植总结
2012-07-30 13:11 2754最近完成了一款游戏的android平台移植,从ios平台移植到 ... -
(转)子类重新父类方法的限制
2012-07-23 15:17 934若想实现一个合格重写方法,而不是重载,那么必须同时满足下面的要 ... -
(装)NDK Build 参数
2012-07-17 16:20 2853'ndk-build' Overview ndk-build ... -
(转)在VS2005下使用libjson注意事项
2012-07-17 15:31 1721最近项目中要使用libjson,无奈boost下的1.34版的 ... -
c++ 字符串的一些概念
2012-06-13 00:16 1214今天看到《c++ primer》上 ... -
(转)cocos2d-x解析json(使用libjson库)
2012-06-06 11:26 2512cocos2d-x很好,扩展性很好,但是其第三方库还不是很成熟 ... -
c++ vector方法push_back的新理解
2012-05-25 11:57 0写了上篇文章 对c++方法返回对象的理解(对c++方法返回对象 ... -
对c++方法返回对象的理解
2012-05-25 11:51 1219今天更深刻的认识到了通过方法返回一个对象或者数组是不可以的,因 ... -
C/C++ 指针删除的几个细节
2012-05-23 15:44 8869在C/C++中,当指针需要删除时,对于new的指针,调用del ... -
(转)C语言深入浅出可变参数函数的使用技巧
2012-05-23 15:04 1012深入浅出可变参数函数的使用技巧本文主要介绍可变参数的函数使用, ...
相关推荐
通过学习这些源代码,开发者不仅能理解Cocos2d-x的基本用法,还能学习到游戏开发的最佳实践和高级技巧。对于初学者,这是一个绝佳的动手实践机会;对于经验丰富的开发者,它提供了深入框架内部的窗口。总之,《Cocos...
《Cocos2d-x 3.x游戏开发之旅》是一本专为游戏开发者设计的详细教程,旨在引导读者深入了解和掌握Cocos2d-x 3.x框架进行游戏开发的技术与实践。Cocos2d-x是一个开源的游戏开发框架,广泛应用于移动平台,如iOS、...
而"比克尔.url"可能是指向Tiled或Cocos2d-x相关教程或社区的链接,对于初学者来说,这些资源可以帮助他们更好地学习和掌握这两款工具的使用。 总结起来,Tiled地图编辑器和Cocos2d-x的结合,为手机游戏开发提供了...
【Cocos2d-x与Box2D结合应用】 Cocos2d-x是一个开源的游戏开发框架,基于C++,广泛应用于2D游戏开发。它提供了丰富的图形渲染、动画、物理模拟等功能,让开发者能够轻松创建各种游戏。Box2D则是一个流行的2D物理...
在Cocos2d-x初学者的学堂中,深入学习CCSprite的基本处理是至关重要的一步。CCSprite是Cocos2d-x引擎中一个核心的组件,它用于显示2D图像,如图片、精灵或动画帧。在这个教程中,我们将探讨如何创建、缩放、旋转以及...
此外,COCOS2D-X还支持lua脚本,让游戏逻辑编写更为简洁,降低了学习曲线。 总的来说,WP7版COCOS2D-X结合了C++的灵活性和XNA的易用性,为Windows Phone平台的游戏开发开辟了新的道路。无论是对于经验丰富的游戏...
总的来说,Cocos2d-x 4.0是一个强大、全面的2D游戏开发工具,无论你是经验丰富的专业开发者还是初入游戏行业的新人,都能从中受益。通过深入学习和实践,你可以利用Cocos2d-x 4.0打造出令人惊叹的2D游戏和互动应用,...
《FishingJoy》是一款基于Cocos2d-x引擎开发的iOS游戏,它的开发过程涵盖了从零开始的游戏编程知识。Cocos2d-x是一款强大的开源游戏引擎,尤其适用于2D游戏的开发,它支持多平台,包括iOS、Android、Windows等。在本...
他还打算从简单的项目开始,逐步深入,例如Cocos2d-x,但觉得直接学习可能过于复杂,因此决定先从基础的Eclipse+ADT实践做起。 【学习日记的作用】 作者认为写学习日记能跟踪学习进度,便于日后复习,甚至可能帮助...
报告中提到了学习C++编程语言以及Cocos2d-x游戏引擎的使用,这些技能在游戏开发领域中有着不可替代的作用。C++作为一种面向对象的编程语言,以其高效的性能和强大的功能被广泛用于游戏引擎开发中。通过学习和掌握C++...
CocosStudio_v1.6.0.0,这个名字对于游戏开发者来说并不陌生,它是一款由Cocos2d-x团队推出的、专业且免费的游戏开发工具集。自发布以来,CocosStudio因其强大的功能和友好的用户界面,深受广大开发者的喜爱。这个...
根据文件名,我们可能推测是使用Unity3D或Cocos2d-x等游戏引擎,这些通常会使用C#或JavaScript编写游戏逻辑。 2. **游戏引擎**:游戏引擎是游戏开发的核心,负责处理渲染、物理模拟、音频处理等。如果是Unity3D,...
在游戏开发领域,cocos creator是一个非常流行的2D游戏引擎,它提供了丰富的功能和易用的界面,让开发者能够快速构建游戏。这个教程我们将探讨如何利用cocos creator来模仿《弓箭传说》中的主角控制和朝向敌人的机制...
虽然标题提到的是"Android游戏引擎",但许多现代游戏引擎如Unity、Unreal Engine、Cocos2d-x等都支持跨平台开发,这意味着同一份代码可以编译并运行在Android、iOS、PC等多个平台上,极大地提高了开发效率。...
例如,它可能会演示如何使用SpriteKit或Cocos2d-x这样的游戏框架来创建游戏对象、处理碰撞检测以及执行游戏循环。 4. **用户界面设计**:良好的用户界面是吸引玩家的关键。在GameKitSample中,我们可以看到如何使用...
开发者没有采用专业游戏框架如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. 用户体验:强调了游戏界面设计、操作便捷性、...
通常,网页版小游戏可能使用HTML5、JavaScript、CSS等技术,而手机应用版则可能使用Unity3D、Cocos2d-x或者原生的Android或iOS开发语言如Java、Swift。根据"合成大西瓜"的特性,可能是使用HTML5与JavaScript来实现的...