Hex maps creation and rollover
- April 20, 2008 by Emanuele Feronato
- Filed under Actionscript 2, Flash, Game design | 11 Comments
This is just a quick, uncommented snippet of code I made starting from Coordinates in Hexagon-Based Tile Maps tutorial I found at GameDev.net.
The article does not cover all hex maps, just horizontal ones. Read Understanding hexagonal tiles to know something more about hex maps.
Also, the pseudo code shown in the article has some errors, but I finally managed to have a working, full math hex maps creation and rollover.
No line comments at the moment as said, because I still have to optimize the code and write the routine to generate vertical hex maps, meanwhile take a look at it:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | hexagon_width = 38;
hexagon_height = 44;
grid_x_size = 12;
grid_y_size = 10;
sector_width = hexagon_width;
sector_height = hexagon_height/4*3;
gradient = (hexagon_height/4)/(hexagon_width/2)
for (x=0; x<grid_x_size; x++) {
for (y=0; y<grid_y_size; y++) {
hexagon_x_position = hexagon_width*x+(y%2)*hexagon_width/2;
hexagon_y_position = hexagon_height*y/4*3;
hexagon_number = x+y*grid_x_size;
hexagon_movieclip = attachMovie("hhexagon", "hhexagon_"+hexagon_number, hexagon_number, {_x:hexagon_x_position, _y:hexagon_y_position});
hexagon_movieclip.gotoAndStop(1);
hexagon_movieclip.txt.text = hexagon_number;
}
}
onEnterFrame = function() {
_root["hhexagon_"+hexagon_hover].gotoAndStop(1);
sector_x = Math.floor(_xmouse/sector_width);
sector_y = Math.floor(_ymouse/sector_height);
delta_sector_x = _xmouse%sector_width;
delta_sector_y = _ymouse%sector_height;
switch(sector_y%2){
case 1:
if(delta_sector_x>=hexagon_width/2){
if(delta_sector_y<(hexagon_height/2-delta_sector_x*gradient)){
real_x = sector_x;
real_y = sector_y-1;
}
else{
real_x = sector_x;
real_y = sector_y;
}
}
else{
if(delta_sector_y<delta_sector_x*gradient){
real_x = sector_x;
real_y = sector_y-1;
}
else{
real_x = sector_x-1;
real_y = sector_y;
}
}
break;
case 0:
real_x = sector_x;
real_y = sector_y;
if(delta_sector_y<((hexagon_height/4)-delta_sector_x*gradient)){
real_x = sector_x-1;
real_y = sector_y-1;
}
if(delta_sector_y<((-hexagon_height/4)+delta_sector_x*gradient)){
real_x = sector_x;
real_y = sector_y-1;
}
break;
}
if((real_x>=0)and(real_x<grid_x_size)and(real_y>=0)and(real_y<grid_y_size)){
hexagon_hover = real_x+real_y*grid_x_size;
_root["hhexagon_"+hexagon_hover].gotoAndStop(2);
}
}; |
And see how does it work
Download the source code.
» Flash Templates provided by Template Monster are pre-made web design products developed using Flash technology.
They can be easily customized to meet the unique requirements of your project.
They can be easily customized to meet the unique requirements of your project.
11 Responses
Leave a Reply
TUTORIAL SERIES:
- Una guida completa al gioco del poker online e una selezione dei migliori casino online.
- casino online
- migliori casino online
- BlackJack online
- casinò online


(3 votes, average: 3.33 out of 5)

Wow!
Thanks a lot!
nice! just a step from HOMM fight ;p
very cool, im going to use this for “level selection”
What kind of game are you going to make with this? It’s really cool.
Thats cool, you should do a Hexic clone with this !
Really good, could be used for a few things.
Not sure how on earth to contact you.
I’ve converted this to AS3 code quickly (I like AS3), if you want me to email it to you I’ve left my email here so you can contact.
Some nice code, I’d like to interoperate it into a game in the future for a turn based strategy game.
[...] This tutorial continues Hex maps creation and rollover. [...]
Where are the hexagons defined?
I don’t understand where in the script they are drawn.
for (x=0; x<grid_x_size; x++) {
for (y=0; y<grid_y_size; y++) {
hexagon_x_position = hexagon_width*x+(y%2)*hexagon_width/2;
hexagon_y_position = hexagon_height*y/4*3;
hexagon_number = x+y*grid_x_size;
hexagon_movieclip = attachMovie("hhexagon", "hhexagon_"+hexagon_number, hexagon_number, {_x:hexagon_x_position, _y:hexagon_y_position});
hexagon_movieclip.gotoAndStop(1);
hexagon_movieclip.txt.text = hexagon_number;
}
}
This cicle do the work. It is creating a virtual tile params, like hexagon X and Y positions, number of tile on the map, and attach movieclip from library with a tile image/animation, assigning to it all virtual params. Only thing i'm couldn't tell surelly is does "hexagon_movieclip" array, object, or just a temporal variable with movieclip pointer. Since it's not appear in further code, i'm suggest it's just temporal.
>>if(delta_sector_y<(hexagon_height/2-delta_sector_x*gradient))
Could you, please, tell why we divide hexagon height by two here, don't use it next and divide by 4 at last two conditions? I'm spend a night to understand it, and could not. :(