2016-11-09 72 views
0

首先我們不能準確地說出我的問題!在不同時間撥打課程時遇到麻煩

我面對的問題是我有一個數組列表,其中包含4個完全相同的事物,只是它們需要在不同的時間被調用(當第一個座標超過特定值時),但是我無法獲得它完成了,並且無法在網上找到它(可能是因爲我無法準確地將我的問題提出來:/)無論如何,我會在下面發佈我的代碼,如果有人可以說出一些光,我會非常感激!

**即時通訊是通過用線連接屏幕中心與每個角的隧道效果,現在我試圖通過從屏幕中間向邊緣開始線來模擬移動(從底部開始部分)**

speedLines sline1, sline2, sline3, sline4; 

// holds speedLines classes 
ArrayList<speedLines> gameObject; 

void setup() { 
    background(0); 
    size(750, 750); 
    smooth(); 

    gameObject = new ArrayList<speedLines>(); 

    sline1 = new speedLines(height/2); 
    sline2 = new speedLines(height/8); 
    sline3 = new speedLines(height/4); 
    sline4 = new speedLines((height/2)*3); 

    gameObject.add(sline1); 
    gameObject.add(sline2); 
    gameObject.add(sline3); 
    gameObject.add(sline4); 
} 

void draw() { 
    background(0); 
    for(int i=0; i< gameObject.size(); i++){ 

    // go through the different classes 
    // 2 added so far 
    gameObject.get(i).display(); 

    } 
    Guidelines(); 
} 
//GLOBAL VARIABLES 
int line=0; 
int linewidth=0; 




void Guidelines() { 
    stroke(255); 
    //MAIN GUIDE 
    line(0, 0, width/2, height/2);//top left guide 
    line(width, 0, width/2, height/2);//top right guide 
    line(0, height, width/2, height/2);//bottom left guide 
    line(width, height, width/2, height/2);//bottom right guide 
    //SUB GUIDE 
    stroke(60, 60, 60); 
    line(width/3, height, width/2, height/2);//sub guide left 
    line((width/3)*2, height, width/2, height/2);//sub guide right 
} 
class speedLines { 
    //Global variables 
    int Y; 

    speedLines(int y) { 
    } 

    void display() { 
    stroke(60, 60, 60); 
    line((width/2)-linewidth, (height/2)+line, (width/2)+linewidth, (height/2)+line); 
    line++; 
    linewidth++; 
    if ((height/2)+line >= height) 
    { 
     line=0; 
     linewidth=0; 
    } 
    } 
} 

回答

1

如果我是你,我會盡量縮小到一個較小的示例草圖。我也試着清理一下你的代碼:當你把它們放在ArrayList中時,是否有一個原因是你有草圖級的sline變量?

這就是說,我會盡力幫助。您將參數傳入speedLines類(實際上應該稱爲SpeedLine,因爲類應以大寫字母開頭,每個實例僅表示一行)構造函數,但您從不使用該參數。設法得到它只有一個實例的工作,像這樣:

Line myLine; 

void setup() { 
    size(100, 500); 
    myLine = new Line(height/2); 
} 

void draw() { 
    background(200); 
    myLine.move(); 
    myLine.render(); 
} 

class Line { 
    float lineY; 

    public Line(float lineY) { 
    this.lineY = lineY; 
    } 

    public void move() { 
    lineY++; 
    if (lineY > height) { 
     lineY = 0; 
    } 
    } 

    public void render() { 
    line(0, lineY, width, lineY); 
    } 
} 

通知我如何實際使用lineY變量,我傳遞到我的Line構造。試着在你的代碼中得到像這樣的東西。然後,它會更容易使用的ArrayList繪製多行:

ArrayList<Line> myLines = new ArrayList<Line>(); 

void setup() { 
    size(100, 500); 
    for (float lineY = 0; lineY < height; lineY += 100) { 
    myLines.add(new Line(lineY)); 
    } 
} 

void draw() { 
    background(200); 

    for (Line myLine : myLines) { 
    myLine.move(); 
    myLine.render(); 
    } 
} 

class Line { 
    float lineY; 

    public Line(float lineY) { 
    this.lineY = lineY; 
    } 

    public void move() { 
    lineY++; 
    if (lineY > height) { 
     lineY = 0; 
    } 
    } 

    public void render() { 
    line(0, lineY, width, lineY); 
    } 
} 

另外請注意,你永遠只能在真正的類使用單一值(在我的例子中,lineY變量)。所以你可能不需要一個班級來做到這一點。你也許可以做到這一點,只需float值的數組保存lineY值改爲:

float[] lineY = new float[10]; 

void setup() { 
    size(100, 500); 
    for (int i = 0; i < lineY.length; i++) { 
    lineY[i] = i * 10; 
    } 
} 

void draw() { 
    background(200); 

    for (int i = 0; i < lineY.length; i++) { 
    lineY[i]++; 
    if (lineY[i] > height) { 
     lineY[i] = 0; 
    } 
    line(0, lineY[i], width, lineY[i]); 
    } 
} 

請注意,所有的這些都只是例子,你必須把這些例子和理解他們」什麼重做,然後在你的代碼中做類似的事情。祝你好運。

+0

搞砸了,歡呼凱文:) –

相關問題