好的,我的问题是这个
switch (charType) {
case Mush:
switch (charColor) {
case Blue:
switch (charDirec) {
case Left:
bitmap = (Bitmap) BitmapFactory.decodeResource(
mainContext.getResources(), R.drawable.l_blue_m);
break;
case Right:
bitmap = (Bitmap) BitmapFactory.decodeResource(
mainContext.getResources(), R.drawable.r_blue_m);
break;
case Bounce:
bitmap = (Bitmap) BitmapFactory.decodeResource(
mainContext.getResources(), R.drawable.b_blue_m);
break;
case Walk:
bitmap = (Bitmap) BitmapFactory.decodeResource(
mainContext.getResources(), R.drawable.w_blue_m);
break;
}
break;
case Red:
switch (charDirec) {
case Left:
bitmap = (Bitmap) BitmapFactory.decodeResource(
mainContext.getResources(), R.drawable.l_red_m);
break;
case Right:
bitmap = (Bitmap) BitmapFactory.decodeResource(
mainContext.getResources(), R.drawable.r_red_m);
break;
case Bounce:
bitmap = (Bitmap) BitmapFactory.decodeResource(
mainContext.getResources(), R.drawable.b_red_m);
break;
case Walk:
bitmap = (Bitmap) BitmapFactory.decodeResource(
mainContext.getResources(), R.drawable.w_red_m);
break;
}
case Tan:
switch (charDirec) {
case Left:
bitmap = (Bitmap) BitmapFactory.decodeResource(
mainContext.getResources(), R.drawable.l_tan_m);
break;
case Right:
bitmap = (Bitmap) BitmapFactory.decodeResource(
mainContext.getResources(), R.drawable.r_tan_m);
break;
case Bounce:
bitmap = (Bitmap) BitmapFactory.decodeResource(
mainContext.getResources(), R.drawable.b_tan_m);
break;
case Walk:
bitmap = (Bitmap) BitmapFactory.decodeResource(
mainContext.getResources(), R.drawable.w_tan_m);
break;
}
break;
}
break;
case Slime:
switch (charColor) {
case Blue:
switch (charDirec) {
case Left:
bitmap = (Bitmap) BitmapFactory.decodeResource(
mainContext.getResources(), R.drawable.l_blue_s);
break;
case Right:
bitmap = (Bitmap) BitmapFactory.decodeResource(
mainContext.getResources(), R.drawable.r_blue_s);
break;
case Bounce:
bitmap = (Bitmap) BitmapFactory.decodeResource(
mainContext.getResources(), R.drawable.b_blue_s);
break;
case Walk:
bitmap = (Bitmap) BitmapFactory.decodeResource(
mainContext.getResources(), R.drawable.w_blue_s);
break;
}
break;
}
break;
}
处理此问题的更好方法是什么?或者这是正确的吗?
答案 0 :(得分:3)
您可以先将方法拆分为两个更简单的方法。一种方法应该找到正确的资源ID,另一种方法实际上取出Bitmap
:
int resourceId = getResourceId(charType, charColor, charDirec);
bitmap = (Bitmap)BitmapFactory.decodeResource(
mainContext.getResources(), resourceId);
这个简单的更改已经删除了很多重复的代码。
在getResourceId
方法中,您可能需要考虑使用地图来查找资源ID而不是嵌套切换。
Map<CharKey, Integer> map = new HashMap<CharKey, Integer>();
int getResourceId(charType, charColor, charDirec)
{
CharKey key = new CharKey(charType, charColor, charDirec);
return map.get(key).intValue();
}
剩下的就是在程序启动时填充字典。
答案 1 :(得分:1)
我假设您正在使用charType,charColor,charDirec的枚举 - 如果更改为整数,则可以简单地创建一个3D数组,并将其用作索引。在应用程序启动时预先填充一次,这看起来像
int[][][] resources;
public void initResources(int numTypes, int numColors, int numDirections) {
resources = new int[numTypes][numColors][numDirections];
resources[MUSH][BLUE][LEFT] = R.drawable.l_blue_m;
resources[MUSH][BLUE][RIGHT] = R.drawable.r_blue_m;
// etc etc
}
然后您可以像以后一样访问ID:
int resourceID = resources[charType][charColor][charDirec];
bitmap = (Bitmap) BitmapFactory.decodeResource(
mainContext.getResources(), resourceID);
这样,每次想要查找位图ID时,您的应用程序都不需要导航switch语句,只需访问多维数组中的相关索引。