본문 바로가기
processing

[Processing] bounce ball

by Meaning_ 2022. 3. 10.
728x90
반응형

 

양쪽 벽에 공이 충돌하면 튕겨나가는 프로그램을 만들어 볼 것이다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
int x,y;
int diam;//ball's diameter
//ball's direction
int xDir;
int yDir;
void setup(){
  //Initialize variables in setup()
  
  size(600,400);
  x=10;//if x is 0 --> it alreay less than 0 --> error
  y=100;
  diam=30;
  xDir=+4;
  
}
 
void draw(){
  background(200);
  ellipse(x,y,diam,diam);
  x=x+xDir;//ball is going to the right
  
  //if ball touches the border
  if((x+diam/2)>600){ //radius
    //change the direction
    //xDir=-4;
    xDir*=-1;
    
  }else if((x-diam/2)<0){
    //xDir=+4;
    xDir*=-1;
  }
  
}
cs

이 부분을 자세히 보면 만약 600보다 클 경우에 다시 왼쪽으로 튕겨나가야 하는 것인데

x>600을 해버리면 원의 반쪽이 벽안으로 들어가버린다. 그래서 

원이 딱 벽에서 튕기게 하기 위해 반지름 만큼인 diam/2를 더해준다.

 

마찬가지로 반대의 경우도 x-(diam/2)<0으로 설정해주어서 원이 벽 안으로 들어가지 않게 해준다.

 

그리고  x값이 600보다 커질 때 xDir=-4를 해줘서 왼쪽으로 방향을 트는 방법도 있지만

xDir*=-1을 해서 방향을 반대로 트는 방법도 있다. 

 

반대의 경우도 xDir=4를 xDir*=-1을 해서 방향을 반대로 트는 방법이 있다. (이미 x값이 0이기에  xDir=xDir*-1을 해주면 마이너스였던 xDir값이 플러스로 바뀌면서 x값이 양수로 변한다)

 

 그리고 중요한건 x를 0으로 두면 안된다. 적어도 x는 diam/2보다는 큰 수를 두는 것을 추천한다. 

그래야 이 분기문에 걸리지 않는다..!

728x90
반응형

'processing' 카테고리의 다른 글

[Processing] Chapter 7_function/ Chapter8_Object  (0) 2022.03.13
[Processing] Chapter5_조건문  (0) 2022.03.12
[Processing] Chapter4_variables  (0) 2022.03.12
[processing] Chapter3_Interaction  (0) 2022.03.10
[processing] Chapter1_Pixel,Shape  (0) 2022.03.03

댓글