2017-11-29 10 views
0

Ich habe Schwierigkeiten, das Rechteck Kollisionswerkzeug zu verwenden. Ich versuche ein Programm zu erstellen, bei dem das Bild die Richtung wechselt, wenn zwei Bilder kollidieren.Verarbeitung - Ändern der Richtung mit Kollision

Ich möchte diesen Code verwenden, aber ich bin unsicher, wo ich es ausdrücken? Auch was ersetze ich für ob1 (object1) und x1 und wo setze ich die Breite und Höhe Variablen? Dank

boolean Collision() 

    (ob1 - x1, ob1 -y1, ob1 - w, ob1 - h, 
    ob2 - x1, ob2 -y1, ob2 -w, ob2-h) 

    return 
    (ob1 - x1 < ob2 - x2 && ob1 - x2 > ob2 = x1 && //insert y variables 








//start of code 


    class Bouncy 
    { 

     int x; 
     int y; 
     int dx; 
     int dy; 

     PImage nw, ne, sw, se; 

     Bouncy(int x, int y, int dx, int dy) 
     { 
     this.x = x; 
     this.y = y; 
     this.dx = dx; 
     this.dy = dy; 
    nw = loadImage("NorthW.png"); 
    ne = loadImage("NorthE.png"); 
    sw = loadImage("SouthW.png"); 
    se = loadImage("SouthE.png"); 
     } 


     void update() 
     { 
     render(); 
     move(); 
     } 

     void render() 
     { 
    if (dx == -1 && dy == -1) 
     image(nw,x,y); 

    else if (dx == 1 && dy == -1) 
    image(ne,x,y); 

    else if (dx == -1 && dy == 1) 
    image(sw,x,y); 

    else if (dx == 1 && dy == 1) 
    image(se,x,y); 
      } 

     void checkCollisions() 
     { 
     int edge = 65; // half width of one of the PNG files 

     if (y<=(edge-edge)) // hit top border 
    dy=1; // switch to moving downwards 

    if (y>=500-(edge*2)) // hit bottom border 
    dy=-1; // switch to moving upwards 

     if (x<=edge-edge) // hit left border 
    dx=1; // switch to moving right 

    if (x>=500-(edge*2)) // hit right border 
    dx=-1; 
     } 



     void move() 
     { 
    checkCollisions(); 
    x += dx; 
    y += dy; 

     } 
    } 

    Bouncy janet,jeff,jerry; 

    void setup() 
    { 
     size(500,500); 
     janet = new Bouncy(10,100,1,-1); 
     jeff = new Bouncy(10,150,-1,1); 
     jerry = new Bouncy(10,350,1,1); 

    } 

    void draw() 
    { 
     background(255); 
     janet.update(); 
     jeff.update(); 
     jerry.update(); 

    } 
+0

Bitte korrigieren Sie die Formatierung Ihres Codes. Im Moment ist es sehr schwer zu lesen. –

+0

Ist das besser? –

+0

Nicht wirklich. Ihre Einrückung ist immer noch weit entfernt, was es sehr schwer zu lesen macht. Beachten Sie, dass der Verarbeitungseditor (und die meisten anderen IDEs) Ihren Code automatisch für Sie formatiert. –

Antwort

0

Ich glaube, Sie einen Schritt zurück und break your problem down into smaller pieces nehmen und dann die Stücke auf einem nach dem anderen nehmen. Zum Beispiel: Anstatt zu versuchen, an Ihrem vollen Programm zu arbeiten, warum fangen Sie nicht einfach mit zwei hartcodierten Rechtecken an, die ihre Farbe ändern, wenn sie sich kreuzen?

Damit können Sie Ihre grundlegende Kollisionserkennung arbeiten, ohne sich um all die zusätzlichen Sachen kümmern zu müssen. Weil Ihr Kollisionserkennungscode gerade keinen Sinn macht. Sie müssen zwei Rechtecke vergleichen, nicht nur eins. Schamlose Eigenwerbung: Ich habe ein Tutorial zur Kollisionserkennung geschrieben here. Sie suchen nach Rechteck-Rechteck-Kollisionserkennung:

if(rectOneRight > rectTwoLeft && rectOneLeft < rectTwoRight && rectOneBottom > rectTwoTop && rectOneTop < rectTwoBottom){ 
    // colliding! 
} 

Holen Sie sich das mit zwei hart-codierten Rechtecke arbeiten. Dann mach es mit einem Dritten. Wenn Sie in einem bestimmten Schritt stecken bleiben, können Sie eine MCVE zusammen mit einer spezifischeren Frage veröffentlichen. Viel Glück.

+0

Ich habe wirklich Probleme damit, Bilder durch die Rechteckmethode zu ersetzen, während sie die Richtung ändern. Ist es möglich, den oben hinzugefügten Code zu verwenden? Danke –

+0

@JHaskins Bilder ** sind ** Rechtecke. Lassen Sie es zunächst mit den grundlegenden Rechtecken arbeiten und fügen Sie dann Bilder hinzu. –

+0

Ist die boolesche Methode ebenfalls möglich? –

Verwandte Themen