我有一個方法,從文件中讀取座標,並用它們在writen文件上的指定座標來渲染遊戲物體,此代碼如下所示:Java的使用方法多次,但利用改變的參數
public void ProcessText()
{
String file_name = "C:/Users/Server/Desktop/textText.txt";
try
{
ProcessCoords file = new ProcessCoords(file_name);
String[] aryLines = file.OpenFile();
int i;
for (i = 0; i < aryLines.length; i++)
{
System.out.println(aryLines[i]);
if(aryLines[i].startsWith("makeGrass:")) {
String Arguments = aryLines[i].substring(aryLines[i].indexOf(":")+1, aryLines[i].length());
String[] ArgArray = Arguments.substring(1, Arguments.length() - 2).split(" ");
this.makeGrass(Double.parseDouble(ArgArray[0]),
Double.parseDouble(ArgArray[1]),
Double.parseDouble(ArgArray[2]));
}
}
} catch(IOException e) {
System.out.println(e.getMessage());
}
}
和我的文本文件就只有一個行:
makeGrass:(x y z) // for example makeGrass:(1.22334 0.0 9.66678)
這個現在一切工作正常..但有使這個只有一個單一的對象是沒有意義的。我想要什麼能夠做,因爲我從多個座標想要的是有儘可能多的對象,所以我的文本文件可能是這樣的:
makeGrass:(0.0 1.0 5.0)
makeGrass:(8.0 1.0 2.0)
makeGrass:(4.0 1.0 7.0)
makeGrass:(0.0 1.0 2.0)
makeGrass:(2.0 1.0 7.0)
makeGrass:(5.0 1.0 6.0)
在我使用的代碼this.makeGrass只有一次,此刻像我的草模型只放置在第一行的座標上(其他行導致圖形故障,它們只是放在彼此的頂部)
我的問題在於如何編寫代碼多次給了我this.makeGrass:我想在草稿文件中提供的makeGrass座標多次渲染相應的makeGrass座標處的草模型,我該怎麼做?
感謝您的幫助!
編輯:有人問我,以獲取更多信息..這就是:
public class Vegetation extends GameComponent
{
private Game game;
GameObject grassLeaf1 = new GameObject();
Mesh grassLeaf1mesh = new Mesh("grassLeaf1.obj");
Material grassLeaf1material = new Material
(new Texture("GrassUVTex.png"), 1, 8, new Texture("GrassUVTex_NRM.jpg"), new Texture("GrassUVTex_DISP.jpg"), 0.008f, -0.5f);
MeshRenderer grassLeaf1Renderer = new MeshRenderer(grassLeaf1mesh, grassLeaf1material);
public Vegetation(Game game)
{
this.game = game;
}
public void makeGrass(double posX, double posY, double posZ)
{
grassLeaf1.AddComponent(grassLeaf1Renderer);
grassLeaf1.GetTransform().GetPos().Set((float)posX, (float)posY, (float)posZ);
grassLeaf1.GetTransform().SetScale(new Vector3f (2, 2, 2));
grassLeaf1.GetTransform().SetRot(new Quaternion(new Vector3f(0, 1, 0), (float) Math.toRadians(0)));
game.AddObject(grassLeaf1);
}
public void ProcessText()
{
grassLeaf1.AddComponent(new SaveGrass());
grassLeaf1.AddComponent(new ObjectManipulator(4.0f));
String file_name = "C:/Users/Server/Desktop/textText.txt";
try
{
ProcessCoords file = new ProcessCoords(file_name);
String[] aryLines = file.OpenFile();
int i;
for (i = 0; i < aryLines.length; i++)
{
System.out.println(aryLines[i]);
if(aryLines[i].startsWith("makeGrass:")) {
String Arguments = aryLines[i].substring(aryLines[i].indexOf(":")+1, aryLines[i].length());
String[] ArgArray = Arguments.substring(1, Arguments.length() - 2).split(" ");
this.makeGrass(Double.parseDouble(ArgArray[0]),
Double.parseDouble(ArgArray[1]),
Double.parseDouble(ArgArray[2]));
}
}
} catch(IOException e) {
System.out.println(e.getMessage());
}
}
}
的植被類處理創建草模型,從文本文件中讀取它的座標。在這裏,這是說的文本文件:
makeGrass:(0.6 1.0 2.8)
makeGrass:(5.6 1.0 9.8)
makeGrass:(2.6 1.0 4.8)
makeGrass:(7.6 1.0 3.8)
makeGrass:(0.6 1.0 2.8)
makeGrass:(0.6 1.0 4.8)
makeGrass:(2.6 1.0 2.8)
makeGrass:(0.6 1.0 0.8)
現在,這應該使我能夠呈現在不同的位置8個草模型,但是當我打運行所有我能看到的是這樣的:
http://www.pic-upload.de/view-27752444/Untitled.png.html
草也是超級閃亮,因爲所有其他草模型也被放置在這個位置..出了點問題..
目前尚不清楚你所顯示的問題是什麼。如果makeGrass函數完成你的打算,上面的代碼應該可以工作。你還可以展示makeGrass函數和整體類的定義嗎? –
如果makeGrass方法正常工作並且是靜態的,那麼它應該對任何指定參數無限次地工作。 makeGrass方法可能會修改導致未來調用失敗的對象數據 – stanfordude
像Jonathan所說,如果語句System.out.println(aryLines [i]);可以打印出所有行,然後你的文件讀取功能是正確的。也許你應該檢查你的makeGrass函數。 –