Easeljs 六边形网格,每个图块都有背景
Easeljs hexagon grid with background for each tile
我想用 Easeljs 创建一个六边形网格,但每个图块和一些图块都有特定的背景纹理可能有相同的背景图片(在这个例子中,我只为初学者放了一张背景图片)。
我已经完成了六边形网格,但是我使用的背景图像填充在所有 canvas 上重复自身,而我希望网格的每个图块都有自己的背景图像,这样背景就没有像现在这样的偏移量了:
这是我的代码,我正在使用 beginBitmapFill:
$().ready(function() {
var stage, dist, rayon, texture, hexagons = [], hexagon;
stage = new createjs.Stage("canvas");
stage.enableMouseOver();
dist = 60;
var manifest = [
{src: "penguin3.png", id: "penguin3"}
];
var loader = new createjs.LoadQueue(false);
loader.addEventListener("complete", function() {
for (var y=0; y < 8; y++) {
for (var x=-Math.floor(y/2); x < -Math.floor(y/2)+8; x++) {
hexagon = new Hexagon(x, y, dist, loader.getResult('penguin3'), stage);
hexagons.push(hexagon);
stage.addChild(hexagon);
}
}
stage.hexagonsNumber = hexagons.length;
stage.update();
});
loader.loadManifest(manifest, true, "/images/");
});
function Hexagon(x, y, dist, texture, stage)
{
createjs.Shape.call(this);
this.coordsX = x;
this.coordsY = y;
this.dist = dist;
this.texture = texture;
this.stage = stage;
this.drawShape();
}
Hexagon.prototype = new createjs.Shape();
Hexagon.prototype.constructor = Hexagon;
Hexagon.prototype.getShapeCoordinates = function()
{
return {
x: 50 + this.dist * (this.coordsX + this.coordsY / 2),
y: 50 + Math.sqrt(3) * this.dist * this.coordsY / 2 ,
radius: this.dist / Math.sqrt(3)
};
};
Hexagon.prototype.drawShape = function()
{
var shapeCoordinates = this.getShapeCoordinates();
this.graphics
.beginBitmapFill(this.texture, 'no-repeat')
.beginStroke(createjs.Graphics.getRGB(0,0,0))
.drawPolyStar(shapeCoordinates.x, shapeCoordinates.y, shapeCoordinates.radius, 6, 0, 30)
.endFill();
};
我是 Easeljs 的新手,我可能做错了什么...谢谢!
我认为发生这种情况是因为您正在更改绘制六边形的坐标,而不是更改六边形的实际 x 和 y 位置。这意味着位图填充的原点没有改变。
这是您的代码的快速移植:
http://jsfiddle.net/lannymcnie/ygfrs0pn/
我修改了绘制例程以移动实际 Shape 实例的 x 和 y,并将图形绘制例程设置为 [0,0]
。
http://jsfiddle.net/lannymcnie/ygfrs0pn/1/
var shapeCoordinates = this.getShapeCoordinates();
this.x = shapeCoordinates.x;
this.y = shapeCoordinates.y;
this.graphics
.beginBitmapFill(this.texture, 'no-repeat')
.beginStroke(createjs.Graphics.getRGB(0,0,0))
.drawPolyStar(0,0, shapeCoordinates.radius, 6, 0, 30)
.endFill();
这使每个图块看起来都一样,这就是(我认为)您的想法。
我想用 Easeljs 创建一个六边形网格,但每个图块和一些图块都有特定的背景纹理可能有相同的背景图片(在这个例子中,我只为初学者放了一张背景图片)。
我已经完成了六边形网格,但是我使用的背景图像填充在所有 canvas 上重复自身,而我希望网格的每个图块都有自己的背景图像,这样背景就没有像现在这样的偏移量了:
这是我的代码,我正在使用 beginBitmapFill:
$().ready(function() {
var stage, dist, rayon, texture, hexagons = [], hexagon;
stage = new createjs.Stage("canvas");
stage.enableMouseOver();
dist = 60;
var manifest = [
{src: "penguin3.png", id: "penguin3"}
];
var loader = new createjs.LoadQueue(false);
loader.addEventListener("complete", function() {
for (var y=0; y < 8; y++) {
for (var x=-Math.floor(y/2); x < -Math.floor(y/2)+8; x++) {
hexagon = new Hexagon(x, y, dist, loader.getResult('penguin3'), stage);
hexagons.push(hexagon);
stage.addChild(hexagon);
}
}
stage.hexagonsNumber = hexagons.length;
stage.update();
});
loader.loadManifest(manifest, true, "/images/");
});
function Hexagon(x, y, dist, texture, stage)
{
createjs.Shape.call(this);
this.coordsX = x;
this.coordsY = y;
this.dist = dist;
this.texture = texture;
this.stage = stage;
this.drawShape();
}
Hexagon.prototype = new createjs.Shape();
Hexagon.prototype.constructor = Hexagon;
Hexagon.prototype.getShapeCoordinates = function()
{
return {
x: 50 + this.dist * (this.coordsX + this.coordsY / 2),
y: 50 + Math.sqrt(3) * this.dist * this.coordsY / 2 ,
radius: this.dist / Math.sqrt(3)
};
};
Hexagon.prototype.drawShape = function()
{
var shapeCoordinates = this.getShapeCoordinates();
this.graphics
.beginBitmapFill(this.texture, 'no-repeat')
.beginStroke(createjs.Graphics.getRGB(0,0,0))
.drawPolyStar(shapeCoordinates.x, shapeCoordinates.y, shapeCoordinates.radius, 6, 0, 30)
.endFill();
};
我是 Easeljs 的新手,我可能做错了什么...谢谢!
我认为发生这种情况是因为您正在更改绘制六边形的坐标,而不是更改六边形的实际 x 和 y 位置。这意味着位图填充的原点没有改变。
这是您的代码的快速移植: http://jsfiddle.net/lannymcnie/ygfrs0pn/
我修改了绘制例程以移动实际 Shape 实例的 x 和 y,并将图形绘制例程设置为 [0,0]
。
http://jsfiddle.net/lannymcnie/ygfrs0pn/1/
var shapeCoordinates = this.getShapeCoordinates();
this.x = shapeCoordinates.x;
this.y = shapeCoordinates.y;
this.graphics
.beginBitmapFill(this.texture, 'no-repeat')
.beginStroke(createjs.Graphics.getRGB(0,0,0))
.drawPolyStar(0,0, shapeCoordinates.radius, 6, 0, 30)
.endFill();
这使每个图块看起来都一样,这就是(我认为)您的想法。