본문 바로가기
processing

[Processing] Chapter 7_function/ Chapter8_Object

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

Loop Mouse

 

마우스를 움직일때 마우스의 가장 중간지점은 검은색이고 옆으로 갈수록 흐릿해지는 효과를 줄 것이다.

 

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
 
void setup(){
  size(480,270);
}
 
 
void draw(){
  int i=0;
  while(i<width){
    
    float distance=abs(mouseX-i);
    println(distance);
    println(mouseX);
    
    fill(distance);
    rect(i,0,10,height);
    
    i+=10;
   
    
  }
 
}
cs
 

 

우선 10,20,30,...470까지 10간격으로 직사각형이 만들어진다.

만약 mouseX의 위치가 250이라면 i가 250인 25번째 사각형은 distance가 0이므로 검은색이 칠해질 것이다.

하지만 i가 10인 첫번째 사각형은 250-10=240으로 거의 흰색의 사각형이 칠해질 것이다.

 

while문이 draw함수가 실행될때마다 계속 다시 실행된다는 것을 염두해두면 좋다.

 

 

Bounce ball with Modularity 

이전에 구현했던 바운스볼을 여러 함수로 기능을 빼내어서 구현해볼 것이다.

 

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
34
int x=20;
int speed=1;
int diam=30;
 
void setup(){
  size(480,270);
}
 
 
void draw(){
  background(255);
  move();
  display();
  bounce();
  
}
 
void move(){
  x+=5*speed;
}
 
void bounce(){
  if(x+diam/2>width){
    speed*=-1;
  }else if(x-diam/2<0){
    speed*=-1;
  }
  
}
 
void display(){
  fill(128);
  ellipse(x,150,diam,diam);
}
cs

 

중요한건 x+diam/2 > width  , x-diam/2<0 이라는 조건을 잘 세워야 한다는것!

 

 

Single Object

 

자동차가 캔버스를 지나갈것인데 이를 class를 통해 구현해볼 것이다. 

 

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
34
35
36
37
38
39
40
 
Car myCar;
void setup(){
  size(480,70);
  myCar=new Car();
}
 
void draw(){
  background(255);
  myCar.move();
  myCar.display();
}
 
class Car{
  color c;
  float xPos;
  float yPos;
  float speed;
  Car(){ //
    c=color(128);
    xPos=width/2;
    yPos=height/2;
    speed=3;
  }
  
  void display(){
    fill(c);
    rect(xPos,yPos,30,20);
  }
  
  void move(){
    xPos+=speed;
    if(xPos>width){
      xPos=0;
    }
  
  }
 
}
 
cs

 

color라는 데이터 타입이 있는게 신기했다.

 

 

Two Object

single Object 부분에 이어서 자동차 객체를 2개 만들어볼 것이다.

객체를 2개 만들고 싶으면 생성자에 매개변수를 두면 좋다.

 

 

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
34
35
36
37
38
39
40
41
42
43
44
Car myCar1;
Car myCar2;
void setup(){
  size(480,270);
  myCar1=new Car(51,0,100,2);
  myCar2=new Car(151,0,200,1);
}
 
void draw(){
  background(255);
  myCar1.move();
  myCar1.display();
  myCar2.move();
  myCar2.display();
}
 
class Car{
  color c;
  float xPos;
  float yPos;
  float speed;
  Car(color c,float xPos,float yPos,float speed){
    this.c=c;
    this.xPos=xPos;
    this.yPos=yPos;
    this.speed=speed;
  }
  
  void display(){
    stroke(0);
    fill(c);
    rect(xPos,yPos,30,20);
  }
  
  void move(){
    xPos+=speed;
    if(xPos>width){
      xPos=0;
    }
  
  }
 
}
 
cs

 

자바 문법이랑 거의 똑같다.

 

 

728x90
반응형

댓글