2014-08-27 59 views
1

我是編程和處理的新手。在Processing中,我很難從另一個類的一個類中訪問變量。在處理中使用另一個類中的一個類的變量

我有兩個類「球」類和碰撞類。

class ball { 


    float xBall; 
    float yBall; 
    int balldiameter = 20; 
    float oldxball, oldyball; 
    boolean linehit; 
    color ballcolor = color(100, 200, 100); 
    float r; 
    float x; 

    float speedx, speedy; 
    float speed = 6; 

    ball() { 
     xBall = 200; 
     yBall = 300; 
     r = 2.8; 
     boolean linehit; 
    } // ball() 

    void ballUpdate() { 

     float px = xBall + cos(r)*(speed); 
     float py = yBall + sin(r)*(speed); 
     speedx = px - xBall; 
     speedy = py - yBall; 
     oldxball = xBall; 
     oldyball = yBall; 
     xBall += speedx; 
     yBall += speedy; 
     // display ball 
     stroke(0); 
     fill(ballcolor); 
     ellipse (xBall, yBall, balldiameter, balldiameter); 

    } //void ballUpdate() 
} // class ball 

碰撞類:

class collision { 

    ball bl; 

    collision() { 
    } // collision() 

    void collisionUpdate() { 

     bl = new ball(); 
     println(bl.r); 
     println(bl.xBall); 
     println(bl.yBall); 
     println(bl.x); 

在這裏,我嘗試訪問xBall,並從球類碰撞類中其他變量的代碼運行,但如果語句是不正確的。變量保持不變。

 if (bl.xBall < 0 || bl.xBall > width) { // side wall 
      bl.x = PI - bl.r; 
      bl.r = bl.x; 
      println("if 1"); 
     } 

     if (bl.yBall < 0 || bl.yBall > height) { // top & bottom 
      bl.x = TWO_PI - bl.r; 
      bl.r = bl.x; 
      println("if 2"); 
     } 
    } // void collisionUpdate() 
} // class collision 

我試着將球類中的xBall,YBall,r和x變量連接到碰撞類,使球在牆上反彈。 主要是這樣的:

ball bl; 
collision cl; 

void setup() { 
    size(600, 600); 

    bl = new ball(); 
    cl = new collision(); 
} 


void draw() { 
background(255); 
bl.ballUpdate(); 
cl.collisionUpdate(); 

遺憾的noob問題,但我是個初學者

+0

您可以發佈的[MCVE(HTTP:/ /stackoverflow.com/help/mcve)而不是這些斷開連接的片段? – 2014-08-27 16:57:04

回答

0

如果你有兩個球情況下巫一個應該由衝突類使用?我不知道整個想法,所以我不能真正知道你要去的地方...

請注意,在碰撞內部,你創建一個新的球,這是你試圖檢查牆壁的球,但它從不更新。您想檢查在全球範圍內創建的其他球。

也許碰撞應該是球類中的一種方法,而不是一個新的類......正如我所說我不知道​​你的目標,但我沒有看到這種設計的理由...無論如何...爲了使對您的代碼儘可能少的變化,我覺得你有傳遞給球的實例的引用進行檢查,對碰撞的構造函數,如:

Ball bl; 
Collision cl; 


void setup() { 
    size(600, 600); 

    bl = new Ball(); 
    cl = new Collision(bl); 
} 


void draw() { 
    background(255); 
    bl.ballUpdate(); 
    cl.collisionUpdate(); 
} 


class Ball { 

    float xBall; 
    float yBall; 
    int balldiameter = 20; 
    float oldxball, oldyball; 
    boolean linehit; 
    color ballcolor = color(100, 200, 100); 
    float r; 
    float x; 
    float speedx, speedy; 
    float speed = 6; 

    Ball() { 
    xBall = 200; 
    yBall = 300; 
    r = 2.8; 
    boolean linehit; 
    } // ball() 


    void ballUpdate() { 

    float px = xBall + cos(r)*(speed); 
    float py = yBall + sin(r)*(speed); 
    speedx = px - xBall; 
    speedy = py - yBall; 
    oldxball = xBall; 
    oldyball = yBall; 
    xBall += speedx; 
    yBall += speedy; 
    // display ball 
    stroke(0); 
    fill(ballcolor); 
    ellipse (xBall, yBall, balldiameter, balldiameter); 
    } //void ballUpdate() 
} // class ball 




class Collision { 

    Ball bl; 

    Collision(Ball _bl) { 
    bl = _bl; 
    } // collision() 

    void collisionUpdate() { 

    println(bl.r); 
    println(bl.xBall); 
    println(bl.yBall); 
    println(bl.x); 



    if (bl.xBall < 0 || bl.xBall > width) { // side wall 
     bl.x = PI - bl.r; 
     bl.r = bl.x; 
     println("if 1"); 
    } 

    if (bl.yBall < 0 || bl.yBall > height) { // top & bottom 
     bl.x = TWO_PI - bl.r; 
     bl.r = bl.x; 
     println("if 2"); 
    } 
    } // void collisionUpdate() 
} // class collision 
0

你需要檢查,如果球碰撞與其他球?或其他物體。?或兩者 ?

如果它只是爲了看看它們是否相互碰撞,我會建議將它作爲一個函數在球類本身內部移動,然後您可以調用一個方法在繪製每個循環中檢查整個數組(即怎麼過很多球,你有)

加 - 你真的應該使用PVector存儲對象(球lcoation),因爲它會與未來的數學方法有助於

+0

完全脫離話題,剛剛意識到我在2011年4月22日/ 23日在巴黎見過你 – 2014-08-31 22:12:12

+0

真的嗎?那麼,你是否和Harmut一起參加了大師班? – 2014-08-31 22:26:19

+0

是的,我記得你用你手機裏的音樂測試了我的音頻反應式蜘蛛網:) – 2014-08-31 22:29:52

相關問題