当对象碰到边界时如何更改对象的大小?
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;
}
}
我想编写一个对象,它在移动时碰到程序的边缘时会产生脉动效果。所以物体应该变大一点,当碰到边缘时,然后一遍又一遍地达到输出尺寸。我已经为我的问题搜索了几个小时,但找不到答案。有什么建议吗?
我的代码:
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;
}
}