一个拉选框的制作
来源:互联网 发布:王思聪 霍顿 知乎 编辑:程序博客网 时间:2024/04/29 05:26
我做了一个区块栏
但是当前的功能只能选中一个格子
但是当前的功能只能选中一个格子
他看起来就是这样的
但是功能很薄弱只能选择一个区域(32x32)
如果我想复制这个 4 x 5 的树 那么我就要点20次
所以我做了一个可以让鼠标产生一个拉框的功能
int rx = tileClickStartX < tileClickEndX ? tileClickStartX : tileClickEndX; int ry = tileClickStartY < tileClickEndY ? tileClickStartY : tileClickEndY; int rw = Math.Abs(tileClickStartX - tileClickEndX); int rh = Math.Abs(tileClickStartY - tileClickEndY); tileClickingRect = new Rectangle(rx,ry,rw,rh);
同时后台我也将数据简化了
简化到了 一个矩阵的起点坐标 和 结束坐标
简化到了 一个矩阵的起点坐标 和 结束坐标
问题似乎得到了一定的解决
那么新的问题来了 我在后台的图片 是一个一维的数组储存的 那么如何 又有哪些编号被选中呢?
如果用视觉去数的话 很直观
但是用代码我们得换一下思维去想如何处理这种数学转化
我们可以知道 10 对应的坐标是 2 , 1
x = 2
y = 1
而 一列(c) = 8
所以对应公式就是 y * c + x
相同的 47 的坐标分别是 x7y5
5 * c(8) + 7 = 47
现在我们知道了 格子的编号 与其坐标的对应关系
那么我们先来看看第一列
也就是 编号10 ~ 15
的变化
他们的Y坐标没啥变化
那么 推导一下
y * c + x
1 * 8 + (2~7)
2~7 是连续的数字 所以我们如果用一个 for循环 (int x = 2 ; x<= 7 ;x++) 就可以解决 10~15的编号了
那么 推导一下
y * c + x
1 * 8 + (2~7)
2~7 是连续的数字 所以我们如果用一个 for循环 (int x = 2 ; x<= 7 ;x++) 就可以解决 10~15的编号了
那么我们再来看一下 10 18 26 34 42 这一列
也就是粉色的这一列
他们的 x坐标都没变
也就是说 y是一个变量
y * 8 + 2
而y 的范围是 1 ~ 5
(1~5) * 8 +2 结果就是粉色这一列的编号
也就是粉色的这一列
他们的 x坐标都没变
也就是说 y是一个变量
y * 8 + 2
而y 的范围是 1 ~ 5
(1~5) * 8 +2 结果就是粉色这一列的编号
我们把一开始得到的 公式和刚刚得到的公式组合一下 (StartY < EndY) * Column + (StartX < EndX)
for(int y = StartY ;y<=EndY;y++){ for(int x = StartX;x<=EndX;x++){ int index = y * column + x;}}
0 0
- 一个拉选框的制作
- 一个制作水印的方法
- 一个弹出式menu的制作
- 制作一个简单的setup
- 制作一个旋转的三角形
- 制作一个旋转的三棱锥
- 制作一个简单的计算器
- 制作一个表单的步骤
- 自己制作的一个进度条
- 制作一个百毒不侵的系统
- 制作一个小小的游戏
- 制作一个百毒不侵的系统
- 一个简单的外挂制作
- 我制作的一个UI
- 制作一个简单的文件系统
- 制作一个简单的动画
- Android制作的一个通讯录
- 一个制作水印的方法
- java集合遍历
- 微信小程序入门学习
- GCD 死锁
- 近些年关于物联网安全事件
- 朴素贝叶斯(naive bayes)
- 一个拉选框的制作
- 嵌入式Linux系统时间设置
- 运动目标检测(GMM、Code Book、Vibe)
- JavaDto对数据的封装
- iOS知识点六
- nginx功能(3)--浏览器本地缓存
- 两个activity共享数据的另一种方法(个人学习笔记)
- ABAQUS不收敛如何解决
- JSON.stringify(value, replacer, space)详解