2

所以我即将在Cocos2D-X. 我需要它对触摸做出响应,并且当用户触摸六边形时我将触发一些动画和动作。

我想知道哪个是实现这一目标的更好方法。使用CCTMXTiledMap来创建六边形平铺地图,还是自己绘制六边形网格?

在自定义绘图解决方案中,CCDrawNode绘制六边形的更好方法是什么?

任何建议,将不胜感激。

在此处输入图像描述

4

2 回答 2

2

我最终CCDrawNode自己画了六边形,这样我就有了想要的六边形触摸空间,而且我不需要做任何额外的计算来检查六边形是否被触摸过。

这是算法:

Hexagon::Hexagon(float hexagonWidth, float hexagonHeight, Color4F fillColor)
{
    float width = hexagonWidth;
    float height = hexagonHeight;

    _drawNode = CCDrawNode::create();
    Point vertices[6] = {
        Point( 0.f, height/2 ),
        Point( width*1/4, height ),
        Point( width*3/4, height ),
        Point( width, height/2 ),
        Point( width*3/4, 0.f ),
        Point( width*1/4, 0.f )
    };

    Color4F borderColor = {0.0f, 0.0f, 1.0f, 1.0f};
    _drawNode->drawPolygon(vertices, 6, fillColor, 0.f, borderColor);
    _drawNode->setAnchorPoint(Point(0.5, 0.5));
}
于 2018-05-14T16:10:46.800 回答
0

试试这个代码 -

CCMenu  *myMenu =   CCMenu::create();
    myMenu->setPosition(CCPointZero);
    this->addChild(myMenu);

    int leftMargin  =   20;
    int topMargin   =   500;

    int index   =   0;
    for (int i=0; i<5; i++) {
        leftMargin  =   150;
        if (i%2 != 0) {
            leftMargin  =   leftMargin-(100/2);
        }
        for (int j=0; j<5; j++) {


            CCMenuItemImage *hexImg =   CCMenuItemImage::create("hexagon_new.png", "hexagon_new.png", this, menu_selector(Hexagon::clickOnHex));
            hexImg->setRotation(90);
            hexImg->setPosition(ccp(leftMargin, topMargin));
            hexImg->setTag(index);
            hexImg->setScale(115/hexImg->getContentSize().width);
            myMenu->addChild(hexImg);
            index++;
            leftMargin  += 100;
        }
        topMargin   -=  82;
    }

并且在用户触摸时在六边形上做动画的功能是 -

void Hexagon::clickOnHex(CCObject *sender){
    CCMenuItemImage *tempHex    =   (CCMenuItemImage *)sender;
    CCRotateBy *rotateBy        =   CCRotateBy::create(0.5, 360);
    tempHex->runAction(rotateBy);
    CCLOG("HEX CLICKED");
}

做你想做的动画。

这是我使用的图像。

六边形图像

于 2014-03-19T06:29:23.720 回答