2014-08-27 82 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