复制 JavaScript 画布中的磁贴区域
Copy a tile area in javascript canvas
我有一个显示磁贴地图的画布。滚动时,我希望选择可以重复使用的磁贴地图的有用部分并将其复制到另一个画布,而不是刷新整个磁贴列表。
例如,如果磁贴地图有 5 个磁贴:
0 1 2 3 4
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
4 5 6 7 8
我想向右移动 (x) 1 个瓷砖...我可以将磁贴 1 复制到 4,因为它们将在下一帧中使用。所以我会复制:
1 2 3 4
2 3 4 5
3 4 5 6
4 5 6 7
5 6 7 8
我似乎在为此想出正确的数学时遇到了问题。
目前我有以下代码:
// Calculate from and to for x and y
// Change formula if positive or negative movement
// movX / movY = amount to move across x or y
// (i.e. movX = 1 (right) or movX = -1 (left)
// tileXFrom / tileYFrom = tile to start copy from
// tileXTo / tileYTo = tile to finish copying at
if(movX > 0)
{
tileXFrom = origX + movX;
tileXTo = tileXFrom + (tilesCountX - movX);
}
else
{
tileXFrom = origX;
tileXTo = tileXFrom + (tilesCountX + movX);
}
if(movY > 0)
{
tileYFrom = origY + movY;
tileYTo = tileYFrom + (tilesCountY - movY);
}
else
{
tileYFrom = origY;
tileYTo = tileYFrom + (tilesCountY + movY);
}
这些计算工作正常,但是有更好的方法来做它们吗?我想知道是否有办法绕过正/负 if 语句。
我现在陷入困境的部分是如何为每个位置获得真正的 x、y 位置。
所以我需要将瓷砖 1, 0 转换为屏幕上的 x, y 位置,以便从那里开始复制。
如果这一切都有意义?!
干杯
您可以使用三元运算符来缩短代码,但这不会更改功能:
tileXFrom = (movX > 0) ? origX + movX : origX;
tileXTo = (movX > 0) ? tileXFrom + (tilesCountX - movX) : tileXFrom + (tilesCountX + movX);
tileYFrom = (movY > 0) ? origY + movY : origY;
tileYTo = (movY > 0) ? tileYFrom + (tilesCountY - movY) : tileYFrom + (tilesCountY + movY);
相关文章:
- 当用户按下回车键时,自动在text区域/text中插入消息
- 如何构建'瞬间'在非全局区域设置中工作的函数
- 文本区域Jquery中的Linkify
- 文本区域JavaScript中的字符限制-特殊情况
- 使用VBScript或Javascript从文本框(文本区域)中删除最后一行空/空行
- 如何从区域href中激发JS函数
- 如何从文本区域输入中清除文本
- 如何使用JQuery从文本区域内容中提取属性
- 如何使用纯 JavaScript 在文本区域标签中定位占位符值
- 选择文本区域 jquery 中的所有文本
- 如何检测文本区域输入中的换行符
- JQM:如何从 img 精灵中捕获每个按钮(区域)中的点击事件
- 将.txt文件加载到文本区域Javascript中
- 如何在区域标签中更改 img 的 src
- HTML 表单:在输入(文本区域)中显示文本
- 将脚本作为字符串添加到文本区域值中
- 工具提示d3js区域图中的roi值
- 在动态输入区域jquery中获取post数组以插入批代码点火器
- 文本区域输入中的控制字符( 、 等)不会立即更新
- Perch CMS-从区域列表中获取第一个项目