如何获取数组中某一列的对应序号?
-
假设游戏中有ABC三个道具,玩家每收集一个道具都会在对应数组中增加一列(Axx、xAx、xxA),如果我想修改A那一列对应的值,怎么知道当前A在数组中对应Y轴编号?
-
@Ainou_D 只能遍历了,如果你知道是哪个x轴会遍历得少一点,直接循环数组.height次,然后 数组.at(指定x轴,loopindex) 的值等于A时,停止循环并把此时的loopindex值作为y轴编号去用就行了
-
此回复已被删除!
-
抱歉,今天才有时间尝试一下这个方法,不过我写的好像有问题,没有成功,不知道哪里出错了
-
@Ainou_D 确实有问题,而且问题还挺多的,所以你的y轴编号是固定为5还是x轴编号要固定为5?我看你拿数组高度去设置x轴编号,这个除非是有特殊设计,否则一般这么做就不太对了,而且系统的循环跟数组自带的遍历的表达式是不通用的,用系统组件的循环条件就用loopindex作为遍历的下标值,用数组自带的遍历条件才用curx、cury这些作为遍历的下标值。总之你先确定一下,到达这个要设置的值在数组中是固定x=5还是y=5,如果都不是,具体的规则是什么,上面的朋友应该是看你在正文里说“怎么知道当前A在数组中对应Y轴编号”,才会把你的情况理解为x轴是固定值,y是动态值,但是你这个截图又反过来写了,所以我也看得很懵,建议描述清楚比较好,不然其他朋友也不知道怎么推荐解决方法。
-
大概的游戏交互是:我在游戏中找到n个道具,不同的道具都有对应的提醒(初始隐藏)。在道具弹窗中,每当我点击某一个道具的查看提醒按钮后才展示对应的提醒(保持展示状态),而其他道具的提醒仍然保持隐藏。
我的计划是:先建一个道具数组,每收集一个道具对应增加一列,当点击查看提醒后,在对应的位置把隐藏提醒更改为已提醒,这样当打开其他道具弹窗时,状态还是隐藏提醒状态;而打开已提醒道具会直接展示天性内容。
但现在的问题是:已提示的变量每次都打在固定的位置,并没有根据道具不同而改变。
如果能根据我的点击马上找出它在数组中对应XY的序号,感觉能解决好多遗留问题...好多事件都依赖这一步
啊...要疯了...事件写的也好乱啊
-
@Ainou_D 这次贴了图就好理解多了,也就是一个x轴代表一个道具,然后每个y编号代表这个道具的不同数据内容对吧,从你的截图来看,y=5这条轴就是记录每个道具的“是否已提示”的状态,那y就是个确定值了(毕竟是你自己定义哪个y编号代表什么类型的数据),剩下的就只需要找x编号就行了,x编号的话,一般就是看每个x轴有哪些唯一性数据,假设你的道具名称是这个唯一性数据,那就可以借助道具名称来确定x编号了,这里会分成两种做法:
1、进一步假设你的道具名称放在y=0这条轴,那么直接用数组的表达式indexof,就能直接获取对应值的x编号了,举个例子:
假设你数组中的数据是下图这样的,然后你要获取名称为“道具C”的道具是否已触发过提示,为了获取到这个数据,需要先获得x编号和y编号,y编号由于是你自己设定为y=5这条轴来储存是否已触发过提示,所以y编号可以确定是5,然后需要确定x编号,此时可以直接用 道具数组.indexof("道具C") 来获得“道具C”的x编号,indexof这个表达式会在y=0这条轴上找到第一个等于参数的格子(或者说元素值),并返回它的x编号作为结果,所以此处用 数组.indexof("道具C") 就得到了它的x编号(也就是2),这样一来,x编号和y编号就都拿到了,剩下的,就是动态值的问题,也就是你说的点击哪个道具就要去找哪个道具的相关数据,假设你的道具图标对象有个实例变量,用来存放它对应的道具名称,那么这个问题就也跟着解决了,事件上就相当于:
点击道具图标→然后道具数组.at(道具数组.indexof(道具图标.名称),5)的值就会返回你所点击的道具的是否已触发过提示的值了
2、跟1的方法大同小异,因为1的方法有个限制,就是数组的indexof这个表达式只能查找y=0这条轴,假设用来标记道具唯一性的数据存放在其他y编号上,就需要我们自己写循环去逐个比对,举个例子:
其他情况跟1的情况类似,只是道具名变到y=2这条轴时,显然1的方法就没法使用了,现在开始自己写循环比对,那么就是循环 道具数组.width 次(或者从0到道具数组.width-1执行循环),然后当 道具数组.at(loopindex,5)的值等于你所点击的道具图标的道具名称变量值时,说明此时循环进行到了符合条件的那一次,所以此时loopindex的值就是正确所需的x编号,也就是此时 道具数组.at(loopindex,5)的值就会返回你所点击的道具的是否已触发过提示的值了
基本就是以上这些,需要注意我上面大多数都是举例哈,并不一定跟你的项目内容完全匹配,只是分享一下这类问题的一些做法,你择需而用吧。
-
用了方法1,终于搞定了,多谢大佬!!!