在新的kineticJS版本中,很多工作都是在後臺爲您完成的。
看看這個tutorial:
這fiddle相當接近了,下面的代碼:
<body>
<div id="container"></div>
<script src="http://www.html5canvastutorials.com/libraries/kinetic-v4.3.0-beta2.js"></script>
<script>
function loadImages(sources, callback) {
var images = {};
var loadedImages = 0;
var numImages = 0;
// get num of sources
for(var src in sources) {
numImages++;
}
for(var src in sources) {
images[src] = new Image();
images[src].onload = function() {
if(++loadedImages >= numImages) {
callback(images);
}
};
images[src].src = sources[src];
}
}
function draw(images) {
var stage = new Kinetic.Stage({
container: 'container',
width: 600,
height: 700
});
var layer = new Kinetic.Layer();
var patternPentagon = new Kinetic.RegularPolygon({
x: 220,
y: stage.getHeight()/4,
sides: 5,
radius: 70,
fillPatternImage: images.yoda,
fillPatternOffset: [-220, 70],
stroke: 'black',
strokeWidth: 4,
draggable: true
});
patternPentagon.on('dragmove', function() {
//this.setFillPatternImage(images.yoda);
//this.setFillPatternOffset(-100, 70);
var userPos = stage.getUserPosition();
this.setFillPatternOffset(-userPos.x,-userPos.y);
layer.draw();
this.setX(220);
this.setY(stage.getHeight()/4);
});
layer.add(patternPentagon);
stage.add(layer);
}
var sources = {
darthVader: 'http://www.html5canvastutorials.com/demos/assets/darth-vader.jpg',
yoda: 'http://www.html5canvastutorials.com/demos/assets/yoda.jpg'
};
loadImages(sources, function(images) {
draw(images);
});
</script>
</body>
有這樣它不是一個有背景圖案的更復雜的/準確的方法,就像將對象分組在一起
我會在稍後添加更多 – SoluableNonagon
http://jsfiddle.net/5hrjE/6/更新。基本上,你需要添加到「組」中的是一些更多的形狀,這將使圖像在五邊形之外不可見。 – SoluableNonagon
http://jsfiddle.net/5hrjE/7/一個不是很好的解決方案的例子,但你明白了。再次,您需要將五角形放在前面,並將其背後的圖像。那麼你可以在五角形上設置dragmove來移動圖像而不是像http://jsfiddle.net/5hrjE/6/ – SoluableNonagon