2016-11-26 12 views
0

少しの背景が、私は現在、小さなゲームとプロジェクトの最後に取り組んでいます。現在、いくつかの機能が欠けていますが、コンセプトに違うクラスの「ごみ」を入れて、適切な種類のゴミ箱に正しいゴミ箱を入れないと失うでしょう。コードはここで見つけることができ、単にclasesの間で分けられます。あなたはHereは、圧縮それをつかむか、ここでそれを超える見ることができます:オブジェクトをオブジェクト上に移動するときのバグ

メインクラス:

Juego j = new Juego(); 
String escena; 
void setup(){ 
    size(400,400); 
    escena = "inicio"; 

} 

void draw(){ 
    if (escena.equals ("inicio")){ 
    j.inicio(); 
    } else if (escena.equals("instrucciones")){ 
    j.inst(); 
    } else if (escena.equals("jugar")){ 
    j.Empezar(); 
    } else if (escena.equals("perdio")){ 
    j.perdiste(); 
    } 
} 

void mousePressed(){ 
    j.Agarrar(); 
} 

ゴミ箱:

class Bas { 
    float posX = random(25, 325); 
    float posY = random(75, 300); 
    int tam = 50; 
    color amarillo = color (255, 255, 0); 
    color verde = color (160, 220, 50); 
    boolean appear = true; 
    boolean agarrado = false; 
    boolean perdido = false; 
    int col; 
    float move_x = 2.5; 
    float move_y = 1.5; 
    int xdirection = 1; // Left or Right 
    int ydirection = 1; // Top to Bottom 


    Bas(int c) { 
    col = c; 
    } 

    void dibujar() { 
    if (col == 1) { 
     fill(amarillo); 
     ellipse(posX, posY, tam, tam); 
    } 
    if (col == 0) { 
     fill(verde); 
     ellipse(posX, posY, tam, tam); 
    } 
    } 

    void cambiar() { 
    posX = round(random(50, 325)); 
    posY = round(random(75, 300)); 
    } 

    void appearOnScreen() { 
    appear = true; 
    cambiar(); 
    } 

    void dissapear() { 
    appear=false; 
    } 

    void agarrado() { 
    if (mousePressed && col == 1) { 
     this.posX = mouseX; 
     this.posY = mouseY; 
     if (mouseX > 0 && mouseX < 200 && mouseY > 350 && mouseY < 400) 
     { 
     cambiar(); 
     } 
     if (mouseX > 200 && mouseX < 400 && mouseY > 350 && mouseY < 400) { 
     perdido = true; 
     } 
    } 
    if (mousePressed && col == 0) { 
     this.posX = mouseX; 
     this.posY = mouseY; 
     if (mouseX > 200 && mouseX < 400 && mouseY > 350 && mouseY < 400) 
     { 
     cambiar(); 
     } 
     if (mouseX > 0 && mouseX < 200 && mouseY > 350 && mouseY < 400) { 
     perdido = true; 
     } 
    } 
    } 

    void translacion() { 
    this.posX = this.posX + (move_x*xdirection); 
    this.posY = this.posY + (move_y*ydirection); 

    if (this.posX > width-tam || this.posX < tam) { 
     xdirection *= -1; 
    } 
    if (this.posY > 300 || this.posY < 75) { 
     ydirection *= -1; 
    } 
    } 

    void cambiarPerdido(){ 
    this.perdido = false; 
    } 
} 

ゲームコントローラ:

class Juego { 
    Bas b[] = new Bas[6]; 
    Tachos t[] = new Tachos[2]; 
    int tam = 50; 
    float time; 

    Juego() { 
    for (int i = 0; i<6; i++) { 
     b[i] = new Bas(i%2); 
    } 
    for (int i = 0 ; i<2; i++){ 
     t[i] = new Tachos(i%2); 
     } 
    } 

    void Empezar() { 
    background(255); 
    for (int i = 0; i<6; i++) { 

     b[i].dibujar(); 
     b[i].translacion(); 
    } 
    for (int i = 0 ; i<2; i++){ 
     t[i].crearTachos(); 
    } 
    this.Agarrar(); 
    this.perdiste(); 
    } 

    void Agarrar() { 
    for (int i = 0; i<6; i++) { 
     if (dist(b[i].posX, b[i].posY, mouseX, mouseY) < tam/2) { 
     b[i].agarrado(); 
     } 
    } 
    } 

    void inicio() { 
    background (255); 
    noFill(); 
    rect(50, 70, 100, 50); 
    rect(50, 170, 130, 50); 
    fill(0); 
    textSize(20); 
    text("Comenzar", 50, 100); 
    text("instrucciones", 50, 200); 
    for (int i = 0; i<6; i++) { 
     b[i].cambiarPerdido(); 
     b[i].cambiar(); 
    } 
    if (mousePressed && mouseX>50 && mouseX < 150 && mouseY > 70 && mouseY < 120) { 
     escena = "jugar"; 
    } else if (mousePressed && mouseX > 50 && mouseX < 180 && mouseY > 170 && mouseY < 220) { 
     escena = "instrucciones"; 
    } 
    } 
    void inst() { 
    background (100); 
    fill(255); 
    rect (125, 275, 100, 50); 
    fill(0); 
    fill(0); 
    textSize(15); 
    text ("Volver", 150, 300); 
    text ("Utiliza el mouse para mover las bolsas de basura\n a sus correspondientes tachos\n si las colocas en el tacho equivocado pierdes!", 10, 100); 
    if (mousePressed && mouseX > 125 && mouseX < 225 && mouseY > 275 && mouseY < 325) { 
     escena = "inicio"; 
    } 
    } 

    void perdiste() { 
    for (int i = 0; i<6; i++) { 
     if (b[i].perdido == true) { 
     escena = "perdio"; 
     background(255); 
     noFill(); 
     rect (0, 300, 100, 50); 
     rect (300, 300, 100, 50); 
     fill(0); 
     textSize(40); 
     text("PERDISTE!", 100, 100); 
     textSize (20); 
     text("Volver", 15, 330); 
     text("Salir", 315, 330); 
     if (mousePressed && mouseX > 0 && mouseX < 100 && mouseY > 300 && mouseY < 350) { 
      escena = "inicio"; 
     } else if (mousePressed && mouseX > 300 && mouseX < 400 && mouseY > 300 && mouseY < 350) { 
      exit(); 
     } 
     } 
    } 
    } 
} 

ゴミ箱容器:

class Tachos { 
    float posX; 
    float posY; 
    int col; 
    int tam = 200; 

    Tachos(int c) { 
    col = c; 
    } 

    public void crearTachos() { 
    if (col == 1) { 
     fill(255, 255, 0); 
     rect(0, height-50, tam, tam); 
    } 
    if (col == 0) { 
     fill(160, 220, 50); 
     rect(200, height-50, tam, tam); 
    } 
    } 

/* public void translacion() { 
    this.posX = this.posX + (move_x*xdirection); 
    this.posY = this.posY + (move_y*ydirection); 

    if (this.posX > width-tam || this.posX < tam) { 
     xdirection *= -1; 
    } 
    if (this.posY > height-tam || this.posY < tam) { 
     ydirection *= -1; 
    } 
    }*/ 
} 

私が持っている主な問題は、マウスボタンを押した後にゴミ箱を移動し、それを別のゴミ箱に移動して一緒に積み重ねることです。アイデアはお互いに独立して動くはずですが、私はそれを働かせることはできません。私はかなり問題がここにあると確信しています:

void Agarrar() { 
    for (int i = 0; i<6; i++) { 
     if (dist(b[i].posX, b[i].posY, mouseX, mouseY) < tam/2) { 
     b[i].agarrado(); 
     } 
    } 
    } 

しかし、私はそれを修正する方法がわかりません。誰もがこれで私を助けることができますか?事前に多くの感謝。

答えて

0

今後、問題をMCVEに絞り込んでください。

しかし、あなたは孤立コードの部分を見て:

for (int i = 0; i<6; i++) { 
     if (dist(b[i].posX, b[i].posY, mouseX, mouseY) < tam/2) { 
     b[i].agarrado(); 
     } 
} 

私は、これはあなたのゴミのすべてを超えるループ、およびマウスがそのゴミの上にある場合、それはそれを拾うことを仮定していますか?そして、この問題は、マウスの下のほんの一片ではなく、ごみ箱のすべてを拾うということですか?

そのような場合、あなたは単にあなたがゴミの部分をつかむたびループから抜け出すためにbreakキーワードを使用する場合があります。

for (int i = 0; i<6; i++) { 
     if (dist(b[i].posX, b[i].posY, mouseX, mouseY) < tam/2) { 
     b[i].agarrado(); 
     break; 
     } 
} 

これは、あなたがつかむたびループが実行を停止しますごみの最初の部分。

関連する問題