html无限大画布,KonvaJS / HTML5画布无限循环tilemap。设定相机位置

我试图基于主“网格”创建无限循环的画布。在此处按比例缩小小提琴,使网格位于视口的中心。

在小提琴中,我的中心有彩色正方形的主网格,我希望它们在各个方向上都无限地平铺。显然,这实际上是不可能的,因此我想通过基于滚动方向重新绘制网格来给出无限的错觉。

最好的方法似乎是获取拖动方向,然后将摄影机重置到该点,以便图层在主画布视口下滚动,这意味着摄影机永远无法到达主视口画布的边缘。

我一直在为鼠标拖动添加一些事件侦听器:

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

}

});

但是我无法可靠地算出每个方向的坐标,然后再算出如何重置相机位置。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Unity Tilemap无限地图是一种可以在游戏场景中无限扩展的地图系统。它使用Unity的Tilemap功能来实现地图的绘制和渲染。 通常地图在游戏中是有固定大小的,但是有时我们需要一个可以无限扩展的地图,比如RPG游戏中的开放世界。Unity Tilemap无限地图就是为这种情况设计的。 实现无限地图的关键在于动态加载和卸载地图块。首先,我们需要定义一个地图块的大小,并在初始加载时生成一块可见的地图。随着玩家的移动,当玩家接近地图边缘时,我们会动态加载相邻的地图块。当玩家离开一块地图块时,我们会将其卸载,以节省资源。 为了实现无缝地图的切换,我们可以在地图块的边缘使用平滑过渡,使得相邻的地图块之间没有明显的分界线。这需要在地图块的绘制中使用一些技巧,比如重复边缘纹理和使用自动渲染器。 另外,为了提高性能和节省资源,我们可以使用一些优化技术。比如,只激活当前可见范围内的地图块,禁用其他不可见的地图块。还可以使用对象池来重用地图块,避免频繁的创建和销毁。 总之,Unity Tilemap无限地图是一种可以在游戏中实现无限扩展的地图系统。通过动态加载和卸载地图块,平滑过渡以及一些优化技术,我们可以实现无缝的游戏世界。这为开发者提供了更大的自由度,并且能够创建更加开放和富有探索性的游戏体验。 ### 回答2: Unity的Tilemap组件可以用来创建无限地图。通过Tilemap的瓦片系统,我们可以轻松地布置和编辑地图的瓷砖。 要创建无限地图,我们可以使用Tilemap的动态加载和卸载瓷砖的功能。通过这个功能,我们可以在摄像机视野之外加载地图的瓦片,而当它们超出视野范围时,可以自动卸载不再需要的瓷砖。这种方式能够保持地图一直呈现在摄像机视野内,从而实现无限地图的效果。 具体实现上,我们可以创建一个地图生成器的脚本来动态加载和卸载地图瓷砖。该脚本可以根据玩家的位置和行动来动态加载附近的瓷砖,并卸载离开视野范围的瓷砖。这样一来,无论玩家移动到哪里,都可以看到无限延伸的地图。 为了优化加载和卸载的性能,我们还可以实现一个对象池来管理地图瓷砖的加载和卸载。对象池可以预先加载一定数量的瓷砖,并在需要时直接从池中取出,而不是每次都去实例化和销毁瓷砖。 总而言之,Unity的Tilemap组件可以帮助我们创建无限地图。通过使用动态加载和卸载瓷砖的功能,以及合理的优化策略,我们可以实现一个看似无限延伸的地图,并为玩家提供更加丰富和无限的游戏体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值