Cocos2d-x初入学堂(1)-->图形绘制

欢迎转载!转载时请注明出处:http://blog.csdn.net/aa4790139/article/details/8103608

由于小弟本人一直和游戏有着不解之缘,从小就特喜欢玩游戏,然后读大学,选专业都选了一个游戏专业,唉~  各种贵...不过喜欢没办法。

然后出来是做J2ME的,然后转android游戏开发,尤其是有J2ME的朋友,相信都是从底层绘制开始的。在之前也用AndEngine引擎开发过两款游戏,除了底层绘制是用C++写的,其他都是java写的,然后出校以来,一直用的是java开发,所以对java比较熟悉,自然选择用AndEngine引擎开发...由于之前都是手工绘制,所以往往在屏幕回事那款,遇到各种让人蛋疼的事,适配的不是很好,AndEngine适配的非常好,另外一个特点,加载的内存很有限,所以经常内存溢出,不过可以采用TexturePacker来处理图片,可以减少咋用内存。对于从事java开发的,初学AndEngine引擎还是挺好的。

cocos2d-x自然也将图形绘制都封装好了,不过对于底层的图形绘制懂一点还是有好处的。。。废话不多说了,以后你就会懂得...

虽然cocos2dx中自带有test,test也有里面关于基本的图形绘制讲的也比较详细,但是现在我要你从头开始,绘制基本的图形,你会吗?

(注意:一下的名字,你都可以自己命名)

第一部分:工程的创建

第一步:创建win32的BaseDrawTest的工程

一下为我的工程目录:

红色来的文件夹到cocos2d-x目录下去copy到工程目录下....Debug.win32你的暂时没有,需要编译后才会产生.

(补充:我这样做的原因,是因为我想将win32的工程放到一个win32project目录下,如果我们移植到android上,cocos2dx程序的生成,是在cocos2dx引擎目录下的,为了区分所以分开存放:

1、如果你在cocos2dx引擎下创建的win32工程,那你就不需要包含下面的6个目录了,因为利用vs生成cocos2dx工程,默认设置了这些路径,如下图:

2、如果想我一样,单独创建cocos2d-x-win32-projects文件夹来保存cocos2dx的win32工程,我们只需copy去cocos2dx引擎中Box2d,cocos2dx,CocosDenshion,lib(里面的文件,其实就是Cocos2dx引擎下的Debug文件夹中的lib文件copy过来,新建的一个文件),然后在cocos2d-x-win32-projects下利用vs创建cocos2dx的win32工程,包含如下目录:

 

第二步:打开BashDrawTest.sln,然后添加对应的目录

然后右击工程选择属性:

如下图:

选择框出来的,VC++目录,然后添加包含目录、引用目录、库目录...点后面的三角行,编辑,添加对应的目录:

包含目录和引用目录:如下图文件:

请选择你对应的目录包含进去,然后库目录,就是你BaseDrawTest目录下的lib,之前叫你copy 到工程目录下的..

现在好了,编译生成,成功显示HelloWorld,如果不显示请查看http://blog.csdn.net/aa4790139/article/details/8086635

第二部分:图形绘制

第一步:创建自己的场景和层

如下:我创建BaseScene场景和BaseDrawLayer层

第二步:编写我们这四个文件的代码

老样子,上传我的代码...

BaseDrawScene.h

[cpp]  view plain copy
  1. <span style="font-size:12px;">#pragma once  
  2. #include "cocos2d.h"  
  3. #include "BaseDrawLayer.h"  
  4.   
  5. using namespace cocos2d;  
  6.   
  7. class BaseDrawScene :public CCScene  
  8. {  
  9. public:  
  10.     ~BaseDrawScene(void);  
  11.     //第一种:创建方式  
  12.     static CCScene* scene();  
  13.     /*第二种:创建方式 
  14.     static BaseDrawScene* scene() 
  15.     { 
  16.         BaseDrawScene * scene = BaseDrawScene::create();//注意:就得重写父类的create方法 
  17.         BaseDrawLayer* layer=BaseDrawLayer::create(); 
  18.         scene->addChild(layer); 
  19.         return scene; 
  20.     } 
  21.       SCENE_CREATE_FUNC(BaseDrawScene); 
  22.       */  
  23. };</span>  

BaseDrawScene.cpp

[cpp]  view plain copy
  1. #include "BaseDrawScene.h"  
  2.   
  3.   
  4. BaseDrawScene::~BaseDrawScene()  
  5. {  
  6.   
  7. }  
  8. CCScene* BaseDrawScene::scene()  
  9. {  
  10.     CCScene * scene = CCScene::create();  
  11.     BaseDrawLayer* layer=BaseDrawLayer::create();  
  12.     scene->addChild(layer);  
  13.     return scene;  
  14. }  


BaseDrawLayer.h

[cpp]  view plain copy
  1. #include "cocos2d.h"  
  2.   
  3. using namespace cocos2d;  
  4.   
  5. class BaseDrawLayer:public CCLayer  
  6. {  
  7. public:  
  8.     BaseDrawLayer();  
  9.     ~BaseDrawLayer(void);  
  10.     virtual void draw();  
  11.     LAYER_CREATE_FUNC(BaseDrawLayer);  
  12. };  


BaseDrawLayer.cpp

[cpp]  view plain copy
  1. #include "BaseDrawLayer.h"  
  2.   
  3. BaseDrawLayer::BaseDrawLayer()  
  4. {  
  5.   
  6. }  
  7. BaseDrawLayer::~BaseDrawLayer(void)  
  8. {  
  9.   
  10. }  
  11.   
  12. void BaseDrawLayer::draw()  
  13. {  
  14.     //注意:注意OpenGL的坐标系,起始点为左下角  
  15.     CCSize s=CCDirector::sharedDirector()->getWinSize();  
  16.       
  17.     //设置点大小、颜色,然后绘制一个点  
  18.     glPointSize(64);  
  19.     glColor4f(0.0,0.0,1.0,0.5);  
  20.     ccDrawPoint(ccp(s.width/2+10,s.height/2));  
  21.   
  22.     //绘制一条线,参数为起始点和终点的坐标  
  23.     glEnable(GL_LINE_SMOOTH);  
  24.     ccDrawLine(ccp(0,0),ccp(s.width,s.height));  
  25.   
  26.      // 设置线的宽度,颜色,然后绘制一个圆  
  27.     glLineWidth(2);  
  28.     ccDrawColor4B(0, 255, 255, 255);  
  29.     //参数说明:中心点坐标,半径,角度,分段数,经过中间的线是否显示  
  30.     ccDrawCircle( ccp(s.width/2, s.height/2), 50, 0, 50, false);  
  31.       
  32.     //绘制多边形  
  33.     ccDrawColor4B(255, 255, 0, 255);  
  34.     glLineWidth(10);  
  35.     CCPoint vertices[] = { ccp(0,0), ccp(50,50), ccp(100,50), ccp(100,100), ccp(50,100) };  
  36.     //参数说明:点集合,点数,这五个点是否构成闭合  
  37.     ccDrawPoly( vertices, 5, false);  
  38.   
  39.     //绘制实心多边形  
  40.     glLineWidth(1);  
  41.     CCPoint filledVertices[] = { ccp(0,120), ccp(50,120), ccp(50,170), ccp(25,200), ccp(0,170) };  
  42.     ccDrawSolidPoly(filledVertices, 5, ccc4f(0.5f, 0.5f, 1, 1 ) );  
  43.   
  44.     //绘制三角形  
  45.     ccDrawColor4B(255, 0, 255, 255);  
  46.     glLineWidth(2);  
  47.     CCPoint vertices2[] = { ccp(30,130), ccp(30,230), ccp(50,200) };  
  48.     ccDrawPoly( vertices2, 3, true);  
  49.   
  50.     //绘制一个控制点贝瑟尔曲线  
  51.     //参数说明:起点、控制点、终点,分段数  
  52.     ccDrawQuadBezier(ccp(0,s.height), ccp(s.width/2,s.height/2), ccp(s.width,s.height), 50);  
  53.   
  54.     //绘制两个控制点贝瑟尔曲线  
  55.     ccDrawCubicBezier(ccp(s.width/2, s.height/2), ccp(s.width/2+30,s.height/2+50), ccp(s.width/2+60,s.height/2-50),ccp(s.width, s.height/2),100);  
  56.   
  57.      //绘制填充的菱形  
  58.     CCPoint vertices3[] = {ccp(60,160), ccp(70,190), ccp(100,190), ccp(90,160)};  
  59.     ccDrawSolidPoly( vertices3, 4, ccc4f(1,1,0,1) );  
  60.   
  61.     // 恢复opengl绘制的原始值  
  62.     glLineWidth(1);  
  63.     ccDrawColor4B(255,255,255,255);  
  64.     ccPointSize(1);  
  65. }  

第三步:修改AppDelegate.cpp中的applicationDidFinishLaunching()方法

CCScene *pScene =BaseDrawScene::scene();

pDirector->runWithScene(pScene);

第四步:运行..报错缺少各种.dll库

第五步:到Cocos2dx引擎目录下的Debug.win32文件夹下把下面的.dll库都copy到你工程目录下的Debug.win32文件下....再运行,ok

 

绘制的效果应该就出来了....绘制过程中的数据调节测试,就有大家熟悉吧!如果讲述得有误,或者不对的地方,还望各位指出!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值