我一直在研究塔防游戏中的反射,但我一直在努力让这个游戏正常工作。基于字符串值构建对象
首先是这里的背景:
我们正在加工过程中,这是学校的一项要求。我们可能不会导入任何其他库。
我想要构建的对象首先从菜单接收为字符串。从那里我把它转换成阶级价值,从那里我想把塔放在适当的位置。下面提供的方法代码以及一个我们传统方法的开关。
void spawnSelected(String selectedTower) {
selectedTower = ENGINE_PREFIX + selectedTower;
try{
Class c = Class.forName(selectedTower);
println(c);
try{
Constructor C = c.getConstructor(PVector.class);
println(C);
//C.newInstance();
/*}catch(InstantiationException s){
println(s);
}catch(IllegalAccessException r){
println(r);
*/}catch(NoSuchMethodException p){
println(p);
}catch(ReflectiveOperationException i){
println(i);
}
}catch(ClassNotFoundException e){
println(e);
}
/*switch(selectedTower) {
case "air_tower":
new air_tower(mp.drawLocation);
break;
case "dark_tower":
new dark_tower(mp.drawLocation);
break;
case "fire_tower":
new fire_tower(mp.drawLocation);
break;
case "light_tower":
new light_tower(mp.drawLocation);
break;
case "nature_tower":
new nature_tower(mp.drawLocation);
break;
case "water_tower":
new water_tower(mp.drawLocation);
break;
default:
selectedTower ="Air_tower";
break;
}*/
}
我给为空气塔的构造:
class air_tower extends Basic_Tower {
air_tower(PVector Loc){
super(Loc);
cost = 100;
String[] effects = {
};
int[] effectEffectivenes = {
};
img = loadImage("Air.png");
type = "air";
projectileSpeed = 360;
projectileAcceleration = 5;
range = 175;
fireRate = 1400;
damage = 27.5;
numberOfTargets = 1;
AoE = 0;
}
}
我估计basic_tower构造也可能是相关的。所以这里是:
Basic_Tower(PVector Loc) {
这个家伙扩展对象,这是我们最基本的对象可能。那家伙有一个空的构造函数。
我的try-catch回来与此错误:
java.lang.NoSuchMethodException: Basic_TowerDefense_Engine$air_tower.(processing.core.PVector)
有谁看到我做错了吗?
更新: 所以我试图使用函数getConstructors() 当我做了返回是一个空的数组。这是我现在开始研究的一个主角。
NoSuchMethodException:Basic_TowerDefense_Engine $ air_tower:你缺少一种方法。 – CocoNess
'air_tower'是'Basic_TowerDefense_Engine'的内部类吗? – Mureinik
@CocoNess但肩膀getConstructor总是获取对象的构造函数?我已经定义了。 – TDSrock