当对象碰到边界时如何更改对象的大小?

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

我想编写一个对象,它在移动时碰到程序的边缘时会产生脉动效果。所以物体应该变大一点,当碰到边缘时,然后一遍又一遍地达到输出尺寸。我已经为我的问题搜索了几个小时,但找不到答案。有什么建议吗?

我的代码:

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

在初始状态下,ballsizeX是60,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;
    }
}