Cocos2dx中精靈(CCSprite)、動畫建立
- 1 .精靈的3種建立方法
/* _MySprite自定義的一個類 */
bool _MySprite::init()
{
//方法1.直接使用圖片來建立精靈
CCSprite* sprite = CCSprite::create("CloseNormal.png");
addChild(sprite);
sprite->setPosition(ccp(100, 100));
-------------------------------------------------
//方法2.通過紋理建立精靈
CCTexture2D* texture = CCTextureCache::sharedTextureCache()
->addImage("CloseNormal.png");
CCSprite* sprite = CCSprite::createWithTexture(texture);
addChild(sprite);
sprite->setPosition(ccp(100, 100));
-------------------------------------------------
//方法3.通過精靈幀(幀)建立精靈
CCTexture2D* texture = CCTextureCache::sharedTextureCache()
->addImage("CloseNormal.png");
CCSpriteFrame* frame = CCSpriteFrame::createWithTexture(texture, CCRect(0, 0, 20, 20));
CCSprite* sprite = CCSprite::createWithSpriteFrame(frame);
addChild(sprite);
sprite->setPosition(ccp(100, 100));
return true;
}
- 2 .動作(CCMoveBy)和動畫( CCAnimate)
bool _MoveByAction::init()
{
CCLayer::init();
//(1). moveby
CCSprite* sprite = CCSprite::create("CloseNormal.png");
sprite->setPosition(ccp(100, 100));
addChild(sprite);
#if 0
/* 建立動作 */
CCMoveBy* moveby = CCMoveBy::create();
sprite->runAction(moveby);
#endif
-----------------------------------------------------
//(2). 建立動畫
CCArray* arr = CCArray::create();
for (auto i = 0; i < var; ++i)
{
/* var變數為當前resource中有多少張資源圖片 */
char fileName[256];
memset(fileName, 0x00, sizeof(fileName));
sprintf(fileName, "圖片名稱%d.png", i);
CCSpriteFrame* frame = CCSpriteFrame::create(fileName, CCRect(0, 0, 80, 80));
/* CCRect(0,0,80,80)中的80*80是因為圖片資源為80*80 */
arr->addObject(frame);
}
CCAnimation* animation = CCAnimation::createWithSpriteFrames(arr, 0.1f);
//0.1f是time
CCAnimate* animate = CCAnimate::create(animation);
/* 讓動畫不停的執行 */
CCRepeatForever* repeat = CCRepeatForever::create(animate);
sprite->runAction(repeat);
return true;
}
上面建立動畫中,採用了陣列來存放圖片資源,假如為植物大戰殭屍遊戲中的植物(豌豆),共有8張(每秒鐘8張:p_2_01~p_2_08);如下所示例:
,
但是在實際的開發中,不會這樣存放圖片資源(會浪費空間),特別是序列幀的特性中;應為下圖所示存放資源(將一系列的圖片放在一起):
細心的讀者會有這樣的疑惑,那怎麼去從一張圖片中讀出每一個小的圖片資源?(假若上面的豌豆圖片的名稱是:pea.png,那麼會有對應的pea.plist檔案,其描述了該圖片資源的詳細資訊)。cocos2dx為我們提供了函式來解決這個問題,這樣便使得問題簡單化;如下程式碼:
bool _MoveByAction::init()
{
CCLayer::init();
//建立一個精靈
CCSprite* sprite = CCSprite::create("CloseNormal.png");
sprite->setPosition(ccp(100, 100));
addChild(sprite);
//PictureName.plist
//載入合成中的幀到記憶體
CCSpriteFrameCache* cache = CCSpriteFrameCache::sharedSpriteFrameCache();
cache->addSpriteFramesWithFile("pea.plist");
//找出緩衝中的幀並且放到陣列arr中
CCArray* arr = CCArray::create();
for (auto i = 0; i < 8; ++i)
{
/* var變數為當前resource中有多少張資源圖片 */
char FrameName[256];
memset(FrameName, 0x00, sizeof(FrameName));
sprintf(FrameName, "圖片名稱%d.png", i);
CCSpriteFrame* frame = cache->spriteFrameByName(FrameName);
arr->addObject(frame);
}
//建立animation
CCAnimation* animation = CCAnimation::createWithSpriteFrames(arr, 0.1f);
//0.1f是time
//通過animation來建立animate
CCAnimate* animate = CCAnimate::create(animation);
/* 通過animate建立無限迴圈的動畫動作 */
CCRepeatForever* repeat = CCRepeatForever::create(animate);
//讓精靈來執行動畫
sprite->runAction(repeat);
return true;
}
相關文章
- SpriteSheet精靈動畫引擎動畫
- 學習 PixiJS — 動畫精靈JS動畫
- pixi的使用之建立和操作精靈
- 原生webGL練習:利用點精靈實現字串動畫!Web字串動畫
- UNIX中的精靈程式 (轉)
- Python 精靈模組_幀動畫_純畫筆下雪效果.pyPython動畫
- 網頁小實驗——用canvas生成精靈動畫圖片網頁Canvas動畫
- 天貓精靈的自定義語音技能建立流程
- SF精靈 for ChromeChrome
- 《幻想精靈》精靈系統及圖鑑技能說明攻略
- python 精靈模組非常簡單的讓小朋友製作遊戲和動畫Python遊戲動畫
- 加密精靈 (EncryptGenie) 2.61加密
- SpriteAtlas精靈圖集
- CSS精靈圖技術CSS
- 按鍵精靈 使用教程
- Flutter動畫之粒子精講Flutter動畫
- 與小卡特一起學python 第17章動畫精靈和碰撞檢測Python動畫
- 驅動精靈是幹嘛的 驅動精靈怎麼安裝驅動
- 自動精靈 2.00 破解教程
- 初識屬性動畫——使用Animator建立動畫動畫
- 可愛精靈在球裡養著玩?《精靈之境》IOS預約開啟!iOS
- 使用 MacSVG 建立 SVG 動畫MacSVG動畫
- Centos8中建立LVM精簡邏輯卷CentOSLVM
- CSS基礎定位與精靈圖CSS
- 360健康精靈工具怎麼用?詳解360健康精靈在電腦中使用的方法
- 關於CCSprite不能及時顯示的問題
- 學習 PixiJS — 精靈狀態JS
- jQuery實現圖示特效(精靈圖)jQuery特效
- Niantic:《精靈寶可夢GO》僅完成10%Go
- 英語會話精靈 V2.0會話
- 英語會話精靈V1.0會話
- 精選!CSS 動畫之工具、框架和教程CSS動畫框架
- Cocos2dx之win8上使用python指令碼建立vs2013的cocos2dx工程Python指令碼
- Cocos2dx 3.0rc 建立工程 並 移植到其他平臺
- [譯]Android 動畫的靈魂—— InterpolatorAndroid動畫
- cocos2dx 3.2中的觸控機制
- 惠普暗影精靈6遊戲本震撼首發遊戲
- 學習 PixiJS — 小精靈冒險JS