2017-10-10 16 views
0

処理中のポンゲームの修正版を作成しています。3. 1つではなく2つのボールを同時に持っています。 また、1つのボールが加速し、プログラムが実行されると停止します。処理3.0:ポンポールが正しく跳ね返っていない

私の加速ボールはうまくいきます。飛び跳ねてスピードを上げます。しかし、私の減速ボールは正しく動作していません。減速しているボールは非常に小さい領域で動き、跳ね返るためにボーダーに近づくことさえありません。ヘルプをいただければ幸いです。 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); 
} 

答えて

0

私はあなたがisBallAtXBorderisBallAtYBorder機能に鈍化ボールのためにテストされている間違った変数を持っていると思います。あなたはballTwoXDirballTwoYDirをテストしています - ballTwoXPosballTwoYPosをテストしないといけないのですか?

関連する問題