それは国境に当たったとき、オブジェクトのサイズを変更する方法?

セルカンK:

私は移動しながらプログラムの縁に当たったときに脈動効果を持つオブジェクトを、符号化したかったです。オブジェクトは、エッジに当たったときに、少し大きい取得し、再度以上にわたり出力サイズに移動しなければならないので。私は私の問題のために時間を検索しましたが、答えを見つけることができませんでした。任意のヒント?

私のコード:

float ballsizeX = 60;
float ballsizeY = 60;
float ballX = 0;
float ballY = 0;
float speedX = 2;
float speedY = 2;

void setup() {   
    size(500, 400);
}

void draw() {   
    background(255);   
    fill(random(255), 255, random(255));   
    ellipse(ballX, ballY, ballsizeX, ballsizeY);   
    speedX = speedX * 1;   
    speedY = speedY * 1;   
    ballX = ballX + speedX;   
    ballY = ballY + speedY;

    if (ballX < 0 || ballX > 500) {     
        speedX = speedX * (-1);
    } else if (ballY < 0 || ballY > 400) {     
        speedY = speedY * (-1);     
    }
    else if(ballsizeX>60||ballsizeY>60){
        ballsizeX = ballsizeX * (-1);
        ballsizeY = ballsizeY * (-1);
    }
    else if(ballsizeX<30||ballsizeY<30){
        ballsizeX = ballsizeX + 1;
        ballsizeY = ballsizeY + 1;
    }    
}
Rabbid76:

初期状態では、ballsizeX60で、ballsizeYです。

どちらの条件がballsizeX>60||ballsizeY>60満たされていない、また条件がballsizeX<30||ballsizeY<30満たされています。
両方の値が(条件によって覆われたコードブロックを除く)に変更されることはないので、条件が満たされたことがないであろう。

それが壁に当たった場合、ボールの大きさをインクリメント:

 if (ballX < 0 || ballX > 500) {     
    speedX = speedX * (-1);  
    ballsizeY = initSize*2;
 } else if (ballY < 0 || ballY > 400) {     
    speedY = speedY * (-1);
    ballsizeX = initSize*2;
 }  

それは初期サイズよりもおろし金である限り、すべてのフレームでボールのサイズの削減:

if ( ballsizeX > 30 ) {
     ballsizeX = ballsizeX - 1;
}
if ( ballsizeY > 30 ) {
     ballsizeY = ballsizeY - 1;
}

私はあなたの元のコードに提案を適用した例を参照してください:

float initSize = 30;
float ballsizeX = initSize;
float ballsizeY = initSize;
float ballX = initSize/2;
float ballY = initSize/2;
float speedX = 2;
float speedY = 2;

void setup() {   
    size(500, 400);
}
void draw() {   
    background(255);   
    fill(random(255), 255, random(255));   
    ellipse(ballX, ballY, ballsizeX, ballsizeY);   
    speedX = speedX * 1;   
    speedY = speedY * 1;   
    ballX = ballX + speedX;   
    ballY = ballY + speedY;

    if ( ballsizeX > initSize ) {
         ballsizeX = ballsizeX - 1;
    }
    if ( ballsizeY > initSize ) {
         ballsizeY = ballsizeY - 1;
    }  

    if (ballX < initSize/2 || ballX > width-initSize/2) {     
        speedX = speedX * (-1);  
        ballsizeY = 60;
     } else if (ballY < initSize/2 || ballY > height-initSize/2) {     
        speedY = speedY * (-1);
        ballsizeX = 60;
    }
}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=206702&siteId=1