毕业论文-基于cocos2d-x跨平台游戏设计与实现内容摘要:
ion::SimpleAudioEngine::sharedEngine()preloadEffect(sound/big_spaceship_flying. mp3)。 CocosDenshion::SimpleAudioEngine::sharedEngine()preloadEffect(sound/achievement. mp3)。 图 5. 2 主页 11 CocosDenshion::SimpleAudioEngine::sharedEngine()preloadEffect(sound/out_porp. mp3)。 CocosDenshion::SimpleAudioEngine::sharedEngine()preloadEffect(sound/button. mp3)。 CocosDenshion::SimpleAudioEngine::sharedEngine()playBackgroundMusic(sound/game_music. mp3,true)。 ]7[ } 这是做一个检测,可以不添加,但是为了保证代码的健壮性要添加: bool bRet=false。 do { CC_BREAK_IF(!CCLayer::init())。 bRet=true。 } while (0)。 return bRet。 5. 2. 3 游戏主场景 游戏主场景是为添加的数 字方块提供一个层,所有的数字方块都是在这个层上进行添加 . 5. 2. 4 数字方块生成类 本文多次提到 90%的概率生成方块 2, 10%的概率生成方块 4. 具体实现方法如下: //背景层 auto bk=LayerColor::create(Color4B(200, 200, 200, 255),GAME_TILED_WIDTH,GAME_TILED_HEIGHT)。 thisaddChild(bk)。 //数字层 int n=rand()%10。 thism_number=n0?2:4。 auto label=Label::createWithSystemFont(StringUtils::format(%d,thism_number), 宋体 ,40)。 /*labelsetString(StringUtils::format(%d,thism_number))。 12 labelsetScale(4)。 */ labelsetColor(Color3B::RED)。 bkaddChild(label)。 5. 2. 5 数字方块合并类 游戏听过触摸事件,生成数字方块的同时, “触碰到相同的方块 ”,就会合并方块,并让 “触碰超过地方 ”的方块数值增加,让另一数字方块消失 . //初始化 void VisibleRect::lazyInit() { // no lazy init // Useful if we change the resolution in runtime s_visibleRect = Director::getInstance()getOpenGLView()getVisibleRect()。 } //数字方块合并类 Rect VisibleRect::getVisibleRect() { lazyInit()。 return s_visibleRect。 } Vec2 VisibleRect::left() { lazyInit()。 return Vec2(s_visibleRect. origin. x, s_visibleRect. origin. y+s_visibleRect. size. height/2)。 } Vec2 VisibleRect::right() { lazyInit()。 return Vec2(s_visibleRect. origin. x+s_visibleRect. size. width, s_visibleRect. origin. y+s_visibleRect. size. height/2)。 } Vec2 VisibleRect::top() 13 { lazyInit()。 return Vec2(s_visibleRect. origin. x+s_visibleRect. size. width/2, s_visibleRect. origin. y+s_visibleRect. size. height)。 } Vec2 VisibleRect::bottom() { lazyInit()。 return Vec2(s_visibleRect. origin. x+s_visibleRect. size. width/2, s_visibleRect. origin. y)。 } Vec2 VisibleRect::center() { lazyInit()。 return Vec2(s_visibleRect. origin. x+s_visibleRect. size. width/2, s_visibleRect. origin. y+s_visibleRect. size. height/2)。 } Vec2 VisibleRect::leftTop() { lazyInit()。 return Vec2(s_visibleRect. origin. x, s_visibleRect. origin. y+s_visibleRect. size. height)。 } Vec2 VisibleRect::rightTop() { lazyInit()。 return Vec2(s_visibleRect. origin. x+s_visibleRect. size. width, s_visibleRect. origin. y+s_visibleRect. size. height)。 } Vec2 VisibleRect::leftBottom() { lazyInit()。 return s_visibleRect. origin。 } 14 Vec2 VisibleRect::rightBottom() { lazyInit()。 return Vec2(s_visibleRect. origin. x+s_visibleRect. size. width, s_visibleRect. origin. y)。 } 5. 2. 6 得分管理 每次合并消除,就会把当前的分数累加下来,并在游戏主界面上浮一个方块专门用于显示分数 . void GameLayer::initBG() { auto drawNode = DrawNode::create()。 Vec2 points[] = { Vec2(0,0), Vec2(BG_WIDTH_HEIGHT,0), Vec2(BG_WIDTH_HEIGHT,BG_WIDTH_HEIGHT), Vec2(0,BG_WIDTH_HEIGHT) }。 drawNodedrawPolygon(points, sizeof(points)/sizeof(points[0]), Color4F(Color4B(200,190,180,255)),1,Color4F(222,190,180,255))。 thisaddChild(drawNode)。 drawNodedrawDot(Vec2::ZERO,4,Color4F(1,0,0,1))。 auto posx = BG_WIDTH_HEIGHT/4。 for (int idx = 0。 idx 4。 idx++) { for (int idy = 0。 idy 4。 idy++) { auto grid = GridItem::createItem(posx)。 gridsetPosition( idx*posx,idy*posx )。 thisaddChild(grid)。 _gridVec[idx][idy] = grid。 } } } bullet 是加到 ccspriteBatchNode 上的, ccspriteBatchNode 是加到 BulletLayer 上面的,ccspriteBatchNode 和 bulletLayer 都是铺满屏幕的 . 所以子弹调用 boundingbox 获得的矩形是以屏幕左下角为原点的 . 敌机的原理也是如此 . hero 是直接加到 herolayer 上的,父节点 15 同样是铺满屏幕的,所以他们的父节点的左下角的坐标都一样的,这就是通过 boundingbox 检测他们是否碰撞的前提 . 有些纹理周围有比较大的空白地方,这就会造成两个节点看起来还没有接触就会发生碰撞,这就需要对碰撞进行更精确的判断,可以通过什么像素判断法之类的 . 我这里采取最简单的处理方法,就是通过节点的 boundingbox 获取到一个 rect,然后对这个 rect 加工一下,这样子可以获取节点 boundingbox 里面的某一部分来作为碰撞的检测部分 . CCRect rectHero = thisheroLayergetHero()boundingBox()。 float x = rectHero. origin. x + rectHero. size. width * 0. 3。 float y = rectHero. origin. y + rectHero. size. height * 0. 4。 float width = rectHero. size. width * 0. 3。 float height = rectHero. size. height * 0. 6。 CCRect rect_HeroForCrash = CCRectMake(x, y, width, height)。 5. 2. 7 触摸事件 virtual bool ccTouchBegan (cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent)。 virtual void ccTouchMoved (cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent)。 virtual void ccTouchEnded (cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent)。 void GameLayer::onTouchEnded(Touch* touch,Event* event) 触摸事件;在次用到了 4 个触摸时间,即向上触摸、向下触摸、向左触摸、向右触摸 . 16 5. 2. 8 游戏结束场景 游戏最后结束需要保存分数并退出,退出界面如图 5. 3 所示 . 图 5. 3 游戏失败页面 //游戏失败判定 bool GameMenuLayer::init() { auto layer = LayerColor::create(Color4B(230,230,0,200))。 thisaddChild(layer)。 auto playmenu = MenuItemLabel::create(Label::create(play, Arial, 60),CC_CALLBACK_1(GameMenuLayer::callFun,this))。 auto resetmenu = MenuItemLabel::create(Label::create(reset, Arial, 60),CC_CALLBACK_1(GameMenuLayer::resetGameFun,this))。 auto menu = Menu::create(playmenu,resetmenu, NULL)。 menualignItemsVertically()。 17 thisaddChild(menu)。 return true。 } //加强游戏健壮性 static GameMenuLayer* _layer = nullptr。 GameMenuLayer* GameMenuLayer::getInstance() { if(!_layer) { _layer = GameMenuLayer::create()。 } return _la。毕业论文-基于cocos2d-x跨平台游戏设计与实现
相关推荐
1、、隔离种植,分期播种由于甜、糯玉米与普通玉米串粉杂交,籽粒易变成普通玉米,失去甜味和糯性。 因此甜、糯玉米种植要与普通玉米隔离,可通过时间和空间隔离。 为获得较好的经济价值,可采取地膜覆盖、育苗移栽、盘育乳苗移栽甚至大棚栽培等设施栽培技术,每隔 57 天分批分期播种。 一般每亩施氮磷钾复合肥(1087)3545 公斤、硫酸锌肥 公斤作基肥。 采取大小行的种植方式,大行距 8090 厘米
1、食型秋玉米是一种适应性广、生育期短、营养丰富的优质高效晚秋作物,以鲜果穗供应市场,深受消费者青睐。 其栽培技术要点如下:一、选用良种:秋玉米必须选用适应性广、抗病力强、生育期短、优质高产、穗形美观、鲜果穗食味好的杂交种。 适时播种:鲜食秋玉米与鲜食春玉米不同,由于生育期间气温从高到低,其灌浆结实时间比春玉米长,对温度要求严格。 秋玉米的灌浆结实期温度要求不低于 20,如果气温低于 16
解课题,为开题做准备; ,应在指导教师的指导下进行文献检索、实习调研以及实验等论文前期准备工作。 每学年第一 学 期第 8 周以后 第二阶段(开题及写作阶段) (三) 做好开题报告 教研室组织教师指导学生做好开题报告,院(系)检查开题情况,教务处抽查。 每学年第二学期第 2 周前 (四) 认真进行毕业论文(设计)指导、检查工作。 1.指导教师做好指导工作,定期检查学生的工作进度和质量
种选择鲜食玉米要求糯性好、果皮薄、口感细腻、商品性状好、果穗中等,适合蒸煮和速冻加工。 目前市场上销售的鲜食玉米有糯玉米、甜玉米、黑玉米、彩色玉米及普通玉米等,商品性状不一,造成鲜食玉米价格参差不齐,生产效益差别大。 而增加鲜食玉米的收益,选用对路的优良品种是关键。 糯玉米是鲜食玉米的首选品种,糯玉米品种以中白色的糯性品质最好,一般情况下黑、紫、红等彩色品种的品质相对要差些。 适期播种露地栽培