2017-10-10 24 views
0

처리 중이며 처리중인 퐁 게임의 수정 버전을 만들고 있습니다. 3. 1 대신에 2 개의 볼을 동시에 가지고 있습니다. 또한 하나의 볼이 가속되고 다른 볼은 느려집니다. 프로그램이 실행될 때 다운됩니다.처리 3.0 : 퐁볼 가속이 올바르게 튀지 않음

내 가속 볼이 잘 동작하고있어 속도가 빨라지고 속도가 빨라집니다. 하지만, 내 공을 느리게 올바른 작동하지 않습니다. 느린 공은 아주 작은 지역에서 움직이며, 바운스하기 위해 국경에 가까이 가지 않습니다. 도움을 주시면 감사하겠습니다.

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

Thanks.` 난 당신이 잘못된 변수는 isBallAtXBorderisBallAtYBorder 기능의 둔화 공을 테스트하는 것 같아요. ballTwoXDirballTwoYDir을 테스트 중입니다. ballTwoXPosballTwoYPos을 테스트해야합니까?