Cocos2D遊戲之旅(三):卡牌翻轉效果的實現(上)
曉石頭的部落格
滑鼠點選一次,卡牌蓋住
再次點選,卡牌翻開
效果演示圖
之前一直認為卡牌翻轉是通過幀動畫實現的,當看到@笨木頭用ScaleTo做出來時候,再一次深刻體會到什麼叫大道至簡。
一、先談思路
一共兩張圖片
1、正面
2、背面
第一步:將正面的寬度慢慢縮小至0;產生卡牌翻轉到中間的效果
第二步:將一開始就把寬度縮小至0的背面放大到正常,產生卡牌蓋住的效果
嘿嘿,是不是一種恍然大悟的感覺!^_^
二、再說實現
bool HelloWorld::init() { if (!Layer::init()) { return false; } Size visibleSize = Director::getInstance()->getVisibleSize(); //新增背景 CCSprite* bk = CCSprite::create("bk.png"); bk->setPosition(Point(visibleSize.width / 2, visibleSize.height / 2)); this->addChild(bk); //cardFlag為偶數時,表示牌翻開,否則蓋上 cardFlag = 0; //觸控事件 EventListenerTouchOneByOne* event = EventListenerTouchOneByOne::create(); event->setSwallowTouches(true); event->onTouchBegan = CC_CALLBACK_2(HelloWorld::onTouchBegan, this); event->onTouchMoved = CC_CALLBACK_2(HelloWorld::onTouchMoved, this); event->onTouchEnded = CC_CALLBACK_2(HelloWorld::onTouchEnded, this); _eventDispatcher->addEventListenerWithSceneGraphPriority(event, this); /* 建立第一個精靈 */ sprite1 = Sprite::create("card.jpg"); sprite1->setPosition(Point(visibleSize.width / 2, visibleSize.height / 2)); this->addChild(sprite1); /* 建立第二個精靈 */ sprite2 = Sprite::create("bkCard.png"); sprite2->setPosition(Point(visibleSize.width / 2, visibleSize.height / 2)); this->addChild(sprite2); /* 第二個精靈預設x拉伸至0.0,於是第二個精靈在一開始是看不見的*/ sprite2->setScaleX(0.0f); return true; } void HelloWorld::closeCard() { /* x方向拉伸至0的動作 */ ScaleTo* scaleToHide = ScaleTo::create(0.6f, 0.0f, 1.0f); /* 建立卡牌放大的回撥函式 */ auto funcScaleToShow = [=](){ ScaleTo* scaleToShow = ScaleTo::create(0.6f, 1.0f, 1.0f); sprite2->runAction(scaleToShow); }; /* 將回調函式封裝為動作 */ CallFunc* callFuncSpr2 = CallFunc::create(funcScaleToShow); /* 依次執行動作 */ Sequence* sequence = Sequence::create(scaleToHide, callFuncSpr2, NULL); sprite1->runAction(sequence); } void HelloWorld::openCard() { /* x方向拉伸至0的動作 */ ScaleTo* scaleToHide = ScaleTo::create(0.6f, 0.0f, 1.0f); auto funcScaleToShow = [=](){ ScaleTo* scaleToShow = ScaleTo::create(0.6f, 1.0f, 1.0f); sprite1->runAction(scaleToShow); }; CallFunc* callFuncSpr1 = CallFunc::create(funcScaleToShow); Sequence* sequence = Sequence::create(scaleToHide, callFuncSpr1, NULL); sprite2->runAction(sequence); } bool HelloWorld::onTouchBegan(Touch *touch, Event *unused_event) { return true; } void HelloWorld::onTouchMoved(Touch *touch, Event *unused_event) { } void HelloWorld::onTouchEnded(Touch *touch, Event *unused_event) { /* cardFlag為偶數則蓋住卡牌,基數則開啟卡牌 */ if (0 == cardFlag%2) { closeCard(); } else { openCard(); } cardFlag++; }
原始碼免積分下載地址:
程式碼一:卡牌翻轉效果的實現(只有當滑鼠點中卡牌才翻轉)
程式碼二:卡牌翻轉效果的實現(有點選事件就翻轉)
對比學習會對觸控事件有更深入的理解。
相關推薦
Cocos2D遊戲之旅(三):卡牌翻轉效果的實現(上)
曉石頭的部落格 郵箱:[email protected] 滑鼠點選一次,卡牌蓋住 再次點選,卡牌翻開 效果演示圖 之前一直認為卡牌翻轉是通過幀動畫實現的,當看到@笨木頭用ScaleTo做出來時候,再一次深刻體會到什麼叫大道至簡。 一、先談思路 一共兩張圖片
Cocos2D遊戲之旅(四):卡牌翻轉效果的實現(下)
曉石頭的部落格 郵箱:[email protected] 上篇講解了用ScaleTo縮放卡牌,達到翻轉的效果。 條條大道通羅馬,RotateBy 旋轉卡牌同樣能夠實現,而且效果更棒,就看你喜歡哪種了! 效果對比圖 一、先談思路: 用ScaleTo縮放卡
Cocos2D遊戲之旅(二):主角血條的實現
血槽血量的變化是有兩個元素構成的: 1.血槽圖 2.紅色的進度條 當進度條的進度值不斷減少的時候,就產生血量減少的效果。 UI的佈局我採用了CocoStudio的UI編輯器,感覺不錯,挺容易上手的,如果需要相關資料的給我留言。繼續上圖~ 二、再說實現 bool HelloWorld::init()
RPG遊戲《黑暗之光》流程介紹與程式碼分析之(三):角色控制系統的實現
第三章:角色控制本篇部落格主要對人物移動及其相關操作進行分析,主要包括主角以及鏡頭的移動。在遊戲介面中,我們使用Camera作為視角。為了方便之後判斷當前tag,我們新建一個Tag指令碼,存入一些tag資訊,之後呼叫就不容易出錯using UnityEngine; using
python的遊戲之旅--( 數字 字串 列表 元組 字典 即為遊戲職業)
---恢復內容開始--- 一,個人心得 我覺得學習python就想玩一款遊戲,python的基本資料型別(字串 數字 列表 元組 字典)可以看做一個遊戲職業,每個職業都有相應的技能。 玩好這些職業,讓我們的python之旅更加容易。 &n
Python 遊戲之旅(Pygame)
Pygame是跨平臺Python模組,專為電子遊戲設計,包含影象、聲音。建立在SDL基礎上,允許實時電子遊戲研發而無需被低階語言(如機器語言和組合語言)束縛。基於這樣一個設想,所有需要的遊戲功能和理念都(主要是影象方面)都完全簡化為遊戲邏輯本身,所有的資源結構都可以由高階語言提供。 Pyga
敏捷開發系列之旅 第三站(認識FDD特徵驅動開發)
上篇文章中,我們探討了什麼是XP極限程式設計,以及極限程式設計的管理思想、核心價值觀等等。在敏捷開發之旅的第三站,我想要和大家一起分享FDD特徵驅動開發方法。 特徵驅動開發——Feature Driven Development 還是老規矩,討論之前,我們先了解一下什麼
Stereo Matching文獻筆記之(三):經典演算法Semi-Global Matching(SGM)之碉堡的動態規劃
上一篇部落格中提到了SGM的第一部分,基於分層互資訊(HMI)的代價計算,本文繼續說說自己對SGM代價聚合部分的理解。 (轉載:http://blog.csdn.net/wsj998689aa/article/details/50488249, 作者:迷霧forest)
[寒江孤葉丶的Cocos2d-x之旅_22]Cocos2d-x如何不進入待機(螢幕保持喚醒 不鎖屏 不變黑……)
原創文章,歡迎轉載,轉載請註明:文章來自[寒江孤葉丶的Cocos2d-x之旅系列] 部落格地址:http://blog.csdn.net/qq446569365 方法很簡單,一行程式碼就可以輕鬆搞定…… 首先是IOS的實現: 在AppController.mm檔案
《OneForAll框架搭建之旅》前端篇:微前端架構設計(Vue)
心之所向,勇往直前!記錄開發過程中的那些小事,給自己加點經驗值。 前言 作為一個.Net後端開發,在競爭愈加激烈的當下,掌握點前端配菜好像已經是家常便飯了。 剛好在工作的第5個年頭,辭去小主管職務的我要再次踏上面試之路,為了要避免被面試官吊打,除了複習《吊打面試
在STM32上實現NTFS之4:GPT分區表的C語言實現(1):主GPT表頭的實現
center mbr分區 sum 對齊 字節數 決定 容器 alt 水平 題外話:在荒廢了很久沒有更新之後……某日突然收到讀者的站內信!內容大體是詢問GPT分區表信息的讀取方式,筆者激動萬分之下,決定繼續解剖NTFS……其實GPT嚴格上不算是NTFS的內容, GPT和M
學習 WebService 第三步:一個簡單的實例(SoapUI測試REST項目)
方法 資源 ima .com required tle margin 導出 ont 原文地址:SOAPUI測試REST項目(六)——REST服務和WADL ↑↑↑ 原文用的SoapUI,2018-3-19時,這個軟件已經更名為ReadyAPI(集成了SoapUI),因此下文
資料結構實驗之棧與佇列六:下一較大值(二)(SDUT 3333)
#include <bits/stdc++.h> using namespace std; int a[1000006]; int b[1000006]; int sta[100006]; int main() { int t,n,i,j,top; while(~sc
資料結構實驗之棧與佇列五:下一較大值(一)(SDUT 3332)
#include <bits/stdc++.h> using namespace std; int a[1005]; int main() { int t,n,i,j; while(~scanf("%d",&t)) { while(t-
資料結構實驗之棧與佇列五:下一較大值(一)
資料結構實驗之棧與佇列五:下一較大值(一) Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Problem Description 對於包含n(1<=n<=1000)個整數的序列,對於序列中的每一元素,
資料結構實驗之棧與佇列五:下一較大值(一,二)
資料結構實驗之棧與佇列五:下一較大值(一,二) Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Problem Description 對於包含n(1<=n<=1000)個整數的序列,對於序
區塊鏈技術基礎語言(三十):Go語言常用工具包(下)
原文連結:區塊鏈技術基礎語言(三十):Go語言常用工具包(下) 一、JSON處理 JSON(JavaScript Object Notation)是一種輕量級的資料交換格式,方便人們閱讀和編寫,也方便程式地解析和生成。雖然JSON是JavaScript的子集,但其格式完全獨立於程式語言,表現
6、CentOS7 安裝Docker之擴充套件(三個技巧,將Docker映象體積減小90%)
三個技巧,將Docker映象體積減小90% 在構建Docker容器時,應該儘量想辦法獲得體積更小的映象,因為傳輸和部署體積較小的映象速度更快。 但RUN語句總是會建立一個新層,而且在生成映象之前還需要使用很多中間檔案,在這種情況下,該如何獲得體積更小的映象呢? 你可能
資料結構實驗之棧與佇列六:下一較大值(二)(因為資料量大所以用棧來操作)
資料結構實驗之棧與佇列六:下一較大值(二) Time Limit: 150 ms Memory Limit: 8000 KiB Problem Description 對於包含n(1<=n<=100000)個整數的序列,對於序列中的每一元素,在序列中查詢
資料結構實驗之棧與佇列六:下一較大值(二)
Time Limit: 150 ms Memory Limit: 8000 KiB Problem Description 對於包含n(1<=n<=100000)個整數的序列,對於序列中的每一元素,在序列中查詢其位置之後第一個大於它的值,如果找到,輸出所找到的