怎么用cocostudio 3.10做坦克大战

&关于游戏的素材都是在网上到处搜集到的,然后自己再用二流的ps技术修修改改的,所以有可能混在一起有点不搭调(没有办法啊,没有美工Orz。。项目已经建立好了,然后我们需要把我们下载的素材放到Resources文件夹。(游戏完成以后,我会把素材包上传的。。主要现在没有找完)&设置屏幕大小:&在vs中打开创建的项目,打开AppDelagate.cpp文件在AppDelegate::applicationDidFinishLaunching()中添加代码if(!glview) {
glview = GLViewImpl::create("Battle City"); &在这个方法里面有director-&setAnimationInterval(1.0 / 60);这行代码是作用是设置游戏的帧数,是游戏引擎调用OpenGL来绘制每一张图需要用到的时间,其中参数的意思为时间/画面数。这里我们不做修改&director-&setDisplayStats(true);这一行代码它的作用在你游戏的左下角显示一些游戏的信息,比如说帧数,绘图等等数据,一般在我们调试的会将参数设置为true,但是完成发布之后一般设置为false,&游戏开始背景:&打开HelloWorldScene.cpp文件。在init方法里面我们可以看到&这个就是创建背景,和设置背景位置坐标的代码了(Cocos2d坐标系和OpenGL坐标系一样,原点为屏幕左下角,x向右,y向上。)这里使用了精灵这一概念,下面是关于cocos2d的精灵的中文wikiCocos2d中的精灵和其他游戏引擎中的精灵相似,它可以移动,旋转,缩放,执行动画,并接受其他转换。Cocos2dx的Sprite由Texure,frame和animation组成,由openes负责渲染。主要的类关系如下:&简单过程可描述为:使用Texture2D加载图片,可以用Texture2D生成对应的SpriteFrame(精灵帧),将SpriteFrame添加到Animation生成动画数据,用Animation生成Animate(就是最终的动画动作),最后用Sprite执行这个动作。&&把原来的代码删除掉并添加&并在helloworldscene.h中添加const int START_BACKGROUD = 101;&添加游戏菜单:在HelloWorldScene.h中的helloworld类中声明两个公有回调方法,功能是点击菜单时触发。&void menuCloseCallback(cocos2d::Ref* pSender);void menuStartCallback(cocos2d::Ref* pSender);&在HelloWorldScene.cpp中添加函数实现方法,close方法就用原来的&(具体功能暂时不写)&现在可以在init方法中添加菜单了&运行试一下好了,游戏的开始界面大致做好了。。现在看有点单调,以后再添加其他功能吧。。原文链接:&/entry/8&6933人阅读
Android(15)
cocos2d-x(75)
Eclipse C/C++(14)
上篇我们完成了地图的信息获取和碰撞检测,这篇我们整合到程序中。在这之前我们改造一下Tank类,使它更加模块化,共容易理解:1.改造后的Tank类声明如下:class Tank : public CCSprite
static Tank* createTankWithTankType(const char* tankTypeName, TileMapInfo* tileMapInfo);
void initTankWithTankType(const char* tankTypeName, TileMapInfo* tileMapInfo);
void command(enumOrder order);
TileMapInfo* mTileMapI
};static Tank* createTankWithTankType(const char* tankTypeName, TileMapInfo* tileMapInfo);void initTankWithTankType(const char* tankTypeName, TileMapInfo* tileMapInfo);可以看到这两个函数后面都多了TileMapInfo类的指针。我们可以在坦克中使用这个指针来检测是否碰撞。2.我们实现void initTankWithTankType(const char* tankTypeName, TileMapInfo* tileMapInfo);void Tank::initTankWithTankType(const char* tankTypeName, TileMapInfo* tileMapInfo)
initWithSpriteFrameName(tankTypeName);
mTileMapInfo = tileMapI
//将坦克放入地图层中
mTileMapInfo-&getTileMap()-&addChild(this);
//缩放到合适大小
CCTMXTiledMap* tmxTileMap = mTileMapInfo-&getTileMap();
CCSize tileSize = tmxTileMap-&getTileSize();
CCSize tankSize = getContentSize();
//比地图上砖块小一点
setScale((tileSize.height * 2-4) / (tankSize.height));
}上面函数中,我们先把Tank类自己加入了地图层中,这样更方便我们进行一个位置计算。然后缩放到了比地图上一整个砖块小一点的大小,这样可以正常通过砖块之间的通道。3.简单的实现static Tank* createTankWithTankType(const char* tankTypeName, TileMapInfo* tileMapInfo);来返回一个Tank实例:Tank* Tank::createTankWithTankType(const char* tankTypeName, TileMapInfo* tileMapInfo)
CCSpriteFrameCache* pCache = CCSpriteFrameCache::sharedSpriteFrameCache();
pCache-&addSpriteFramesWithFile(&tank.plist&);
Tank* tank = new Tank();
tank-&initTankWithTankType(tankTypeName, tileMapInfo);
tank-&autorelease();
}可以看到我们添加了plist文件,然后从中加载了tankTypeName类型的Tank精灵,然后初始化,最后加入自动释放列表。4.然后在void command(enumOrder order);函数中,我们在命令控制中加入检测碰撞的函数:bool Tank::command(enumOrder order)
float stepX = 0.0f;
float stepY = 0.0f;
float fRotation = getRotation();
switch (order)
case cmdNothing:
case cmdGoUP:
stepY = 1.0f;
fRotation = 0.0f;
case cmdGoDown:
stepY = -1.0f;
fRotation = 180.0f;
case cmdGoLeft:
stepX = -1.0f;
fRotation = 270.0f;
case cmdGoRight:
stepX = 1.0f;
fRotation = 90.0f;
case cmdFire:
//调用子弹开火
return mBullet-&fire();
//根据运行方向旋转坦克
setRotation(fRotation);
//检测地图上的碰撞
CCRect rect = this-&boundingBox();
if (!mTileMapInfo-&collisionTest(CCRectMake(rect.getMinX() + stepX,
rect.getMinY() + stepY, rect.size.width, rect.size.height)))
setPositionX(getPositionX() + stepX);
setPositionY(getPositionY() + stepY);
}可以看到我们跟之前的Tank类的command函数中多了碰撞检测,先通过boundingBox获取Tank在地图中的矩形,然后传入移动后的矩形,通过TileMapInfo类中的collisionTest碰撞函数,来检测是否碰撞,如果碰撞则不移动,如果没有碰撞则按照stepX和stepY分量进行移动位置。5.Tank类改造完了,最后我们需要在CityScene中初始化我们的新 TileMapInfo类和Tank类:bool
CityScene::init()
CCLayer::init();
//初始化地图信息
TileMapInfo* tileMapInfo = TileMapInfo::createMapInfoWithFile(&Round1.tmx&);
CCTMXTiledMap* tmxTileMap = tileMapInfo-&getTileMap();
this-&addChild(tmxTileMap);
//在已有的地图上,创建玩家坦克
mPlayerTank[0] = Tank::createTankWithTankType(&player2U.png&, tileMapInfo);
//放到地图中初始化位置
CCSize tileSize = tmxTileMap-&getTileSize();
CCSize mapSize = tmxTileMap-&getContentSize();
mPlayerTank[0]-&setPosition(ccp(mapSize.width / 2 - tileSize.width * 3, tileSize.height));
//添加虚拟手柄的显示
mLayerPanel = Panel::create();
addChild(mLayerPanel, 3);
}可以看到我们先初始化了地图信息,然后通过地图信息创建了一个坦克,并把坦克放到了地图中的初始化位置。下面我们看看运行后的碰撞效果:完整源码下载地址:
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:3939625次
积分:53820
积分:53820
排名:第38名
原创:1270篇
转载:71篇
译文:34篇
评论:5527条
难度:高级
类型:实战教学
难度:高级
类型:实战教学
难度:高级
类型:实战教学
文章:80篇
阅读:230106
文章:24篇
阅读:28271
文章:180篇
阅读:173235
文章:35篇
阅读:66338
文章:50篇
阅读:161573
文章:60篇
阅读:239124
文章:44篇
阅读:599367
文章:202篇
阅读:1377973
文章:90篇
阅读:372038
文章:70篇
阅读:509400
文章:27篇
阅读:94689
(2)(20)(20)(3)(1)(1)(1)(1)(3)(136)(26)(98)(58)(12)(9)(14)(18)(58)(295)(1)(21)(1)(2)(2)(2)(2)(5)(5)(7)(4)(4)(63)(12)(13)(7)(12)(5)(4)(5)(7)(1)(84)(56)(1)(17)(3)(3)(2)(8)(4)(5)(4)(4)(1)(3)(4)(5)(5)(4)(2)(22)(33)(20)(20)(3)(3)(9)(2)(4)(5)(10)(2)(5)(1)(9)(20)(6)(10)(64)马士兵教程—坦克大战游戏设计思路
马士兵教程—《坦克大战》游戏设计思路
&&&&功能:产生一个窗口
&&&&功能:添加关闭窗口的事件处理
&&&&&&&&&&&&&&&不允许窗口的大小改动
&&&&&&&功能:画出代表坦克的实心圆
&&&&&&&功能:让坦克运动起来
&&&&&&&步骤:
将位置改变为变量
启动线程不断重画
思考:为什么使用线程重画,而不是每按下一个键进行一次重画?
线程重画更均匀,更能控制重画的速度。
按键重画不能解决子弹自动飞行的问题。
每次重画改变Tank位置
功能:使用双缓冲消除闪烁现象
刷新重画频率太快,paint方法还没有完成
将所有东西画在虚拟图片上,一次性显示出来
功能:代码重构
将以后可能需要多处改变的量定义为常量
Frame的宽度和高度
常量名一般大写
功能:让坦克听从我们的指挥
添加键盘监听器类KeyMonitor
TankCient添加键盘监听器
针对不同的键改变坦克的位置,与重画线程结合产生不同方向运动
功能:将坦克单独包装成类
建立Tank类
为Tank类添加成员变量x&y
添加draw方法,使Tank类独立控制自己的画法
添加Tank类处理按键的方法
根据Tank类修改TankClient类
功能:让主战坦克向8个方向行走(1)
添加记录按键状态的布尔量
添加代表方向的量(使用枚举)
根据按键状态确定Tank方向
根据方向进行下一步的移动(move)
功能:让主战坦克向8个方向行走(2)
处理键抬起的消息
修改TankClient相关代码
功能:添加子弹类
添加Missile类
添加x,y,dir等属性以及常量
添加构造方法,&draw方法等必要方法
根据不同方向,进行不同的运动
在TankClient中模拟一颗子弹
new一颗子弹出来
功能:根据主战坦克的方向和位置,打出子弹
增加对Ctrl键的按键处理
根据“坦克打出一发子弹”这句话,来确定Tank中的方法fire,其返回值为Missle
根据Tank方向和位置设定子弹的方向和位置并new出来,然后返回(fire方法的实现)
功能:为了解决坦克停下也能打出炮弹的问题—画出炮筒
Tank类增加新的属性ptDir
每次move后根据Tank新的方向确定炮筒的方向
将炮筒用直线的形式表现出来
功能:打出多发炮弹
使用容器装炮弹
每当抬起Ctrl键就往容器中加入新的炮弹
逐一画出每一发炮弹
功能:解决炮弹不消亡的问题
解决坦克出界的问题
加入控制炮弹生死的量bLive(Missle)
当炮弹已经死去就不需要对其重画
当炮弹飞出边界就死亡
当炮弹死亡就从容器中去除
功能:画一辆敌人的坦克
加入区别敌我的量good
根据敌我的不同设置不同的颜色
更新Tank的构造函数,加入good
TankClient中new&出敌人的坦克并画出
功能:将敌人坦克击毙
分析:一颗子弹击中敌人坦克
Missle中加入hitTank(Tank)方法,返回布尔类型
碰撞检测的辅助类Rectangle
为Tank和Missle都加入getRect方法
当击中敌人坦克时,坦克被打死,子弹也死去
增加控制Tank生死的量live
如果死去就不画了
功能:加入爆炸
添加爆炸类
用不同直径的圆模拟爆炸
加入位置属性
加入draw方法
爆炸应该存在于集合类中
TankClient加入集合
将集合中的爆炸逐一画出(如果死去就去除)
击毙一辆坦克后应产生爆炸
hitTank时应产生爆炸
功能:添加多辆坦克
用容器来装敌人的Tank
向容器中装入多辆敌人Tank
运行,不能打掉
添加hitTanks方法,打一系列Tank
TankClient里面每发子弹都打tanks
功能:让敌军坦克更加智能
让敌军坦克动起来
构造函数中可以指定方向
new敌军坦克的时候指定敌军坦克的方向
让敌军坦克向随机方向移动
(Tank)静态的,添加随机数产生器&java.util.Random
move完成后,如果是敌军坦克的,随机产生一个数,来设定坦克下一个方向
Direction.values()
让敌军坦克向随机方向移动随机的步骤
添加变量,记录随机步骤
当==0时,改变方向,否则,只是随机步骤递减
让敌军坦克发射炮弹
本军炮弹不打本军
炮弹添加好坏bGood,根据好坏画不同颜色
修改炮弹的构造方法
修改Tank的fire方法
修改hitTank方法,好不能打好,坏不能打坏
敌军炮火不能太猛烈
功能:添加两堵墙
建Wall类、建立Wall对象、画出来
让每一颗子弹打击每一堵墙
hitWall()方法
子弹速度不能太快,否则很容易穿过墙
让坦克不能穿过墙
记录上一次的位置oldX,&oldY
修改构造函数
每次move之前纪录上一次位置
添加stay方法
记录移动前的位置
当撞到时回到移动前的位置
当碰到墙的时候stay
功能:坦克不能互相穿越
当坦克撞到Tank时stay
功能:超级炮弹
功能:主战坦克的生命值
加入life变量
在窗口显示生命值
功能:图形化表示主战坦克的生命值
根据不同的life值进行的不同的显示
功能:添加“血块”
添加blood类
添加必要的方法
让blood对象固定轨迹运动,&并在一定时间后消失
功能:最后的修正
敌人死光了重新加入
我军死掉了F2开始
> 本站内容系网友提交或本网编辑转载,其目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请及时与本网联系,我们将在第一时间删除内容!
尚学堂科技_马士兵_JAVA_坦克大战网络版视频教程.rar 尚学堂科技_马士兵_坦克大战视频教程_java_eclipse.rar 尚学堂科技_马士兵_坦克大战图片版.rar 下载地址: http://www.muyangzhe.net/viewthread.php?tid=314&highlight=%C9%D0%D1%A7%CC%C3
这是本系列最后一篇,最后就是将整个程序组成起来.坦克大战游戏中有六个用户界面: 音效设置 开始界面 选择关卡界面 游戏主界面 分数界面 游戏结束界面 按照Android程序一般设计方法,一般一个界面对应一个Activity.这样就需要设计6个Activity子类对实现各个界面. 在移植的过程,这里采用了一个简单的方法,采用一个Activity对就于 Java ...
用前面介绍的方法,创建一个cocos2d-x项目,可以看到新项目内容如下图:我看查看 HelloWorldScene.cpp中的函数bool HelloWorld::init() { ////////////////////////////// // 1. super init first if ( !CCLayer::init() ) { return f ...
本设计只提供一个概括性的思路,具体实现过程中仍然存在修改和优化的可能,具体实现也可能有所不同,更多的作用是让我们大致了解这些功能模块之间的关系.
本周工作主要集中在地图编辑器上,地图编辑器是游戏中最重要的组成部分之一,但设计相对独立,因此我们现在就着手制作. 地图编辑器功能点概要: 以Tile方式拼接地图 每个Tile中心放置一个节点 相邻的Ti ...
在上篇我们完成了子弹和地图碰撞的检测,在这篇我们将完成敌方坦克AI的编写.具体思路是屏幕中保持有四个敌方坦克,然后坦克随机方向运动,并且子弹消失后1秒发射一次1.我们新建一个敌方坦克的AI类来控制地方坦克AI行为:static const char* enemyTankType[] = { &normalU.png&, &spe ...
上篇文章实现了坦克与地图碰撞的检测,这篇我们继续完成子弹和地图的碰撞检测.1.先设计一个子弹类Bullet,如下所示:class Bullet : public CCSprite { public: Bullet(); ~Bullet(); static Bullet* createBulletWithTank(Tank* tank); void initB ...
上篇文章写了Paddle类来处理精灵的点击.触摸事件,现在我们在Paddle的基础上写一个MyPaddle类,来处理上一关.下一关.开始游戏按钮的点击事件.1.类声明如下:class MyPaddle : public Paddle { CC_SYNTHESIZE(enum_evt, m_evttyp, evttyp); CC_SYNTHESIZE(Choi ...
上篇显示了控制手柄,但是还不能用来控制坦克,这篇将会讲手柄和坦克的移动结合起来.1.先在CityScene场景中实现场景的虚函数virtual void onEnter();onEnter在进入场景后将会被调用,我们在onEnter中设置一个定时器,游戏每一帧都调用次,这样我们可以在每帧中检测手柄按钮是否被按下,然后控制坦克的移动,onEnter和updat ...课题申请书 非论文 基于cocos2d-x引擎的坦克大战游戏的设计与开发_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
课题申请书 非论文 基于cocos2d-x引擎的坦克大战游戏的设计与开发
上传于||暂无简介
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
你可能喜欢cocos2dx的初步学习十五之坦克大战二
最近比较忙,也没时间写。。。。OK,我们接着讲下去,现在我们已经创建了一个新的游戏场景,但现在一片空白,我们并没有加载任何东西。那么显然下面,我们应该加载一张地图,说到地图,那我们就需要地图编辑器,这里推荐Tiled地图编辑器,现在tiled地图编辑器主要是qt版的,当然还有java版,
java版下载地址:http://download.csdn.net/detail/kuloveyouwei/5412155
qt版下载地址:http://download.csdn.net/detail/kuloveyouwei/5412251
首先先打开QT版的地图编辑器,新建一个52*52的8*8像素点的:
OK,添加新的图块
最后添加瓦片图片进去,自己折腾把,,
保存生产tmx格式的,其实就是一个xml,我们来看下:
&?xml version=&1.0& encoding=&UTF-8&?&
&map version=&1.0& orientation=&orthogonal& width=&52& height=&52& tilewidth=&8& tileheight=&8&&
&tileset firstgid=&1& name=&tile& tilewidth=&8& tileheight=&8&&
&image source=&tile.png& trans=&000000& width=&224& height=&32&/&
&/tileset&
&layer name=&bg1& width=&52& height=&52&&
&data encoding=&base64& compression=&zlib&&
eJztmO0KwjAMRaegoO+goKDv/4j2Z3dhvbtL+jGXAyWw0qzmzFA6TRqXNK5ZVLGu9+aVxjuLrdd7E35816uc0jhnEbHWl+W3ziOPNJ5ZRKz1Zfmt80j40RjNjwrmU+uP34O3HxXMp9Yfv4fw819+GN7+kNbnB+/6IKOdH6yEnzm3NO5ZZKh+1Hpjftwf63+fNL5ZZKh+1Hpjftwf63/hZ19+VF+Itz91P/j7VV+Itz91P+GnTG8/CDsPs/7DotrvWH9jsPMw6z8sqv2O9TdG+BnbDwPrq9av9f0OA+ur1q/1/Q4j/MypPa/en7D+VLu+bL16f8L6U+3vP/zs2w/i3X9Gvx9V53vfj4af8vzR/XjT2qf3u/37m+18T5fePnZ+r8Z1c/W/01rP2qd1z5fym/tj171YevXvt/aH8NPOc/a50v5VT8/kOhNCQ==
&layer name=&bg2& width=&52& height=&52&&
&data encoding=&base64& compression=&zlib&&
eJzt0bEJACAQA0Ab3UP3H1IX8LEQ8eEOQiBtSgEAAAAAAAAAAOClutKCzqavjKCz2f2Q/Z/T/Xf+uWMCZ9oCcQ==
&objectgroup name=&objects& width=&52& height=&52&&
&object name=&pl1& x=&136& y=&384& width=&24& height=&24&/&
&object name=&en1& x=&4& y=&4& width=&24& height=&24&/&
&object name=&en2& x=&200& y=&0& width=&24& height=&24&/&
&object name=&en3& x=&392& y=&0& width=&24& height=&24&/&
&object name=&t1& x=&132& y=&60& width=&24& height=&24&/&
&object name=&t2& x=&68& y=&228& width=&24& height=&24&/&
&object name=&t3& x=&260& y=&196& width=&24& height=&24&/&
&object name=&t4& x=&324& y=&324& width=&24& height=&24&/&
&object name=&t5& x=&380& y=&164& width=&24& height=&24&/&
&object name=&t6& x=&228& y=&116& width=&24& height=&24&/&
&object name=&t7& x=&316& y=&4& width=&24& height=&24&/&
&object name=&t8& x=&208& y=&168& width=&24& height=&24&/&
&object name=&t9& x=&28& y=&124& width=&24& height=&24&/&
&object name=&t10& x=&4& y=&356& width=&24& height=&24&/&
&object name=&home& x=&192& y=&384& width=&32& height=&32&/&
&/objectgroup&
里面是一些map的信息,比如说每块瓦片的大小为8*8像素,这里是定义了两个层,bg1,bg2,&data&里是地图的编码信息,objectgroup,,对象层,对象层允许你在地图上圈出一些区域,来指定一些事件的发生。在这里,我们定义了一些敌人出现的坐标位置,自己坦克出现的位置等。
OK,地图有了,我们来看怎么加载地图到我们的场景中,
CCSize wSize=CCDirector::sharedDirector()-&getVisibleSize();
CCTMXTiledMap *gameMap=CCTMXTiledMap::create(&map2.tmx&);
//缩放比列
float scale=wSize.height/gameMap-&getContentSize().
gameMap-&setScale(scale);
gameMap-&setPosition(wSize.width/6,0);
this-&addChild(gameMap, 1);
OK,加载地图就这么简单,别忘了要工程里加入瓦片的图片哦。。。
这里我们直接在场景里里初始化我们的地图,其实应该是新建一个地图层,下一章,我们将新建一个地图层专门来初始化地图。。。。
> 本站内容系网友提交或本网编辑转载,其目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请及时与本网联系,我们将在第一时间删除内容!
这篇文章中,我们将加入如何移动我们的坦克,以前的文章中,我们提到了一种虚拟摇杆,SneakInput.这里,我们将采用SneakInput类来作为我们的虚拟摇杆类.首页,我们新建一个控制层类,ControlLayer,这个类将管理着坦克的控制,OK,下面我们直接上代码: ControlLayer.h #include &cocos2d.h&quot ...
上篇文章中,我们可以移动我们的坦克了,但你会发现,坦克可以随意移动,并不会被墙之类的挡住.在这之前,我要讲下地图中的坐标值跟瓦片值,看如下图: 每一个瓦片,都有一个坐标,你可以把它看作是在一个二维坐标系里,它的原点是在, 瓦片值: 每一个瓦片都有一个id,tid为0时,表示没有,或是透明, 首页我们先要获取我们的坦克在地图上的坐标点,然后把坐标点转换成瓦片值 ...
上篇文章中我们简单了添加了地图,这篇文章中,我们重新写一个地图层,叫MapLayer,继承CCLayerColor,CCLayerColor可以修改层颜色,大小.OK,下面我们直接上代码: MapLayer.h class MapLayer :public cocos2d::CCLayerColor { public: virtual bool init() ...
以后的篇幅中,我们来实现2dx版的坦克大战..好了,我们一步步来实现,OK,我们先实现一个开始游戏这样的一个界面,然后切换到我们的游戏场景,下面直接上代码: CCSprite *logoSprite=CCSprite::create(&BattleCity.png&); logoSprite-&setPosition(ccp(wSi ...
这篇文章中,我们简单讲下CCScrollview,顾名思义,Scrollview,滚动视图,无论在android,ios,黑莓上都有这个滚动视图.那我们来看下cocos2dx中的CCScrollview,我这个版本的cocos2dx是2.0.4版本的,貌似前几个版本都有点不一样.OK,下面我直接上代码: 在头文件中.h: class HelloWorld : ...
这篇文章中,我们讲下虚拟摇杆,一般游戏中都会有虚拟摇杆,看了下别人写的Joystick,发现版本都是比较老的了,一些api已经改变了,稍微修改了下.OK,上代码: 摇杆类头文件: #include &cocos2d.h& using namespace cocos2d; class HRocker :public CCLayer { pu ...
OpenGL入门学习[十五] 这次讲的所有内容都装在一个立方体中,. ,绘制一个立方体,简单呀,我们学了第一课第二课,早就会了. 先别着急,立方体是很简单,但是这里只是拿立方体做一个例子,来说明OpenGL在绘制方法上的改进. 从原始一点的办法开始 一个立方体有六个面,每个面是一个正方形,好,绘制六个正方形就可以了. glBegin(GL_QUADS);
接下来,我们将完成剩下的游戏界面部分.连连看我们可以看做是一个m行乘以n列的一个矩行,其中我们规定0为空的,其余数字可以看作是图片的引用id,通过这个id,我们可以直接找到这个图片,有了图片,我们就可以初始化出这个对应的精灵.然后通过touch事件判断出是否选中或是没选中这个精灵,然后通过相应的算法,算出所选两个精灵对象是否是一样的,并且符合我们的游戏规则, ...}

我要回帖

更多关于 cocostudio 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信