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 CCTMXTiledMap
om de kaart met hex-tegels te maken, of teken je zelf het hexagon-raster?
In de aangepaste tekenoplossing is CCDrawNode
de betere manier om mijn zeshoeken te tekenen?
Alle suggesties worden op prijs gesteld.
Antwoord 1, autoriteit 100%
Ik heb uiteindelijk CCDrawNode
gebruikt 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.