Skip to content

cocos2d-x CCTableViewでCCSpriteを使う方法

2013年1月10日

UITableViewと似ているようで動きが違う。

最も違うのが、「tableCellAtIndex」部分。
UITableViewで言う「CellForRowAtIndexPath」部分です。

決定的に違う点は、初期表示時にidxが0からカウントされないという点と、「tableCellAtIndex」が複数回呼ばれること。

なんでこんな動きなのかわからないけどそれが原因で、意図しない画像が表示されてしまう。

なので以下のように角必要がある模様。


CCTableViewCell* HelloWorld::tableCellAtIndex(CCTableView *table, unsigned int idx)
{
    CCTableViewCell *cell = table->dequeueCell();
    CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("images.plist");
    
    CCDictionary* dic      = (CCDictionary*)dataArray->objectAtIndex(idx);
    CCString* image_id     = (CCString*)dic->objectForKey("image_id");
    CCString* tipFileName = CCString::createWithFormat("image_%s.png",image_id->getCString());
    
    
    if (!cell) {
        
        
        cell = new CCTableViewCell();
        cell->autorelease();
        
        // 背景
        CCLayerGradient *cellLayer = CCLayerGradient::create();
        cellLayer->setContentSize(CCSizeMake(CCDirector::sharedDirector()->getWinSize().width, SIZE_FIX(CELL_SIZE)));
        cellLayer->setStartColor(ccc3(255, 255, 255));
        cellLayer->setEndColor(ccc3(180, 180, 180));
        cellLayer->setTag(100);
        
        // 画像
        CCSprite* cellTipSprite = CCSprite::createWithSpriteFrameName(tipFileName->getCString());
        cellTipSprite -> setPosition(ccp(0, 0));
        cellTipSprite -> setTag(101);
        
        cellLayer->addChild(cellTipSprite);
        cell->addChild(cellLayer);
        
        
    }
    else
    {
        CCLayerGradient *layer = (CCLayerGradient *)cell->getChildByTag(101);
        
        
        // image更新
        layer -> removeChildByTag(102, true);
        CCSprite* imageSprite;
        imageSprite = CCSprite::createWithSpriteFrameName(tipFileName->getCString());
        imageSprite -> setPosition(ccp(0, 0));
        imageSprite -> setTag(102);
        layer->addChild(imageSprite);
        
    }

}

!cellのときにCreateするけど、elseのときに配置してある物をRemoveしてまた配置しなおす。
そうすることで画像の正確煮に出すことができる。

UIKitに似せて作ってあるのは色々助かるけど、脳みそが固まって詰まっちゃうこういうケースもあるんだな〜

以下参考

http://blog.csdn.net/azhou_hui/article/details/8167498

広告
コメントする

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。