Cocos2d-x: How can I draw a resizing rectangle?

故事扮演 提交于 2019-12-11 11:29:43

问题


I'm working on a project with Cocos2d-x 3.4 (wonderful framework BTW :) ). I was wondering how I can draw a simple translucence selection, the same selection you can see on Windows ?

http://cdn.maximumpcguides.com/windows-7/wp-content/uploads/2010/11/use-translucent-select-rectangle-2.png

I tried to use the DrawNode class, but failed to achieve this :'( I hope that someone can show me the right way to do it, please :-)


回答1:


It's pretty easy to draw with DrawNode.

Set the origin point on onTouchBegan event and set the destination point on onTouchMoved event.

// HelloWorld.h
class HelloWorld : public Layer{
public:
    ...
    bool onTouchBegan(const Touch *touch, Event *event);
    void onTouchMoved(const Touch *touch, Event *event);
    void onTouchEnded(const Touch *touch, Event *event);

protected:
    Vec2 _originPoint;
    Vec2 _destinationPoint;
    DrawNode *_drawNode;
};


// HelloWorld.cpp 
bool HelloWorld::init()
{
    if ( !Layer::init() ) return false;

    // Add touch listener
    auto listener = EventListenerTouchOneByOne::create();
    listener->setSwallowTouches(true);
    listener->onTouchBegan = CC_CALLBACK_2(HelloWorld::onTouchBegan, this);
    listener->onTouchMoved = CC_CALLBACK_2(HelloWorld::onTouchMoved, this);
    listener->onTouchEnded = CC_CALLBACK_2(HelloWorld::onTouchEnded, this);
    _eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);

    // Create the draw node
    _drawNode = DrawNode::create();
    addChild(_drawNode);

    return true;
}

bool HelloWorld::onTouchBegan(const cocos2d::Touch *touch, cocos2d::Event *event)
{
    _originPoint = touch->getLocation();
    _destinationPoint = _originPoint;

    return true;
}

void HelloWorld::onTouchMoved(const cocos2d::Touch *touch, cocos2d::Event *event)
{
    _destinationPoint = touch->getLocation();

    _drawNode->clear();
    _drawNode->drawSolidRect(_originPoint, _destinationPoint, Color4F(0,0,1,0.2));
    _drawNode->drawRect(_originPoint, _destinationPoint, Color4F::BLUE);
}

void HelloWorld::onTouchEnded(const cocos2d::Touch *touch, cocos2d::Event *event)
{
    _drawNode->clear();
}


来源:https://stackoverflow.com/questions/29062923/cocos2d-x-how-can-i-draw-a-resizing-rectangle

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