cocos2d - x 학습 노트 (14) -- CCTextureCache
본문 은http://www.wenbanana.com허수아비 블 로그, 방문 을 환영 합 니 다!
여기 서 저 는 코드 에 따라 CCTextureCache 를 직접 설명 합 니 다. 코드 는 다음 과 같 습 니 다.
...........................
CCSprite* sprite = CCSprite::spriteWithFile("player.png");
addChild(sprite);
......................
이것 은 우리 초보 자 들 이 자주 사용 하 는 정령 을 불 러 오 는 방법 입 니 다. 다음은 다른 방식 으로:
........
CCTexture2D* cache = CCTextureCache::sharedTextureCache()->addImage("player.png");
...........
CCSprite* sprite = CCSprite::spriteWithTexture(cache);
addChild(sprite);
...........
두 번 째 방식 은 효율 이 비교적 높다 고 생각 할 수도 있 지만 사실은 똑 같 고 두 번 째 방식 이 비교적 유연 할 뿐이다.게임 에서 한 폭 의 배경 에 많은 엘 프 를 불 러 오 려 면 배경 을 자 르 고 나 서 야 엘 프 (즉 첫 번 째 사용 방식) 를 불 러 옵 니 다. 엘 프 의 수량 이 너무 많 으 면 화면 이 멈 추 는 현상 이 나타 나 고 게이머 들 은 게임 카드 를 느 낄 수 있 습 니 다.만약 에 우리 가 두 번 째 방식 으로 장면 에 들 어가 기 전에 그림 을 CCTextureCache 에 불 러 오 는 것 을 실현 한다 면 이 그림 들 을 진정 으로 호출 할 때 속도 가 빨 라 지고 끊 기 는 현상 이 나타 나 지 않 을 것 이다.여기 서 다시 한 번 설명 하 자 면 모든 그림 을 불 러 오 는 방법 은 texture 로 CCTexureCache 에 불 러 오 는 것 입 니 다. CCSprite 뿐만 아니 라 실례 를 들 어 설명 하 겠 습 니 다.
step 1: cocos2d - win 32 프로젝트 를 만 들 고 textureCache 라 고 명명 합 니 다.
step 2: Hello World Scene. h 에 다음 두 가지 종 류 를 추가 합 니 다.
//
class TextureCache:public CCLayer
{
protected:
CCTexture2D* m_cache[20];
public:
TextureCache();
void addSprite(CCObject* pSender);
};
//
class SpriteLayer:public CCLayer
{
public:
SpriteLayer();
};
step 3: Hello World Scene. cpp 에 다음 함 수 를 추가 합 니 다.
TextureCache::TextureCache()
{
CCSize size = CCDirector::sharedDirector()->getWinSize();
CCLabelTTF* label = CCLabelTTF::labelWithString("Click", "Arial", 30);
CCMenuItemLabel* item = CCMenuItemLabel::itemWithLabel(label,
this, menu_selector(TextureCache::addSprite));
CCMenu* menu = CCMenu::menuWithItem(item);
addChild(menu, 1);
item->setPosition(ccp(200, 150));
menu->setPosition(ccp(200, 150));
//load textures
m_cache[0] = CCTextureCache::sharedTextureCache()->addImage("Images/player1.png");
m_cache[1] = CCTextureCache::sharedTextureCache()->addImage("Images/player2.png");
m_cache[2] = CCTextureCache::sharedTextureCache()->addImage("Images/player3.png");
m_cache[3] = CCTextureCache::sharedTextureCache()->addImage("Images/player4.png");
m_cache[4] = CCTextureCache::sharedTextureCache()->addImage("Images/player5.png");
m_cache[5] = CCTextureCache::sharedTextureCache()->addImage("Images/player6.png");
m_cache[6] = CCTextureCache::sharedTextureCache()->addImage("Images/player7.png");
m_cache[7] = CCTextureCache::sharedTextureCache()->addImage("Images/player8.png");
m_cache[8] = CCTextureCache::sharedTextureCache()->addImage("Images/player9.png");
m_cache[9] = CCTextureCache::sharedTextureCache()->addImage("Images/player10.png");
m_cache[10] = CCTextureCache::sharedTextureCache()->addImage("Images/player11.png");
m_cache[11] = CCTextureCache::sharedTextureCache()->addImage("Images/player12.png");
m_cache[12] = CCTextureCache::sharedTextureCache()->addImage("Images/player13.png");
m_cache[13] = CCTextureCache::sharedTextureCache()->addImage("Images/player14.png");
m_cache[14] = CCTextureCache::sharedTextureCache()->addImage("Images/player15.png");
m_cache[15] = CCTextureCache::sharedTextureCache()->addImage("Images/player16.png");
m_cache[16] = CCTextureCache::sharedTextureCache()->addImage("Images/player17.png");
m_cache[17] = CCTextureCache::sharedTextureCache()->addImage("Images/player18.png");
m_cache[18] = CCTextureCache::sharedTextureCache()->addImage("Images/player19.png");
m_cache[19] = CCTextureCache::sharedTextureCache()->addImage("Images/player20.png");
}
void TextureCache::addSprite(CCObject* pSender)
{
CCSize size = CCDirector::sharedDirector()->getWinSize();
//add sprites
CCSprite* background = CCSprite::spriteWithFile("HelloWorld.png");
background->setPosition(ccp(size.width / 2, size.height / 2));
CCSprite* s1 = CCSprite::spriteWithTexture(m_cache[0]);
CCSprite* s2 = CCSprite::spriteWithTexture(m_cache[1]);
CCSprite* s3 = CCSprite::spriteWithTexture(m_cache[2]);
CCSprite* s4 = CCSprite::spriteWithTexture(m_cache[3]);
CCSprite* s5 = CCSprite::spriteWithTexture(m_cache[4]);
CCSprite* s6 = CCSprite::spriteWithTexture(m_cache[5]);
CCSprite* s7 = CCSprite::spriteWithTexture(m_cache[6]);
CCSprite* s8 = CCSprite::spriteWithTexture(m_cache[7]);
CCSprite* s9 = CCSprite::spriteWithTexture(m_cache[8]);
CCSprite* s10 = CCSprite::spriteWithTexture(m_cache[9]);
CCSprite* s11 = CCSprite::spriteWithTexture(m_cache[10]);
CCSprite* s12 = CCSprite::spriteWithTexture(m_cache[11]);
CCSprite* s13 = CCSprite::spriteWithTexture(m_cache[12]);
CCSprite* s14 = CCSprite::spriteWithTexture(m_cache[13]);
CCSprite* s15 = CCSprite::spriteWithTexture(m_cache[14]);
CCSprite* s16 = CCSprite::spriteWithTexture(m_cache[15]);
CCSprite* s17 = CCSprite::spriteWithTexture(m_cache[16]);
CCSprite* s18 = CCSprite::spriteWithTexture(m_cache[17]);
CCSprite* s19 = CCSprite::spriteWithTexture(m_cache[18]);
CCSprite* s20 = CCSprite::spriteWithTexture(m_cache[19]);
s1->setPosition(ccp(50, 50));
s2->setPosition(ccp(60, 50));
s3->setPosition(ccp(70, 50));
s4->setPosition(ccp(80, 50));
s5->setPosition(ccp(90, 50));
s6->setPosition(ccp(100, 50));
s7->setPosition(ccp(110, 50));
s8->setPosition(ccp(120, 50));
s9->setPosition(ccp(130, 50));
s10->setPosition(ccp(140, 50));
s11->setPosition(ccp(150, 50));
s12->setPosition(ccp(160, 50));
s13->setPosition(ccp(170, 50));
s14->setPosition(ccp(180, 50));
s15->setPosition(ccp(190, 50));
s16->setPosition(ccp(200, 50));
s17->setPosition(ccp(210, 50));
s18->setPosition(ccp(220, 50));
s19->setPosition(ccp(230, 50));
s20->setPosition(ccp(240, 50));
addChild(s1);
addChild(s2);
addChild(s3);
addChild(s4);
addChild(s5);
addChild(s6);
addChild(s7);
addChild(s8);
addChild(s9);
addChild(s10);
addChild(s11);
addChild(s12);
addChild(s13);
addChild(s14);
addChild(s15);
addChild(s16);
addChild(s17);
addChild(s18);
addChild(s19);
addChild(s20);
}
SpriteLayer::SpriteLayer()
{
CCSprite* s1 = CCSprite::spriteWithFile("Images/player1.png");
CCSprite* s2 = CCSprite::spriteWithFile("Images/player2.png");
CCSprite* s3 = CCSprite::spriteWithFile("Images/player3.png");
CCSprite* s4 = CCSprite::spriteWithFile("Images/player4.png");
CCSprite* s5 = CCSprite::spriteWithFile("Images/player5.png");
CCSprite* s6 = CCSprite::spriteWithFile("Images/player6.png");
CCSprite* s7 = CCSprite::spriteWithFile("Images/player7.png");
CCSprite* s8 = CCSprite::spriteWithFile("Images/player8.png");
CCSprite* s9 =CCSprite::spriteWithFile("Images/player9.png");
CCSprite* s10 = CCSprite::spriteWithFile("Images/player10.png");
CCSprite* s11 = CCSprite::spriteWithFile("Images/player11.png");
CCSprite* s12 = CCSprite::spriteWithFile("Images/player12.png");
CCSprite* s13 = CCSprite::spriteWithFile("Images/player13.png");
CCSprite* s14 = CCSprite::spriteWithFile("Images/player14.png");
CCSprite* s15 = CCSprite::spriteWithFile("Images/player15.png");
CCSprite* s16 = CCSprite::spriteWithFile("Images/player16.png");
CCSprite* s17 = CCSprite::spriteWithFile("Images/player17.png");
CCSprite* s18 = CCSprite::spriteWithFile("Images/player18.png");
CCSprite* s19 = CCSprite::spriteWithFile("Images/player19.png");
CCSprite* s20 = CCSprite::spriteWithFile("Images/player20.png");
s1->setPosition(ccp(50, 50));
s2->setPosition(ccp(60, 50));
s3->setPosition(ccp(70, 50));
s4->setPosition(ccp(80, 50));
s5->setPosition(ccp(90, 50));
s6->setPosition(ccp(100, 50));
s7->setPosition(ccp(110, 50));
s8->setPosition(ccp(120, 50));
s9->setPosition(ccp(130, 50));
s10->setPosition(ccp(140, 50));
s11->setPosition(ccp(150, 50));
s12->setPosition(ccp(160, 50));
s13->setPosition(ccp(170, 50));
s14->setPosition(ccp(180, 50));
s15->setPosition(ccp(190, 50));
s16->setPosition(ccp(200, 50));
s17->setPosition(ccp(210, 50));
s18->setPosition(ccp(220, 50));
s19->setPosition(ccp(230, 50));
s20->setPosition(ccp(240, 50));
addChild(s1);
addChild(s2);
addChild(s3);
addChild(s4);
addChild(s5);
addChild(s6);
addChild(s7);
addChild(s8);
addChild(s9);
addChild(s10);
addChild(s11);
addChild(s12);
addChild(s13);
addChild(s14);
addChild(s15);
addChild(s16);
addChild(s17);
addChild(s18);
addChild(s19);
addChild(s20);
}
HelloWorld:: scene 함 수 를 수정 합 니 다.
CCScene* HelloWorld::scene()
{
CCScene * scene = NULL;
do
{
// 'scene' is an autorelease object
scene = CCScene::node();
CC_BREAK_IF(! scene);
TextureCache* layer = new TextureCache();
//SpriteLayer* layer = new SpriteLayer();
CC_BREAK_IF(! layer);
// add layer as a child to scene
scene->addChild(layer);
} while (0);
// return the scene
return scene;
}
step 4: 컴 파일 실행 프로그램 입 니 다. 그림 이 많 지 않 기 때문에 뚜렷 한 효 과 를 보 려 면 더 많은 그림 을 추가 해 보 세 요.
소스 코드 다운로드 주소:http://download.csdn.net/download/wen294299195/4525827
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.