How to change the size of an object, when it hits a border?

Serkan K. :

I wanted to code an object, which has a pulsating effect when hitting the edge of the program while moving. So the object should get a little bigger, when hitting the edge and then go to the output size over and over again. I've searched hours for my problem, but couldn't find an answer. Any tips?

My code:

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 :

At the initial state, ballsizeX is 60 and ballsizeY is.

Neither the condition ballsizeX>60||ballsizeY>60 is fulfilled, nor the condition ballsizeX<30||ballsizeY<30 is fulfilled.
Since both values are never changed (except in the code block covered by the conditions), the conditions will be never fulfilled.

Increment the size of the ball, if it hits a wall:

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

Reduce the size of the ball in every frame as long it is grater than the initial size:

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

See the example, where I applied the suggestions to your original code:

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;
    }
}

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=95631&siteId=1