需求: 项目需要用到大量的数据 IntArray,IntIntMap 来辅助计算坐标,初始解决方法是建立几个temp数组,然后方法如果使用temp来计算,则命名的时候添加对应后标,后来觉得很容易搞混,并且有些资源浪费.所以写了一个管理类来管理,利用数组的size是否为0来判断.
1 package com.zhfy.game.framework; 2 3 import com.badlogic.gdx.Gdx; 4 import com.badlogic.gdx.graphics.g2d.TextureRegion; 5 import com.badlogic.gdx.scenes.scene2d.ui.Label; 6 import com.badlogic.gdx.utils.Array; 7 import com.badlogic.gdx.utils.IntArray; 8 import com.badlogic.gdx.utils.IntIntMap; 9 import com.badlogic.gdx.utils.ObjectMap; 10 import com.zhfy.game.MainGame; 11 12 import java.util.Iterator; 13 14 public class TempUtil { 15 //临时工具类,使用Intarray等所有的都从这里获取 16 17 private Array<IntArray> tempIntArrays; 18 private Array<IntIntMap> tempIntIntMaps; 19 private Array<Array> tempArrays; 20 // private ObjectMap<Object,Boolean> ifUse; 21 private ObjectMap<Object,Boolean> ifUse; 22 private MainGame game; 23 // int c=0; 24 25 public int getUseCount(){ 26 return ifUse.size; 27 } 28 29 public TempUtil(MainGame game){ 30 tempIntArrays=new Array<>(); 31 tempIntIntMaps=new Array<>(); 32 tempArrays=new Array(); 33 ifUse=new ObjectMap<>(); 34 this.game=game; 35 } 36 37 public void dispose(){ 38 tempIntArrays.clear(); 39 tempIntIntMaps.clear(); 40 tempArrays.clear(); 41 ifUse.clear(); 42 } 43 //state -1不存在 0 size==0 1 size>0 44 public boolean ifUse(Object i){ 45 return ifUse.containsKey(i); 46 } 47 48 public void log(){ 49 Gdx.app.log("tempIntArrays",tempIntArrays.size+":"+tempIntArrays.toString()); 50 Gdx.app.log("tempIntIntMaps",tempIntIntMaps.size+":"+tempIntIntMaps.toString()); 51 } 52 public void disposeTempIntArray(IntArray i){ 53 if(ifUse.containsKey(i)){ 54 ifUse.remove(i); 55 } 56 i.clear(); 57 } 58 public void disposeTempArray(Array i){ 59 if(ifUse.containsKey(i)){ 60 ifUse.remove(i); 61 } 62 i.clear(); 63 } 64 65 public void disposeTempIntIntMap(IntIntMap i){ 66 if(ifUse.containsKey(i)){ 67 ifUse.remove(i); 68 } 69 i.clear(); 70 } 71 72 public IntArray getTempIntArray(){ 73 for(int c=0,cMax=tempIntArrays.size;c<cMax;c++){ 74 IntArray i=tempIntArrays.get(c); 75 if(i==null){ 76 i=new IntArray(); 77 } 78 if(i.size==0&&!ifUse.containsKey(i)){ 79 ifUse.put(i,true); 80 return i; 81 } 82 } 83 /*if(tempIntArrays.size>10){ 84 int s=0; 85 }*/ 86 IntArray n=new IntArray(); 87 tempIntArrays.add(n); 88 ifUse.put(n,true); 89 return n; 90 } 91 92 93 public IntIntMap getTempIntIntMap(){ 94 /*if(game.sMapScreen!=null&&game.sMapScreen.smapGameStage!=null&&tempIntIntMaps.contains(game.sMapScreen.smapGameStage.selectedHexagons,false)){ 95 int s=0; 96 }*/ 97 for(int c=0,cMax=tempIntIntMaps.size;c<cMax;c++){ 98 IntIntMap i=tempIntIntMaps.get(c); 99 if(i==null){ 100 i=new IntIntMap(); 101 } 102 if(i.size==0&&!ifUse.containsKey(i)){ 103 ifUse.put(i,true); 104 return i; 105 } 106 } 107 IntIntMap n=new IntIntMap(); 108 tempIntIntMaps.add(n); 109 ifUse.put(n,true); 110 return n; 111 } 112 113 public Array getTempArray(){ 114 for(int c=0,cMax=tempArrays.size;c<cMax;c++){ 115 Array i=tempArrays.get(c); 116 if(i==null){ 117 i=new Array(); 118 } 119 if(i.size==0&&!ifUse.containsKey(i)){ 120 ifUse.put(i,true); 121 return i; 122 } 123 } 124 Array n=new Array(); 125 tempArrays.add(n); 126 ifUse.put(n,true); 127 return n; 128 } 129 130 public void clearAllUse() { 131 Iterator<ObjectMap.Entry<Object, Boolean>> itb = ifUse.iterator(); 132 while (itb.hasNext()) { 133 ObjectMap.Entry<Object, Boolean> n=itb.next(); 134 if(n.key instanceof IntArray){ 135 IntArray i= (IntArray) n.key; 136 if(i.size==0){ 137 ifUse.remove(i); 138 } 139 i.clear(); 140 }else if(n.key instanceof IntIntMap){ 141 IntIntMap i= (IntIntMap) n.key; 142 if(i.size==0){ 143 ifUse.remove(i); 144 } 145 i.clear(); 146 }else if(n.key instanceof Array){ 147 Array i= (Array) n.key; 148 if(i.size==0){ 149 ifUse.remove(i); 150 } 151 i.clear(); 152 } 153 } 154 } 155 public void clearUse() { 156 Iterator<ObjectMap.Entry<Object, Boolean>> itb = ifUse.iterator(); 157 while (itb.hasNext()) { 158 ObjectMap.Entry<Object, Boolean> n=itb.next(); 159 if(n.key instanceof IntArray){ 160 IntArray i= (IntArray) n.key; 161 if(i.size==0){ 162 ifUse.remove(i); 163 } 164 }else if(n.key instanceof IntIntMap){ 165 IntIntMap i= (IntIntMap) n.key; 166 if(i.size==0){ 167 ifUse.remove(i); 168 } 169 }else if(n.key instanceof Array){ 170 Array i= (Array) n.key; 171 if(i.size==0){ 172 ifUse.remove(i); 173 } 174 } 175 } 176 } 177 }
使用方法
TempUtil tempUtil=new TempUtil (); //获取需要用到数组 IntIntMap tempIntIntMap=tempUtil.getTempIntIntMap(); //TODO 自己的方法 .............. //注销数组 game.tempUtil.disposeTempIntIntMap(tempIntIntMap); //获取需要用到的数组 IntArray tempIntArray=tempUtil.getTempIntArray(); //TODO 自己的方法 .............. //注销数组 game.tempUtil.disposeTempIntArray(tempIntArray3);
//重置
game.tempUtil.dispose();