Beispiel #1
0
void MainGame::onTouchEnded(Touch* touch, Event* event)
{
    CCLOG("touch ended.");
    
    DrawNode* node = (cocos2d::DrawNode*) this->getChildByTag(100);
    node->clear();
}
	void redraw()
	{
		drawNode->clear();
		vector<Unit>::iterator itor;
		for (itor = unitList.begin(); itor != unitList.end(); ++itor)
		{
			drawNode->drawCircle(itor->pos, 10, 360, 10, false, Color4F::BLUE);
			drawNode->drawLine(itor->pos, itor->pos + itor->velocity * 30, Color4F::GREEN);
		}
	}
Beispiel #3
0
void ClippingNode::setSquareStencil()
{
    isSquareStencil = true;
    if(getStencil() == nullptr || dynamic_cast<DrawNode*>(getStencil()) == nullptr)
    {
        setStencil(DrawNode::create());
        //addChild(getStencil()); //If you need to see what the stencil is like, for debug purpose
    }
    DrawNode* stencil = (DrawNode*)getStencil();
    stencil->clear();
    Vec2 rectangle[4];
    rectangle[0] = Vec2(0, 0);
    rectangle[1] = Vec2(this->getContentSize().width / this->getScaleX(), 0);
    rectangle[2] = Vec2(this->getContentSize().width / this->getScaleX(), this->getContentSize().height / this->getScaleY());
    rectangle[3] = Vec2(0, this->getContentSize().height / this->getScaleY());
    
    Color4F white(1, 1, 1, 1);
    stencil->drawPolygon(rectangle, 4, white, 1, white);
}
Beispiel #4
0
void Sprite::debugDraw(bool on)
{
    DrawNode* draw = getChildByName<DrawNode*>("debugDraw");
    if(on)
    {
        if(!draw)
        {
            draw = DrawNode::create();
            draw->setName("debugDraw");
            addChild(draw);
        }
        draw->setVisible(true);
        draw->clear();
        //draw lines
        auto last = _polyInfo.triangles.indexCount/3;
        auto _indices = _polyInfo.triangles.indices;
        auto _verts = _polyInfo.triangles.verts;
        for(unsigned int i = 0; i < last; i++)
        {
            //draw 3 lines
            Vec3 from =_verts[_indices[i*3]].vertices;
            Vec3 to = _verts[_indices[i*3+1]].vertices;
            draw->drawLine(Vec2(from.x, from.y), Vec2(to.x,to.y), Color4F::GREEN);
            
            from =_verts[_indices[i*3+1]].vertices;
            to = _verts[_indices[i*3+2]].vertices;
            draw->drawLine(Vec2(from.x, from.y), Vec2(to.x,to.y), Color4F::GREEN);
            
            from =_verts[_indices[i*3+2]].vertices;
            to = _verts[_indices[i*3]].vertices;
            draw->drawLine(Vec2(from.x, from.y), Vec2(to.x,to.y), Color4F::GREEN);
        }
    }
    else
    {
        if(draw)
            draw->setVisible(false);
    }
}
///all screen move functions should use this
void HelloWorld::lookAt(Vec2 pos)
{
    Vec2 visible = Director::getInstance()->getVisibleSize();
    this->setPosition(-1*(pos - visible/2));
    protractor->setPosition(lookingAt());
    notifier->setPosition(lookingAt());

    //draw grid
    Vec2 botleft = screenspaceToWorldspace(Vec2::ZERO);
    Vec2 topright = screenspaceToWorldspace(visible);
    Vec2 drawSpaceBotLeft = botleft - GRID_LABEL_SPACING;
    Vec2 drawSpaceTopRight = topright + GRID_LABEL_SPACING;
	DrawNode* gridSprite = (DrawNode*)getChildByName("gridSprite");
    if (gridSprite)
    {
        gridSprite->clear();
        std::vector<std::string> toRemove;
        for (auto child : gridSprite->getChildren())
        {
            if (!onScreen(child->getPosition(), Vec2(GRID_LABEL_SPACING)))
                toRemove.push_back(child->getName());
        }
        for (auto name : toRemove)
        {
            gridSprite->removeChildByName(name);
        }
    }
    else
    {
        gridSprite = DrawNode::create();
        gridSprite->setName("gridSprite");
        addChild(gridSprite, 0);
    }
    //vertical lines
    for (int i= drawSpaceBotLeft.x; i<drawSpaceTopRight.x; i++)
    {
        if(i % (int)GRID_SPACING.x)
            continue;
        gridSprite->drawSegment(Vec2(i, drawSpaceBotLeft.y), Vec2(i, drawSpaceBotLeft.y+visible.y+2*GRID_LABEL_SPACING.y),
                                GRID_LINE_THICKNESS, Color4F(1,1,1,0.1));
        if(!(i % (int)GRID_LABEL_SPACING.x))
        {
            std::string txt = std::to_string(i);
            auto label = gridSprite->getChildByName("v" + txt);
            if (!label)
            {
                label = Label::createWithTTF(txt, "fonts/arial.ttf", GRID_LABEL_SIZE);
                label->setName("v" + txt);
                gridSprite->addChild(label);
            }
            label->setPosition(Vec2(i, topright.y - GRID_LABEL_SIZE * 2));
        }
    }
    //horizontal lines
    for (int i= drawSpaceBotLeft.y; i<drawSpaceTopRight.y; i++)
    {
        if(i % (int)GRID_SPACING.y)
            continue;
        gridSprite->drawSegment(Vec2(drawSpaceBotLeft.x, i), Vec2(drawSpaceBotLeft.x+visible.x + 2 * GRID_LABEL_SPACING.x, i),
                                GRID_LINE_THICKNESS, Color4F(1,1,1,0.1));   
        if(!(i % (int)GRID_LABEL_SPACING.y))
        {
            std::string txt = std::to_string(i);
            auto label = gridSprite->getChildByName("h" + txt);
            if (!label)
            {
                label = Label::createWithTTF(txt, "fonts/arial.ttf", GRID_LABEL_SIZE);
                label->setName("h" + txt);
                gridSprite->addChild(label);
            }
            label->setPosition(Vec2(botleft.x + GRID_LABEL_SIZE * 2, i));
        }
    }
    repaintCursor();
    Commorose* c = (Commorose*)commorose;
    c->setPosition(screenspaceToWorldspace(c->getPositionOnScreen()));
}