- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
似乎某些图 block 不会被绘制。我将一个 tileset 拆分为 32x32 的正方形,并使用 2D 100x100 数组将 map 绘制到 Canvas 上。
然后它为播放器设置“视口(viewport)”。由于这是一张大 map ,玩家总是以边缘为中心,除非他们跑到边缘附近。
但是,这导致绘制 map 时出现问题。红色方 block 是“玩家”
我发现,更高的视口(viewport) (15x10) 将能够绘制一些以前未绘制的图 block 。
这是代码。您可以在 jsFiddle http://mystikrpg.com/images/all_tiles.png 上下载 tileset 以在本地主机或以下进行测试
下面的所有内容都得到了很好的评论。
即使更改视口(viewport),我也看到绘制了一些 tile,不是全部。 http://pastebin.com/cBTum1aQ
这是jsFiddle:http://jsfiddle.net/weHXU/
最佳答案
基本上我采用了不同的方法来绘制图 block 。使用 putImageData
和 getImageData
可能会导致性能问题,而且在开始时预先分配所有图像数据也会导致内存损失。您已经拥有图像形式的数据,您不妨直接引用它,实际上它应该更快。
这是我使用的方法
for (y = 0; y <= vHeight; y++) {
for (x = 0; x <= vWidth; x++) {
theX = x * 32;
theY = y * 32;
var tile = (board[y+vY][x+vX]-1),
tileY = Math.floor(tile/tilesX),
tileX = Math.floor(tile%tilesX);
context.drawImage(imageObj, tileX*tileWidth, tileY*tileHeight, tileWidth, tileHeight, theX, theY, tileWidth, tileHeight);
}
}
它几乎相同,但我没有查看预先保存的数据数组,而是引用已加载图像的区域。
获取引用磁贴的说明
假设我有一个 4x4 的网格,我需要获得 7 号图 block ,以获得 y
我会做 7/4,然后获得 x
我会使用 7/4 (7 mod 4) 的剩余部分。
至于最初的问题..我真的不知道是什么导致了瓷砖丢失,我只是将其更改为我的方法以便我可以从那里进行测试,但它立即对我有用。
关于JavaScript - putImageData 不会绘制每个图 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11581348/
我有一个 ImageData 对象,它包含所有监视器的屏幕截图,因此它是一个巨大的 ImageData。我现在想每次画一个显示器。我有所有的显示器尺寸。 所以我正在尝试使用 ctx.putImageD
我使用以下函数更新 Canvas 元素的内容,其中 frame_data 是 width*height*3 的数组。 function updateCanvas(frame_data, width,
在 Canvas 中恢复背景时遇到问题。我有一个 Canvas ,它可以根据选项的内容改变大小(它可以变得非常大),我在上面绘制图像,现在我想要一个指示器以类似网格的格式显示鼠标所在的位置。问题是绘制
我正在从文件中读取 RGB 值并尝试将它们放在 Canvas 上。 我尝试了许多不同的循环和增量值变体。 JavaScript: function parseData(data) { var p
我想制作一个使用此方法的分形生成器:https://www.johndcook.com/blog/2017/07/08/the-chaos-game-and-the-sierpinski-triang
我有一个 Canvas ,背景中有一个大图像,前面有一个较小的圆形图像。我通过像这样使用剪辑实现了这种圆形图像效果 ctx.save(); ctx.beginPath(); ctx.arc(x,y,r
似乎某些图 block 不会被绘制。我将一个 tileset 拆分为 32x32 的正方形,并使用 2D 100x100 数组将 map 绘制到 Canvas 上。 然后它为播放器设置“视口(view
在 html5 中,当您使用 putImageData() 绘制到 Canvas 时,如果您正在绘制的某些像素是透明的(或半透明的),您如何保持 Canvas 中的旧像素不受影响? 示例: var i
我正在使用一个相对较大的 Canvas ,其中绘制了各种(复杂的)东西。然后我想保存 Canvas 的状态,以便稍后可以快速将其重置为现在的状态。我为此使用 getImageData 并将数据存储在变
我正在处理 Angular 项目,我必须将图像放在 Canvas 上。图片不是本地存储的,我只有图片数据所以我用这个。 this.context.putImageData(imgData, first
我对虚拟 Canvas 的概念不熟悉,知道为什么下面的代码不起作用吗? $(document).ready(function () { var
我有以下代码: var img = new Image(); canvas = document.getElementById("c"); ctx = canvas.getContext('2d')
我正在尝试使用一些自定义代码绘制一个等距正方形来构建像素数据,然后使用 putImageData 将其放在 Canvas 上。 但我没有得到预期的结果,在快速浏览 Canvas 的原始像素数据后,我发
除了分别使用 getImageData 和 putImageData 之外,是否还有另一种方法可以将像素区域从(比如说) Canvas A 复制到 Canvas B。 此外,当复制到 Canvas B
我正在尝试从 websocket 读取像素(逐帧)并将其渲染到 Canvas 上(灰度)。数据显示正常,只是当前帧的像素与前一帧重叠显示。因此,几帧后图片就会被弄脏。 我想在渲染当前帧之前清除前一帧。
我想使用 HTML5 Canvas 绘制图像,转换图像,然后更改图像但保留我所做的转换。这可能吗? 这里有一些伪代码来说明我的问题: // initially draw an image and tr
我认为 putImageData 比 drawImage 快,但我需要证明这一点。 我想这与 Flash 及其 Bitmap 和 BitmapData 类的情况相同。基本上,BitmapData 有助
我知道 ctx.globalcompositeoperation=source-over 在使用 drawimage 时有效,但它可以与 putimagedata 一起使用吗? 最佳答案 简短的回答是
我正在尝试在 Node 服务器上托管 NES 模拟器 ( JSNES )。我知道您可以使用 unpkg 将 JSNES 嵌入网页中,但我希望它在服务器上运行,因为我希望多个客户端共享相同的状态。我 编
我最近一直在观看 Notch 在 twitch 上的一些直播,并对他几年前在 Ludum Dare 挑战赛中使用的一种渲染技术很感兴趣。我尝试将他的 java 代码转换为 javascript,但遇到
我是一名优秀的程序员,十分优秀!