欢迎转载!转载时请注明出处: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
- <span style="font-size:12px;">#pragma once
- #include "cocos2d.h"
- #include "BaseDrawLayer.h"
- using namespace cocos2d;
- class BaseDrawScene :public CCScene
- {
- public:
- ~BaseDrawScene(void);
- //第一种:创建方式
- static CCScene* scene();
- /*第二种:创建方式
- static BaseDrawScene* scene()
- {
- BaseDrawScene * scene = BaseDrawScene::create();//注意:就得重写父类的create方法
- BaseDrawLayer* layer=BaseDrawLayer::create();
- scene->addChild(layer);
- return scene;
- }
- SCENE_CREATE_FUNC(BaseDrawScene);
- */
- };</span>
BaseDrawScene.cpp
- #include "BaseDrawScene.h"
- BaseDrawScene::~BaseDrawScene()
- {
- }
- CCScene* BaseDrawScene::scene()
- {
- CCScene * scene = CCScene::create();
- BaseDrawLayer* layer=BaseDrawLayer::create();
- scene->addChild(layer);
- return scene;
- }
BaseDrawLayer.h
- #include "cocos2d.h"
- using namespace cocos2d;
- class BaseDrawLayer:public CCLayer
- {
- public:
- BaseDrawLayer();
- ~BaseDrawLayer(void);
- virtual void draw();
- LAYER_CREATE_FUNC(BaseDrawLayer);
- };
BaseDrawLayer.cpp
- #include "BaseDrawLayer.h"
- BaseDrawLayer::BaseDrawLayer()
- {
- }
- BaseDrawLayer::~BaseDrawLayer(void)
- {
- }
- void BaseDrawLayer::draw()
- {
- //注意:注意OpenGL的坐标系,起始点为左下角
- CCSize s=CCDirector::sharedDirector()->getWinSize();
- //设置点大小、颜色,然后绘制一个点
- glPointSize(64);
- glColor4f(0.0,0.0,1.0,0.5);
- ccDrawPoint(ccp(s.width/2+10,s.height/2));
- //绘制一条线,参数为起始点和终点的坐标
- glEnable(GL_LINE_SMOOTH);
- ccDrawLine(ccp(0,0),ccp(s.width,s.height));
- // 设置线的宽度,颜色,然后绘制一个圆
- glLineWidth(2);
- ccDrawColor4B(0, 255, 255, 255);
- //参数说明:中心点坐标,半径,角度,分段数,经过中间的线是否显示
- ccDrawCircle( ccp(s.width/2, s.height/2), 50, 0, 50, false);
- //绘制多边形
- ccDrawColor4B(255, 255, 0, 255);
- glLineWidth(10);
- CCPoint vertices[] = { ccp(0,0), ccp(50,50), ccp(100,50), ccp(100,100), ccp(50,100) };
- //参数说明:点集合,点数,这五个点是否构成闭合
- ccDrawPoly( vertices, 5, false);
- //绘制实心多边形
- glLineWidth(1);
- CCPoint filledVertices[] = { ccp(0,120), ccp(50,120), ccp(50,170), ccp(25,200), ccp(0,170) };
- ccDrawSolidPoly(filledVertices, 5, ccc4f(0.5f, 0.5f, 1, 1 ) );
- //绘制三角形
- ccDrawColor4B(255, 0, 255, 255);
- glLineWidth(2);
- CCPoint vertices2[] = { ccp(30,130), ccp(30,230), ccp(50,200) };
- ccDrawPoly( vertices2, 3, true);
- //绘制一个控制点贝瑟尔曲线
- //参数说明:起点、控制点、终点,分段数
- ccDrawQuadBezier(ccp(0,s.height), ccp(s.width/2,s.height/2), ccp(s.width,s.height), 50);
- //绘制两个控制点贝瑟尔曲线
- 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);
- //绘制填充的菱形
- CCPoint vertices3[] = {ccp(60,160), ccp(70,190), ccp(100,190), ccp(90,160)};
- ccDrawSolidPoly( vertices3, 4, ccc4f(1,1,0,1) );
- // 恢复opengl绘制的原始值
- glLineWidth(1);
- ccDrawColor4B(255,255,255,255);
- ccPointSize(1);
- }
第三步:修改AppDelegate.cpp中的applicationDidFinishLaunching()方法
CCScene *pScene =BaseDrawScene::scene();
pDirector->runWithScene(pScene);
第四步:运行..报错缺少各种.dll库
第五步:到Cocos2dx引擎目录下的Debug.win32文件夹下把下面的.dll库都copy到你工程目录下的Debug.win32文件下....再运行,ok
绘制的效果应该就出来了....绘制过程中的数据调节测试,就有大家熟悉吧!如果讲述得有误,或者不对的地方,还望各位指出!