【发布时间】:2019-05-07 00:03:34
【问题描述】:
我正在尝试创建一个基于主“网格”的无限循环画布。在这里用视口中心的网格按比例缩小小提琴。
在小提琴中,我的中心有彩色方块的主网格,我希望它们在各个方向上无限平铺。显然这在现实中是不可能的,所以我想通过根据滚动方向重新绘制网格来给出无限的错觉。
我发现了一些不错的文章: https://developer.mozilla.org/en-US/docs/Games/Techniques/Tilemaps/Square_tilemaps_implementation:_Scrolling_maps
https://gamedev.stackexchange.com/questions/71583/html5-dynamic-canvas-grid-for-scrolling-a-big-map
最好的方法似乎是获取拖动方向,然后将相机重置到该点,因此图层在主画布视口下滚动,这意味着相机永远无法到达主视口画布的边缘。
我一直致力于为鼠标拖动添加一些事件侦听器:
var bMouseDown = false;
var oPreviousCoords = {
'x': 0,
'y': 0
}
var oDelta;
var oEndCoords;
var newLayerTop;
$(document).on('mousedown', function (oEvent) {
bMouseDown = true;
oPreviousCoords = {
'x': oEvent.pageX,
'y': oEvent.pageY
}
});
$(document).on('mouseup', function (oEvent) {
bMouseDown = false;
oPreviousCoords = {
'x': oEvent.pageX,
'y': oEvent.pageY
}
oEndCoords = oDelta
if(oEndCoords.y < -300){
if(newLayerTop){
newLayerTop.destroy();
}
layerCurentPosition = layer.position();
newLayerTop = layer.clone();
newLayerTop.position({
x: layerCurentPosition.x,
y: layerCurentPosition.y -1960
});
stage.add(newLayerTop)
stage.batchDraw();
}
});
$(document).on('mousemove', function (oEvent) {
if (!bMouseDown) {
return;
}
oDelta = {
'x': oPreviousCoords.x - oEvent.pageX,
'y': oPreviousCoords.y - oEvent.pageY
}
});
但我无法可靠地计算出每个方向的坐标以及如何重置相机位置。
【问题讨论】:
-
关于初始 JS Findle 的一些警告:第 1 行中的 last_position 从未使用过;第 24、37、43、187 行缺少分号;第 47 行中不必要的分号。
-
这两个小提琴都不适合我。两者都只显示空白页。控制台显示类似
Konva warning: Can not change width of layer的警告。 -
这两个小提琴都不适合我。我只看到一个空白页。
-
小提琴也不适合我。我只看到一个空白页。
-
这个小提琴:jsfiddle.net/kiksy/dvn2wyh5/25 正在工作,但是您可能需要滚动才能看到方块。
标签: javascript html canvas konvajs