<1>效果:

<2>思路:

需求把地图划分成均匀网格,放置玩家到任意一个网格,显示玩家可攻击范围所有网格高亮(放置)

1.如何划分网格?

定义行和列最大数量(自走棋row=8 col=8)

定义起始位置Vector3 startPos 从起始点 向X轴正方向延伸列 向Z轴正方向延伸行

为什么单独实例化每个格子?方便做高亮效果,开销也不大,替换材质球,dc不高

    //行private int row = 8;//列private int col = 8;//缓存objprivate List<GameObject> cells = new List<GameObject>();//起始位置private Vector3 startPos = Vector3.zero;//初始化地图格子 从起始点 向X轴正方向延伸列 向Z轴正方向延伸行void InitCells(){int num = row * col;for (int i = 0; i < num; i++){GameObject go = GameObject.Instantiate(tempCell) as GameObject;cells.Add(go);int index = i + 1;go.name = index.ToString();int grow = getRow(index);int gcol = getCol(index);go.transform.position = new Vector3(gcol, 0, grow);Color color = (index + grow) % 2 == 0 ? Color.blue : Color.green;int state = (index + grow) % 2 == 0 ? 1 : 2;setMaterial(go, color, state);}}

  

2.如何确定攻击范围?

这个问题需要与策划商量,一种方式是给每个棋子攻击范围公式,二是策划配置攻击范围格子(因为有些攻击范围很奇葩)

如果使用第二种方式,配置一张表,最大和最小攻击格子都在其中,15*15=225

策划需要配置什么形状的攻击范围,都由策划配置在每个棋子的攻击范围列表中

例如3种攻击范围:索引到下面的map

    private List<int> atkLst1 = new List<int>() { 0, 2, 3, 4, 5, 6, 7, 8, 9 };//上缺1private List<int> atkLst2 = new List<int>() { 0, 1, 2, 3, 4, 5, 6, 7, 8 };//九宫格private List<int> atkLst3 = new List<int>() { 0, 1, 2, 3, 4 };//十字形

  

    private Dictionary<int, int[]> map = new Dictionary<int, int[]>();//攻击范围格子索引 配置一张表 225个元素 15*15void init(){map.Add(0, new int[2] { 0, 0 });map.Add(1, new int[2] { 1, 0 });map.Add(2, new int[2] { -1, 0 });map.Add(3, new int[2] { 0, 1 });map.Add(4, new int[2] { 0, -1 });map.Add(5, new int[2] { -1, 1 });map.Add(6, new int[2] { -1, -1 });map.Add(7, new int[2] { 1, 1 });map.Add(8, new int[2] { 1, -1 });map.Add(9, new int[2] { 2, 0 });}

  

<3>怎么显示攻击范围高亮?

1.需要取到攻击范围格子

取到放置格子的row,col,遍历攻击范围格子索引,求出每个攻击格子的相对放置格子索引,验证求得的格子是否合法

回退之前的高亮格子,高亮当前攻击范围格子

2.高亮替换格子材质(dc并不高,3中材质互换)

    //index = 棋子放置所在格子  attackLst = 玩家攻击范围格子索引列表    //Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);测试鼠标选中格子高亮范围    private void showVaildCells(int index, List<int> attackLst){int srow = getRow(index);int scol = getCol(index);List<int> list = new List<int>();int[] delta = new int[2];for (int i = 0; i < attackLst.Count; i++){int[] xy = map[attackLst[i]];delta[0] = xy[0] + srow - 1;delta[1] = xy[1] + scol;if (isVaildIndex(delta)){list.Add(delta[0] * row + delta[1]);}}showLst(list);}private bool isVaildIndex(int[] xy){return xy[0] >= 0 && xy[0] < row && xy[1] > 0 && xy[1] <= col;}

  

转载于:https://www.cnblogs.com/cocotang/p/10825340.html

【自走棋】地图格子高亮效果相关推荐

  1. 自走棋java代码,【自走棋】地图格子高亮效果

    <1>效果:

  2. echarts:实现3D地图版块叠加动效散点+轮播高亮效果

    需求描述 如下图所示,展示3D效果的地图版块,并叠加显示动效散点: 实现思路 首先是3D地图版块效果的实现,可以参考广州3D地图:而动效散点的实现,可以参考地图发散分布. 这里再提一个经过尝试并不行的 ...

  3. html表格鼠标高亮行列,JS实现的表格行鼠标点击高亮效果代码

    本文实例讲述了JS实现的表格行鼠标点击高亮效果代码.分享给大家供大家参考,具体如下: 偶尔在看天天基金网净值公告时,从源代码里剥下的一段js代码,感觉比较实用,分享一下(仅IE有效) var high ...

  4. 在Tableau中去除选择高亮效果

    在Tableau中,点击选择某些数据后,默认被选中的数据会高亮显示,这本是一种人性化的设计.但是在一些特殊的应用场景中,高亮显示会破坏整体的美观和一致性,所以需要去除掉. 最近学到一个简便的方法,运用 ...

  5. java鼠标进入高亮效果_鼠标选中文本划词高亮、再次选中划词取消高亮效果

    当我们需要鼠标选中文本后,文本高亮.当再次将选中的文本选中后,取消高亮效果时该如何实现呢? 一.介绍 window.getSelection 获取鼠标选中内容,主要是利用了window.getSele ...

  6. ios15之取消UITabbleViewCell的高亮效果

    ios15之取消UITabbleViewCell的高亮效果 实现这个代理方法即可 - (void)tableView:(UITableView *)tableView didSelectRowAtIn ...

  7. android 按钮顶级效果_Android 源码之button高亮效果

    android默认的button在点击以后有默认的高亮效果,但是默认的button比较丑,要替换成自己的按钮背景,采用的方法是: button.setBackgroundDrawable(drawab ...

  8. 轮播中小按钮的切换和高亮效果

    轮播切换高亮的效果图 开发工具与关键技术:DW javascript 作者:沈金凤 年级:18级(5)班 撰写日期:2019年2月2日 轮播一般都会有几张图片来完成的,所以会用到轮播切换高亮效果来实现 ...

  9. html 搜索 高亮效果,html5输入框高亮效果

    [实例简介]登录界面输入框高亮效果 [实例截图] [核心代码] 当前输入框高亮显示 body,form,h2,p,input{margin:0;padding:0;} body{color:#4f4f ...

  10. html元素按压高亮效果

    html移动端页面元素按压高亮 在移动端H5页面开发过程中,经常会有很多可以点击的button/li/div等元素,为了响应用户点击,增加用户体验,常常要手动添加按压高亮效果. 如一系列的列表标签,可 ...

最新文章

  1. 深度优先算法--判断迷宫的一个起点能否到达一个终点
  2. 【转】[Hadoop源码解读](四)MapReduce篇之Counter相关类
  3. 天气模式_江西现罕见持续阴雨寡照天气 市民开启“花式吐槽”模式
  4. 使用Maven原型高效创建Eclipse模块
  5. php 获取某个月的周一
  6. 测试人员提高业务掌握度的方案
  7. 飞聊不可 · 上海技术招聘专场
  8. VMware 虚拟机桥接网络设置
  9. 在本地电脑搭建一个网站 转自本文地址:http://www.fengzimo.com/1503.html 来源 疯子墨...
  10. Codeforces 463D Gargari and Permutations(求k个序列的LCS)
  11. MyEclipse设置文件默认打开方式
  12. 苹果手机截图的两种方法
  13. paip.输入法编程----二级汉字2350个常用汉字2350个
  14. wget下载文件命令
  15. solidworks二次开发 学习日记--1 开发方式
  16. 讯飞离线语音合成(语记|语音+)
  17. org.apache.flink.util.FlinkRuntimeException: Exceeded checkpoint tolerable failure threshold
  18. 设计模式——23种设计模式学习总结
  19. 2021年茶艺师(中级)考试报名及茶艺师(中级)考试APP
  20. ARM指令——跳转指令

热门文章

  1. Testbench的激励添加和书写技巧
  2. 用stata计算同比增长率的两种方法
  3. 2015美国大学计算机科学专业排名,美国大学研究生计算机科学专业排名|2015年计算机科学专业排行榜(1/2)- 各国学校排名网...
  4. 半价了:阿里云挑起价格战 您用得满意,请点赞
  5. html下划线怎么做成超链接,html超链接下划线应该加吗?
  6. 海南大学计算机网络空间安全学院研究生,海南大学计算机与网络空间安全学院2021考研调剂公告...
  7. 分页查询优化方案总结
  8. 血与荣耀(第七章-战鼓)
  9. Matlab求解黎卡提方程
  10. 【目标检测】58、目标检测中的正负样本分配策略总结