我一直在研究塔防遊戲中的反射,但我一直在努力讓這個遊戲正常工作。基於字符串值構建對象
首先是這裏的背景:
我們正在加工過程中,這是學校的一項要求。我們可能不會導入任何其他庫。
我想要構建的對象首先從菜單接收爲字符串。從那裏我把它轉換成階級價值,從那裏我想把塔放在適當的位置。下面提供的方法代碼以及一個我們傳統方法的開關。
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