レイヤーをページとして処理しようとしています。つまり、ユーザーが前のページに戻った場合に備えて、前のページを保存するたびに、あるページに描画してから、ページをめくって別のページに描画します。
私の考えでは、これは次のように解釈されます。
current_layer
グローバルポインタを作成します。が呼び出されるたび
newPage()
に、古いレイヤーを配列に格納し、ポインターを上書きしますlayer_array.push(current_layer); //store old layer
current_layer = new Kinetic.Layer(); //overwrite with a new
次に、新しいオブジェクトがに追加され、
current_layer
描画されているかどうかに関係なく、それらがレイヤーにバインドされます。(例current_layer.add(myCircle)
)ページを取得することは、配列内の要求しているレイヤーへのポインターを更新し、ページを再描画することです。レイヤーに接続されているすべての子ノードも描画されます
current_layer = layer_array[num-1]; //num is Page 2 e.g
current_layer.draw()
しかし、何も起きていません!新しいページを作成して適切に保存することはできますが、再度取得することはできません...
これが私の完全なコードです(私のブラウザはjsfiddleの使用に問題があります):
<html>
<head>
<script src="http://d3lp1msu2r81bx.cloudfront.net/kjs/js/lib/kinetic-v4.3.0.min.js"></script>
<script>
//Global
var stage; //canvas
var layer_array = [];
var current_page; //pointer to current layer
window.onload = function() {
stage = new Kinetic.Stage({
container: 'container',
width: 400,
height: 400
});
//Add initial page to stage to draw on
newPage()
};
//--- Functions ----//
function newPage(){
if(!current_page){
console.log("current page undefined");
} else {
layer_array.push(current_page);
// stage.remove(current_page);
//Nope, not working.
stage.removeChildren();
//Works, but I think it unbinds all objects
// from their specific layers...
// stage.draw()
console.log("Stored layer and removed it from stage");
}
current_page = new Kinetic.Layer();
console.log("Currently on page:"+(layer_array.length+1));
stage.add(current_page);
stage.draw();
}
function gotoPage(num){
stage.removeChildren()
stage.draw()
num = num-1;
if(num >= 0) {
current_page = layer_array[num];
console.log("Now on page"+(num+1));
stage.add(current_page);
stage.draw();
}
}
function addCircletoCurrentPage()
{
var rand = Math.floor(3+(Math.random()*10));
var obj = new Kinetic.Circle({
x: rand*16, y: rand*16,
radius: rand,
fill: 'red'
})
var imagelayer = current_page;
imagelayer.add(obj);
imagelayer.draw();
}
</script>
</head>
<body>
<div id="container"></div>
<button onclick="addCircletoCurrentPage()" >click</button>
<button onclick="newPage()" >new</button>
<button onclick="gotoPage(1)" >page1</button>
<button onclick="gotoPage(2)" >page2</button>
<button onclick="gotoPage(3)" >page3</button>
</body>
</html>