Zeshoekraster tekenen in Cocos 2d-x

Dus ik sta op het punt een Hexagon-rasterspel te maken in Cocos2D-X. Ik wil dat het reageert op aanrakingen en ik ga een aantal animaties en acties activeren wanneer de gebruiker een zeshoek aanraakt.

Ik vroeg me af wat de beste manier is om dit te bereiken.
Gebruik je de CCTMXTiledMapom de kaart met hex-tegels te maken, of teken je zelf het hexagon-raster?

In de aangepaste tekenoplossing is CCDrawNodede betere manier om mijn zeshoeken te tekenen?

Alle suggesties worden op prijs gesteld.


Antwoord 1, autoriteit 100%

Ik heb uiteindelijk CCDrawNodegebruikt om de zeshoek zelf te tekenen, op deze manier heb ik de gewenste zeshoekige aanraakruimte en hoef ik geen extra berekeningen te maken om te controleren welke zeshoek is aangeraakt.

Dit is het algoritme:

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));
}

Antwoord 2

Probeer deze code –

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;
    }

en de functie om animatie op zeshoek te doen bij gebruikersaanraking is –

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

doe animatie wat je wilt.

dit is de afbeelding die ik heb gebruikt.

=”nofollow”>zeshoekige afbeelding

Other episodes