2015-07-21 57 views
0

我有一個方法,從文件中讀取座標,並用它們在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

草也是超級閃亮,因爲所有其他草模型也被放置在這個位置..出了點問題..

+1

目前尚不清楚你所顯示的問題是什麼。如果makeGrass函數完成你的打算,上面的代碼應該可以工作。你還可以展示makeGrass函數和整體類的定義嗎? –

+0

如果makeGrass方法正常工作並且是靜態的,那麼它應該對任何指定參數無限次地工作。 makeGrass方法可能會修改導致未來調用失敗的對象數據 – stanfordude

+0

像Jonathan所說,如果語句System.out.println(aryLines [i]);可以打印出所有行,然後你的文件讀取功能是正確的。也許你應該檢查你的makeGrass函數。 –

回答

0

好吧我發現我的草地功能弄錯了,它需要是這樣的錯誤:

public void makeGrass(double posX, double posY, double posZ) 
{  
    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); 
    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); 
} 

唯一奇怪的是,一旦我添加的代碼到makeGrass方法我失去了我的輸入法..奇怪,但不是現在的問題..

我得到幾乎完全是我現在想要..這是我的世界編輯的最終結果和基礎。非常感謝你,你真的幫助了我!

這裏是我的ShowOff圖片:http://www.pic-upload.de/view-27752521/ShowOff.png.html

我敢肯定,我會回來更多的很快,但在現階段,我知道的一切,可以在我自己的擴展這個世界編輯器,非常感謝所有誰已經幫助了我,希望我能回覆一段時間的好感!