接上一节;
3.开始场景的搭建与计划:
简单场景,3个难度菜单1个退出菜单;计划在功能完成后将文字变成中文显示(CCDictionary)
|
3*3共9格
4*4共16格
5*5共25格
|
|
关键知识点:
B.传参
界面: CCMenuItem*simple=CCMenuItemFont::create("simple"); *normal="normal"*hard="hard" *quit="quit" CCMenu*menu=::create(simple,normal,hard,quit,NULL addChild(menu);menu->alignItemsVerticallyWithPadding(10); 先把界面显示出来~ |
回调函数:在.h中声明回调函数:voidsimpleCallBack(CCObject*);normalCallBack(hardCallBack( quitCallBack( 在.cpp中先打桩(QT:ALT+Enter-->在.cpp中添加定义) GameStart::simpleCallBack(*){CCLog(“simple”);}::normalCallBack(给MenuItem设置回调函数: simple->setTarget(this,255); font-size:9.5pt">menu_selector(::simpleCallBack));normal->setTarget(::normalCallBack));hard->setTarget(::hardCallBack));quit->setTarget(::quitCallBack)); |
注意一点:menu_selector(F2/VS中F12)看到参数是(CCObject*),在QT中可以不带参,但在VS中必须带参!
传参: 在.h中: enumDEGREETHREE=3,FOURFIVE};在.cpp中:CCScene*scene=LayerGame::scene(THREECCDirector::sharedDirector()->replaceScene(scene);FOUR |
至此,LayerGame还没有建立,下一节继续。
4.主场景及卡片类
|
计时
数字卡片大小: setContentSize(CCSizeMake(60,70));setAnchorPoint(ccp(0,0)); |
|
||
联系: 1.主场景接收开始场景的传参(难度),因而不能用CREATE_FUN()宏,要自己写Create: *::create(intrank) 2.数字卡片要接受主场景(init())中的传参(数字1~x),继承自CCSprite,也要自己写Create函数:CardItemidx) |
||||
|
||||
主场景: 在.h中: classLayerGame:publicCCLayer { :staticCCScene*scene(intrank);*create(boolinit(
voidaddCard( CCArray*allCards; |
在.cpp中 CCScene*::scene(rank)*scene=::create();*layer=::create();scene->addChild(layer);returnscene;} *::create(*pRet=new;if(pRet&&pRet->init())pRet->autorelease();}elsedeletepRet;pRet=NULL::init( ::init(); addCard( |
|||
数字卡片在addCard()中调用: ::addCard()allCards=CCArray::create();allCards->retain();for(i=0;i<;i++)j=0;j<;j++)CardItem*item=::create(/*vec[i*rank+j+1]*/5);item->setPosition((baseX+60*i,baseY+70*j));addChild(item);allCards->addObject(item);} |
||||
数字卡片类: |
||||
CardItemCCSpriteidx);CCLabelTTF*ttf;CC_SYNTHESIZE(,_index,Idx)}; |
idx。。。//设置大小setContentSize(CCSizeMake(60,255); font-size:9pt">setAnchorPoint(ccp(0,0));setIdx();//保存分给的序号CCString*str=::createWithFormat("%d"ttf=::create(str->getCString(),"couriernew"addChild(ttf); |
数字的随机产生:
使用vector--增强性数组,每次随机出的数是下标,下标--就不会重复
|
|
#include<iostream><vector><stdlib.h><time.h>usingnamespacestd;getAvailPoints(rank);vector<>vec; |
::getAvailPoints(srand(time());//种子i=0;i<=*vec.push_back(i);//初始化mysize=;i=1;i<=mysize+1-i;i++)idx=rand()%(mysize-i)+1;value=vec[idx];vec[idx]=vec[mysize+1-i];vec[mysize+1-i]=value;} |
基准坐标获得:
floatk=()/2.0;baseX=winSize.width/2-k*60;//对应不同格子数,找到其基准点的X坐标baseY=.height/2-k*70; |
至此,数字就随机摆在界面上了。
原文链接:/cocos2dx/342016.html