FootWork
@FootWork

Cocos2d-x-3.7 С++ Как нарисовать линию мышкой?

Привет всем! Начал заниматься cocos2d-x-3.7, и не могу найти в гугле как нарисовать линию пером (как в paint). Вроде бы есть какие-то решения, но чересчур сложные и совершенно непонятные.
Вот мой код hello word:
//HelloWorldScene.h фрагмент класса HelloWorld
virtual void onTouchEnded(cocos2d::Touch*, cocos2d::Event*);
virtual void onTouchMoved(cocos2d::Touch*, cocos2d::Event*);

//HelloWorldScene.cpp 
void HelloWorld::Init()
{
   //...
   touchListener->onTouchEnded = CC_CALLBACK_2(HelloWorld::onTouchEnded, this);
   touchListener->onTouchMoved = CC_CALLBACK_2(HelloWorld::onTouchMoved, this);
}
void HelloWorld::onTouchEnded(Touch* touch, Event* event)
{
   cocos2d::log("touch ended");
}

void HelloWorld::onTouchMoved(Touch* touches, Event* event)
{
    cocos2d::log("touch moved");
}


Собственно, что мне нужно дописать в onTouchMoved чтобы можно было рисовать линию при нажатии кнопки мыши?
  • Вопрос задан
  • 666 просмотров
Решения вопроса 1
FootWork
@FootWork Автор вопроса
class Line
{
public:
	std::vector<cocos2d::CCPoint> curve;
};
class HelloWorld
{
    //.....
private:
    cocos2d::DrawNode *_drawNode;
    std::vector<Line> m_lines;
    Line * newLine;
};
bool HelloWorld::Init()
{
    //...
    _drawNode = DrawNode::create();
    this->addChild(_drawNode);
   _drawNode->clear();
}
bool HelloWorld::onTouchBegan(cocos2d::Touch* touch, cocos2d::Event* event)
{
    CCPoint touchLocation = touch->getLocationInView();
    touchLocation = CCDirector::sharedDirector()->convertToGL(touchLocation);
    touchLocation = convertToNodeSpace(touchLocation);
    createLine(touchLocation);    
   return true;
}

void HelloWorld::onTouchMoved(Touch* touch, Event* event)
{
    CCPoint touchLocation = touch->getLocationInView();
    touchLocation = CCDirector::sharedDirector()->convertToGL(touchLocation);
    touchLocation = convertToNodeSpace(touchLocation);
    addPoint(touchLocation);
    HelloWorld::drawing();
}

void HelloWorld::onTouchEnded(Touch* touch, Event* event)
{
    deleteLine();
}

void HelloWorld::createLine(cocos2d::CCPoint tloc)
{
    newLine = new Line;
    (newLine->curve).push_back(tloc);
}
void HelloWorld::deleteLine()
{
    delete newLine;
    newLine = NULL;
}
void HelloWorld::addPoint(cocos2d::CCPoint tloc)
{
    (newLine->curve).push_back(tloc);
}
void HelloWorld::drawing()
{
    int m = (newLine->curve).size();
    for(int i=1; i < m; i++)
    {
        _drawNode->drawLine(newLine->curve[i-1], newLine->curve[i], Color4F::BLUE);
    }
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы