一小時(shí)開發(fā)《占星起源》(中)

hello扳还,一連好幾天的雨橱夭。

《占星起源》星星的創(chuàng)建和游戲檢測(cè)

回顧:

效果

上次把《占星起源》的“線段”弄好了,現(xiàn)在就要開始弄“星星”了俏让。對(duì)了《占星起源》本身有很多關(guān)卡呈础,這里只是開發(fā)其中一個(gè)橱健,可能有人看了之后覺得挺奇怪的,可以說(shuō)這里本身不算是一個(gè)游戲拘荡,在下一期,將會(huì)解釋怎么實(shí)現(xiàn)其他關(guān)卡:

現(xiàn)在開始開發(fā)“星星”:

當(dāng)玩家移動(dòng)線段跟星星有接觸的時(shí)候巨税,星星應(yīng)該有所反應(yīng)粉臊,提示玩家成功連接一顆星星:

效果:(這里沒有其他美術(shù)資源,所以扼仲。。驰后。矗愧。)

現(xiàn)在就來(lái)開發(fā)這個(gè)類:

class?Star :public?Sprite{

public:

?CREATE_FUNC(Star);

?virtual?bool?init();

?void?SMove();//動(dòng)作

?Sprite*ball;//底圖(用來(lái)執(zhí)行動(dòng)畫的東西)

?void?Setop();//動(dòng)作停止

};

實(shí)現(xiàn):

bool?Star::init(){

?this->initWithFile("ch.png");//初始化紋理

?this->setScale(0.5);//縮放

?ball=Sprite::create("io.png");

?ball->setPosition(this->getContentSize().width/2,this->getContentSize().height/2);

?this->addChild(ball,-1);//加入到渲染

//下一期這里會(huì)有變動(dòng)

?return?true;

}

void?Star::SMove(){

?auto?ac1=ScaleTo::create(0.5,?3);//動(dòng)作1

?auto?ac2=ScaleTo::create(0.5,?1);//動(dòng)作2

?auto?seq=Sequence::create(ac1,ac2,?NULL);//動(dòng)作組合

?auto?rep=RepeatForever::create(EaseInOut::create(seq,0.5));

//重復(fù)執(zhí)行


?ball->runAction(rep);//執(zhí)行動(dòng)作

}

(這里就是視頻中動(dòng)作的主要代碼了唉韭,是不是很簡(jiǎn)單的說(shuō))

void?Star::Setop(){

?ball->stopAllActions();

//下一期這里會(huì)有變動(dòng)

}

(就這樣就寫好了星星這個(gè)類,往后可能會(huì)增加一些功能)

然后布局你的星星:(這里布局如下:)

布局(創(chuàng)建)星星的時(shí)候钠乏,還要考慮接下來(lái)對(duì)星星的檢測(cè)春塌。所以這里使用一個(gè) vector容器來(lái)存放星星,方便以后遍歷:(這里沒有使用地圖來(lái)布局)

頭文件中:

?Star*p1,*p2,*p3,*p4,*p5,*p6;

?Vector<Sprite*> *pol;

實(shí)現(xiàn)文件中:

pol=new?Vector<Sprite*>(0);// 初始化容器

void?GameScene::CreateP(){

?p1=Star::create();

?p2=Star::create();

?p3=Star::create();

?p4=Star::create();

?p5=Star::create();

?p1->setPosition(Point(117,388));

?p2->setPosition(Point(181,288));

?p3->setPosition(Point(241,183));

?p4->setPosition(Point(367,200));

?p5->setPosition(Point(600,302));

?this->addChild(p1);

?this->addChild(p2);

?this->addChild(p3);

?this->addChild(p4);

?this->addChild(p5);

?pol->pushBack(p1);//把創(chuàng)建好的星星加入到容器里

?pol->pushBack(p2);

?pol->pushBack(p3);

?pol->pushBack(p4);

?pol->pushBack(p5);

}

如何檢測(cè)線“線段”是否穿過(guò)星星呢俏拱?

這里得寫一個(gè)比較全面的方法:

這里我推薦幾個(gè)方法(不一定最高效吼句,但足夠可靠):

[1]

A 到 B 線段中有許多點(diǎn)組成,如果該線段經(jīng)過(guò)星星搞隐,必有一點(diǎn)在星星內(nèi)部远搪,檢測(cè)星星內(nèi)部是否包含該點(diǎn)即可。

計(jì)算時(shí)是這樣的:

求出角 A 谁鳍,計(jì)算A 到 B 在 X 劫瞳,Y 軸方向的步進(jìn)绷柒,用 A 的坐標(biāo)不斷 增加即可:

(這里并不是每一個(gè)點(diǎn)又要檢測(cè),不然性能不好)

比如:

?這里的步進(jìn)為紅色箭頭距離

[2]

求出綠色線段距離(星星和一個(gè)轉(zhuǎn)折點(diǎn)的距離)伺绽,求出 角 c(a-b) ,由三角函數(shù)算出s,判斷是否大于星星的半徑郊楣。

等等。钥组。今瀑。。橘荠。

這里采用第2種方法:

首先為了能檢測(cè)全部的星星,所以這里寫一個(gè)函數(shù)方便檢測(cè):

void?GameScene::check(Star*sp){// 星星類型的變量

?auto?d1=sp1->getPosition();//a 點(diǎn)位置

?auto?d2=sp2->getPosition();// b?

?auto?len=d1-d2;


?auto?rod=len.getAngle();//a b 距離


?auto?ang=CC_RADIANS_TO_DEGREES(-rod);

?//log("%f",ang);

?if(ang>90){


? ? ? ? ang=180-ang;//保持在 0-90度之間


? ? }


?auto?d3=sp->getPosition();//星星位置

?auto?Len=d3-d2;

?auto?Rod=Len.getAngle();

?auto?Ang=CC_RADIANS_TO_DEGREES(-Rod);

?//? log("%f",Ang);

?if(Ang>90){


? ? ? ? Ang=180-Ang;



? ? }

?auto?nexangle=fabsf(Ang-ang);/得到角c

?log("%f",nexangle);



?if(Len.getLength()*sin(CC_DEGREES_TO_RADIANS(nexangle))<=sp->getContentSize().width/2){

//判斷是否大于星星半徑


? ? ? ? sp->SMove();//執(zhí)行星星的動(dòng)作

?log("cccc");



? ? }else{



? ? ? ? sp->Setop();//否則不執(zhí)行

? ? }




}

檢測(cè)的時(shí)候只需要把容器里的星星一個(gè)一個(gè)的取出來(lái)挺份,檢測(cè)即可:

?for(auto?c=pol->begin();c!=pol->end();c++){


?check(*c);



? ? }


這個(gè)函數(shù)還是不夠的贮懈。

還需要對(duì)星星的位置進(jìn)行判斷:

時(shí)間有點(diǎn)晚了,下一次在補(bǔ)全吧各聘。

以下這幾種情況不能正常檢測(cè):

等等抡医。。大脉。水孩。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市荷愕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌抛杨,老刑警劉巖荐类,帶你破解...
    沈念sama閱讀 218,386評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異屈嗤,居然都是意外死亡吊输,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門季蚂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人算谈,你說(shuō)我怎么就攤上這事料滥。” “怎么了葵腹?”我有些...
    開封第一講書人閱讀 164,704評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵礁蔗,是天一觀的道長(zhǎng)觉义。 經(jīng)常有香客問(wèn)我浴井,道長(zhǎng),這世上最難降的妖魔是什么洪囤? 我笑而不...
    開封第一講書人閱讀 58,702評(píng)論 1 294
  • 正文 為了忘掉前任撕氧,我火速辦了婚禮,結(jié)果婚禮上剥啤,老公的妹妹穿的比我還像新娘锦溪。我一直安慰自己府怯,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評(píng)論 6 392
  • 文/花漫 我一把揭開白布则涯。 她就那樣靜靜地躺著冲簿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪峦剔。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,573評(píng)論 1 305
  • 那天事秀,我揣著相機(jī)與錄音野舶,去河邊找鬼。 笑死平道,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的窘疮。 我是一名探鬼主播冀墨,決...
    沈念sama閱讀 40,314評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼诽嘉!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起骄酗,我...
    開封第一講書人閱讀 39,230評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤悦冀,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后盒蟆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體踏烙,經(jīng)...
    沈念sama閱讀 45,680評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡讨惩,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了步脓。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片浩螺。...
    茶點(diǎn)故事閱讀 39,991評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡要出,死狀恐怖鸳君,靈堂內(nèi)的尸體忽然破棺而出患蹂,到底是詐尸還是另有隱情,我是刑警寧澤囱挑,帶...
    沈念sama閱讀 35,706評(píng)論 5 346
  • 正文 年R本政府宣布沼溜,位于F島的核電站,受9級(jí)特大地震影響系草,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜找都,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評(píng)論 3 330
  • 文/蒙蒙 一能耻、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧晓猛,春花似錦、人聲如沸鞍帝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至钦扭,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間客情,已是汗流浹背癞己。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留痹雅,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,158評(píng)論 3 370
  • 正文 我出身青樓摔蓝,卻偏偏與公主長(zhǎng)得像愉耙,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子朴沿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • hello悯仙,遇見好多好多萌新,心情好好锡垄。 前些天 yada給我推薦了一個(gè)游戲《四色方塊》,《四色方塊》是獨(dú)立開發(fā)者...
    與時(shí)間賽跑_閱讀 706評(píng)論 0 0
  • hello路操,好像過(guò)了好長(zhǎng)時(shí)間。 上一次在《占星起源》(中)的時(shí)候屯仗,布置好了星星和線段和星星接觸后的一個(gè)算法搔谴,額魁袜,那...
    與時(shí)間賽跑_閱讀 270評(píng)論 0 0
  • 采臣在等我-廣州 【書籍名稱】《精力管理》 【閱讀目標(biāo)】 1精力管理與時(shí)間管理的關(guān)系峰弹? 2.精力的來(lái)源? 3.如何...
    采臣在等我閱讀 457評(píng)論 3 2
  • 【長(zhǎng)篇原創(chuàng)】文/風(fēng)聽雨夜寐荷 再次遇到你 看著謝嬌火氣漸消鞠呈,他佯裝無(wú)奈的對(duì)謝嬌說(shuō):”老婆大人,你就別鬧騰了旱爆,今天中...
    風(fēng)聽雨夜寐荷閱讀 424評(píng)論 4 5
  • 爸爸告訴我窘茁,晚上有啤酒促銷活動(dòng),女士喝一瓶啤酒送一箱啤酒庙曙,朋友報(bào)名時(shí)也給我報(bào)名了浩淘。我感覺很好捌朴,喝一瓶還給一箱张抄。 我...
    晚巷清風(fēng)閱讀 243評(píng)論 0 1