开发者

Moving pieces within a hexagonal grid?

开发者 https://www.devze.com 2023-03-05 03:14 出处:网络
If I\'m creating a HTML5 game that moves circles 开发者_运维知识库around a hexagonal grid what would be the best way to implement that with html and javascript?

If I'm creating a HTML5 game that moves circles 开发者_运维知识库around a hexagonal grid what would be the best way to implement that with html and javascript?

Placing and spacing a div within each hex? Using the canvas element? Something else? SVG?

Thanks!


In terms of performance differences between various techniques you can try to look at jsgamebench, these few articles and video.


Check this out : Creating a turn based hex grid in CreateJS

http://rishav-sharan.blogspot.fr/

var stage;
var mapHeightHexNo = 5;            // Number of vertical hexes
var mapWidthHexNo = 10;             // Number of horizontal hexes
var mapStartX = 60;
var mapStartY = 60;
var mapHexSize = 50;

// calculate hex width and height. We will use these values to offset neighbouring hexes
var mapHexWidth = Math.sqrt(3)/2 * 2 * mapHexSize;
var mapHexHeight = 3/4 * 2 * mapHexSize;

function init() {
    //Create stage object - our root level container
    stage = new createjs.Stage("demoCanvas");

    // Call the function to craete the hex grid
    createMap(mapWidthHexNo, mapHeightHexNo);

    stage.update();
}

function createMap (mapSizeX, mapSizeY) {
    for (var i=0;i<mapHexHeight;i++) {                      // iterate over total number of hex rows
        for (var j=0;j<mapWidthHexNo;j++) {                 // iterate over each hex to be created in a single row.

            var hexY = mapStartY + i * mapHexHeight;

            //remember, each alternate row of hexes is offset in the x axis by half the width of the hex
            // so just add an extra half of the width of the hex, to the x axis displacement of rows 1, 3, 5 etc...
            if (i%2 == 0) {
                var hexX = mapStartX + j * mapHexWidth;
            }
            else {
                var hexX = mapStartX + j * mapHexWidth + 1/2* mapHexWidth;
            }

            //call the function to create individual hexes
            createHex (hexX, hexY, mapHexSize);        
        }       
    }
}

function createHex (x,y,size) {

    var hex = new createjs.Shape();
    hex.graphics.beginStroke("#aaa").beginLinearGradientFill(["#eee","#fafafa"], [0, 1], 0, y-20, 0, y+30).drawPolyStar(x,y,size,6,0,30);

    stage.addChild(hex);
}
0

精彩评论

暂无评论...
验证码 换一张
取 消