我一直在我的塔防游戏中进行反思,但我努力让这个游戏正常工作。
首先来看上下文:
我们正在加工,这是学校的要求。我们可能不会导入任何其他库。
我想要构建的对象首先从菜单中作为字符串接收。从那里我把它转换成一个类值,从那里我想把塔放在适当的位置。下面提供的方法代码以及作为我们传统方法的开关。
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() 当我做的时候,返回是一个空数组。这是我现在开始研究的领导。
答案 0 :(得分:0)
内部类的构造函数的第一个参数隐含地是它的封闭类:
Constructor con =
c.getConstructor(Basic_TowerDefense_Engine.class, PVector.class);
con.newInstance(this /* presumably? */, mp.drawLocation);
Asker说明:请阅读评论,以了解有关该问题的进一步背景以及该决议的解决方法。
答案 1 :(得分:0)
Welp我得到了它的工作。
事实证明,我没有在我的顾问中明确表示公开意味着.getConstructors根本找不到任何东西。
然而,当我公开时,它被认出来了。从那里结合我已经拥有的+ @Mureinik提供的答案我得到了最终答案。
为构造函数和obj的初始化生成以下代码。
Constructor C = c.getConstructor(Basic_TowerDefense_Engine.class, PVector.class);
C.newInstance(head, mp.drawLocation);
其中head是Basc_TowerDefense_Engine对象。