需求:  项目需要用到大量的数据 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 tempUtil=new TempUtil ();


//获取需要用到数组 
IntIntMap tempIntIntMap=tempUtil.getTempIntIntMap();
//TODO 自己的方法
..............
//注销数组
 game.tempUtil.disposeTempIntIntMap(tempIntIntMap);

//获取需要用到的数组
IntArray tempIntArray=tempUtil.getTempIntArray();
//TODO 自己的方法
..............
//注销数组
 game.tempUtil.disposeTempIntArray(tempIntArray3);
//重置
game.tempUtil.dispose();


 

posted on 2021-01-19 22:50  黑狱  阅读(106)  评论(0编辑  收藏  举报