setContentSize is not working in cocos2dx3.0

孤者浪人 提交于 2019-12-25 02:41:56

问题


setContentSize is not working

i am new in cocos2dx and i want to add layer from another class to my main Splashscreen class but setContentSize use device width and height.

i want to set layer size along with my sprite size.

see my code

Gadget.cpp

#include "Gadget.h"
#include "math.h"

int nCount = 100;
static CCPoint Circle [100]; // vertex array

Gadget* Gadget::create(int type)
{
    Gadget *pRet = new Gadget();
    if (pRet && pRet->init(type))
    {
        pRet->autorelease();
        return pRet;
    }
    else
    {
        delete pRet;
        pRet = NULL;
        return NULL;
    }
}

bool Gadget::init(int type)
{
    if(!LayerColor::init())
    {
        return false;
    }

    this->setContentSize(CCSize::ZERO);

    this->initWithColor(Color4B(255,255,255,255));

    CCLog("Before Calling");
    addGadget(type);

    return true;
}

Gadget::Gadget() {
    // TODO Auto-generated constructor stub

}

Gadget::~Gadget() {
    // TODO Auto-generated destructor stub
}

void Gadget::addGadget(int type)
{
    const char* image   =       "gadget_2.png";

    if(type==2)
    {
        image           =       "gadget_1.png";
    }
    //this->initWithFile(image);
    CCLog("After Calling");
    CCSprite *spr = CCSprite::create(image);
    setGadgetPos(this->getContentSize().width/2,0.0);
    this->drawCircle(100,100,100);

}

void Gadget::setGadgetPos(float x, float y)
{
//  this->ignoreAnchorPointForPosition(true);
    this->setPosition(x,y);
}

void Gadget::gadgetAnimStart(int type)
{
    if(type==1)
    {
        this->setAnchorPoint(ccp(0,3));
        auto rotate = RotateBy::create(3,360);
        this->runAction(CCRepeatForever::create(rotate));
    }
}

void Gadget::gadgetAnimStop()
{
    this->stopAllActions();
}

void Gadget::drawCircle(float X, float Y,float rad)
{
    DrawNode *drawnode = DrawNode::create();
    for ( int i = 0 ; i <100; i ++)
    {
        float rads = i * M_1_PI; // radians
        Circle [i] .x = rad * cosf (rads); //vertex x
        Circle [i] .y = rad * sinf (rads); //vertex y
    }

    drawnode->setPosition(Director::sharedDirector()->getVisibleSize().width/2,Director::sharedDirector()->getVisibleSize().height/2);
    drawnode->drawPolygon(Circle,100,Color4F(0,0,0,0),1,Color4F(1,122,153,1));
    this->addChild(drawnode);
}

i have to use Gadget.coo class at Splashscreen.cpp

#include "Splashscreen.h"
#include "HelloWorldScene.h"
#include "CCHelper.h"
#include "Gadget.h"
#include "UserDefaultStorage.h"
#include "VisibleRect.h"
#include "math.h"
#include "Sound.h"
#include "Text_En.h"

USING_NS_CC;

Scene* Splashscreen::createScene()
{
    Scene *s = Scene::create();
    LayerColor *lc = Splashscreen::create();

    s->addChild(lc);
    return s;
}

Splashscreen::Splashscreen() {
    // TODO Auto-generated constructor stub
}

Splashscreen::~Splashscreen() {
    // TODO Auto-generated destructor stub
}

bool Splashscreen::init()
{
    if(!LayerColor::create())
    {
        return false;
    }


    this->initWithColor(ccc4(0,0,0,255));
    this->setContentSize(CCSizeZero);

    Gadget *g = Gadget::create(GREEN_GADGET);
    g->setPosition(ccp(-100,-100));
    this->addChild(g);

 return true;
}

when i use "this->setContentSize(CCSizeZero);" code but no changes in view. its generate fullscreen layer from position -100,-100

please give me some solutions why setContentSize is not working.

Thanks in advanced Rishabh Shah


回答1:


After initialization setContentSize will set size but won't make any visible change, better you provide width and height at initialization.

like:

 this->initWithColor(ccc4(0,0,0,255), width, height);



回答2:


if(!LayerColor::create())
{
    return false;
}

It should be

if(!LayerColor::init())
{
    return false;
}


来源:https://stackoverflow.com/questions/26116658/setcontentsize-is-not-working-in-cocos2dx3-0

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!