CocoStudioV1.2.0 + Cocos2d-x V2.2.2
同一个ScrollView, 首先调用removeAllChildren, 然后添加随机数量的UIPanel(UIPanel预先在CocoStudioV1.2.0中设计好,然后通过clone得到 ), 反复添加几次后, 结果只有第一次显示完全正常,其他的显示不正常
代码如下:
ScrollTestScene.h:
#pragma once
#include “cocos2d.h”
#include “cocos-ext.h”
//#include “…/…/testBasic.h”
USING_NS_CC;
USING_NS_CC_EXT;
using namespace cocos2d::gui;
class ScrollTestScene : public CCScene
{
public:
ScrollTestScene(bool bPortrait = false);
~ScrollTestScene();
virtual void onEnter();
virtual void onExit();
void imageBtnCallback(CCObject* pSender, TouchEventType type);
protected:
gui::TouchGroup * m_pUILayer;
UIPanel * m_pItemModel;
void InitRandom( void );
int Random( int nStart, int nEnd );
void InitScrollView( void );
};
ScrollTestScene.cpp:
#include “ScrollTestScene.h”
ScrollTestScene::ScrollTestScene(bool bPortrait)
: m_pUILayer(NULL)
{
CCScene::init();
}
ScrollTestScene::~ScrollTestScene()
{
}
void ScrollTestScene::onEnter()
{
CCScene::onEnter();
m_pUILayer = gui::TouchGroup::create();
m_pUILayer->scheduleUpdate();
addChild(m_pUILayer);
// register root from json
gui::Widget * pWidget = dynamic_cast<gui::Widget*>(GUIReader::shareReader()->widgetFromJsonFile("NewProject_1/NewProject_1.ExportJson"));
m_pUILayer->addWidget(pWidget);
ImageView * pImageView = static_cast< ImageView *>( m_pUILayer->getWidgetByName( "ImageViewBtn" ) );
pImageView->addTouchEventListener(this, toucheventselector(ScrollTestScene::imageBtnCallback));
m_pItemModel = static_cast< UIPanel *>( m_pUILayer->getWidgetByName( "PanelItem" ) );
}
void ScrollTestScene::onExit()
{
removeAllChildren();
CCArmatureDataManager::purge();
SceneReader::purge();
GUIReader::purge();
ActionManager::purge();
CCScene::onExit();
}
void ScrollTestScene::imageBtnCallback(CCObject* pSender, TouchEventType type)
{
if (type == gui::TOUCH_EVENT_ENDED)
{
InitScrollView();
}
}
void ScrollTestScene::InitRandom( void )
{
cc_timeval psv;
CCTime::gettimeofdayCocos2d(&psv, NULL);
unsigned long int seed = psv.tv_sec*1000 + psv.tv_usec/1000;
srand( seed );
}
int ScrollTestScene::Random( int nStart, int nEnd )
{
return CCRANDOM_0_1() * nEnd + nStart;
}
void ScrollTestScene::InitScrollView( void )
{
CCSize sizeItem = m_pItemModel->getSize();
ScrollView * pScrollView = static_cast<ScrollView*>(m_pUILayer->getWidgetByName("ScrollViewTest"));
if( !pScrollView ) {
CCLOG( "ScrollViewTest not found." );
}
pScrollView->removeAllChildren();
CCSize sizeScrollOrigin = pScrollView->getSize();
CCSize sizeScroll = pScrollView->getInnerContainerSize();
InitRandom();
int nCount = Random( 1, 5 );
int nY, i;
int nRows = nCount;
int nOriginRows = sizeScrollOrigin.height / sizeItem.height;
if( sizeItem.height * nRows > sizeScrollOrigin.height ) {
sizeScroll.height = sizeItem.height * nRows;
}else{
sizeScroll.height = sizeScrollOrigin.height;
}
pScrollView->setInnerContainerSize( sizeScroll );
for( i = 0; i < nCount; i ++ ) {
UIPanel * pItem = static_cast<UIPanel*>( m_pItemModel->clone() );
if( nOriginRows >= nCount ) {
//Item数目不足以填满SCroll时使Item在上方显示
nY = sizeScrollOrigin.height - (i+1) * sizeItem.height;
}else{
nY = (nRows-1) * sizeItem.height;
}
pItem->setPosition( ccp ( 0, nY ) );
pScrollView->addChild( pItem );
pItem->setEnabled( true );
nRows --;
}
}
CocoStudioV1.0.2 + Cocos2d-x V2.2.1没有这个问题