2017-10-10 4 views
0

J'apprends Traitement et je fais une version modifiée du jeu de pong en cours de traitement 3. J'ai 2 balles simultanément au lieu de seulement 1. De plus, une balle accélère pendant que l'autre balle ralentit vers le bas pendant que le programme fonctionne.Traitement 3.0: La balle de pong accélérée ne rebondit pas correctement

Ma bille d'accélération fonctionne bien, elle rebondit et augmente la vitesse. Mais, mon ralentissement ne fonctionne pas correctement. La balle qui ralentit se déplace dans une très petite zone et ne va même pas près des frontières pour rebondir. L'aide serait appréciée. Thanks.`

float ballXPosition; 
float ballYPosition; 
float ballTwoXPos; 
float ballTwoYPos; 
float xDirection; 
float ballTwoXDir; 
float yDirection; 
float ballTwoYDir; 
float radius = 12; 
float xSpeed; 
float ySpeed; 
float ballTwoXSpeed; 
float ballTwoYSpeed; 
float MAX_SPEED = 15; 
float MIN_SPEED = 0.2; 

void setup() 
{ 
    size(600,600); 
    stroke(3); 
    background(255,255,255); 

    ballXPosition = width/2 + random(60); 
    ballTwoXPos= width/2 + random(60); 

    ballYPosition = height/2 + random(60); 
    ballTwoYPos = height/2 + random(60); 

    xDirection = random(1,3); 
    ballTwoXDir = random(1,3); 

    yDirection = random(1,3); 
    ballTwoYDir = random(1,3); 

    xSpeed = MIN_SPEED; 
    ySpeed = MIN_SPEED; 

    ballTwoXSpeed = MAX_SPEED; 
    ballTwoYSpeed = MAX_SPEED; 
} 

void createAcceleratingBall(float xpos, float ypos, float xstretch, float ystretch) 
{ 
    fill(255,0,0); 
    ellipse(xpos, ypos, xstretch, ystretch); 
} 

void createSlowingBall(float xpos, float ypos, float xstretch, float ystretch) 
{ 
    fill(0,0,255); 
    ellipse(xpos, ypos, xstretch, ystretch); 
} 

boolean isSpeedMax(float speed) 
{ 
    return speed > MAX_SPEED; 
} 

boolean isSpeedMin(float speed) 
{ 
    return speed < MIN_SPEED; 
} 

boolean isBallAtXBorder(float xpos) 
{ 
    if(xpos < radius || xpos > width - radius) 
    return true; 
    else 
    return false; 
} 

boolean isBallAtYBorder(float ypos) 
{ 
    if(ypos < radius || ypos > height - radius) 
    return true; 
    else 
    return false; 
} 

void draw() 
{ 
    background(255); 

    ballXPosition = ballXPosition + (xDirection * xSpeed); 
    ballTwoXPos = ballTwoXPos + (ballTwoXDir * ballTwoXSpeed); 

    ballYPosition = ballYPosition + (yDirection * ySpeed); 
    ballTwoYPos = ballTwoYPos + (ballTwoYDir * ballTwoYSpeed); 

    if(!isSpeedMax(xSpeed)) 
    xSpeed *= 1.005; 

    if(!isSpeedMax(ySpeed)) 
    ySpeed *= 1.003; 

    if(!isSpeedMin(ballTwoXSpeed)) 
    ballTwoXSpeed = ballTwoXSpeed/1.005; 

    if(!isSpeedMin(ballTwoYSpeed)) 
    ballTwoYSpeed = ballTwoYSpeed/1.003; 

    if(isBallAtXBorder(ballXPosition)) 
    xDirection *= -1; 

    if(isBallAtYBorder(ballYPosition)) 
    yDirection *= -1; 

    if(isBallAtXBorder(ballTwoXDir)) 
    ballTwoXDir *= -1; 

    if(isBallAtYBorder(ballTwoYDir)) 
    ballTwoYDir *= -1; 

    createAcceleratingBall(ballXPosition, ballYPosition, 2*radius, 2*radius); 
    createSlowingBall(ballTwoXPos, ballTwoYPos, 2.5*radius, 2.5*radius); 
} 

Répondre

0

Je pense que vous avez les mauvaises les variables testées pour la balle ralentit dans les fonctions isBallAtXBorder et isBallAtYBorder. Vous testez ballTwoXDir et ballTwoYDir - si vous ne testez pas ballTwoXPos et ballTwoYPos?