float sizInc = 0.72;
float splatSizDec = 0.4;
float minSpeed = 20;
float maxOffset = 1;
float maxSiz = 20;
//float maxHay = 500; // hay의 최대값인 듯하나 코드 상에서 사용되지 않음
//float maxTay = 500; // tay의 최대값인 듯하나 코드 상에서 사용되지 않음
float maxVar = 300; // Var의 최대값
float mousX = 3;
float prevMousX;
float mousY = 3;
float prevMousY;
float mousVX;
float mousVY;
float time = 0;
ArrayList paintDots;
void setup()
{
background(255);
fill(0);
size(480, 800);
smooth();
paintDots = new ArrayList();
}
void draw() {
updateAll();
fade();
time += 0.01;
}
void fade()
{
if(time > 10) // 마우스 오른쪽 버튼을 눌렀을 때 흰색 솔리드가 계솓 덮히면서 화면을 덮어나가는 속도입니다.
{
noStroke();
fill(255,255,255,30);
rect(0,0,700,500);
time = 0;
}
if(mousePressed && (mouseButton == RIGHT))
{
for(int i = paintDots.size()-1; i >= 0; i--)
{ paintDots.remove(i); }
fill(255,255,255);
rect(0,0,700,500);
}
}
void updateAll()
{
prevMousX = mousX;
prevMousY = mousY;
mousX = mouseX;
mousY = mouseY;
mousVX = mousX - prevMousX;
mousVY = mousY - prevMousY;
if(mousePressed && (mouseButton == LEFT))
{
// 제가 해석한 바로는 여기가 물감과 그 다음 찍힌 물감간의 거리를 조절하는 부분이란 말이죠?
mousVX = mousX - prevMousX; (마우스가 이동한 간격 = 마우스의 현재 위치- 마우스의 이전 위치) 니까. 여기서 마우스 클릭에 따라 생겨나는 점들의 간격/거리 도 정해지는 거잖아요? 그래서 저희가 간격을 줄여보고자 이 부분에 -100 까지도 해봤는데 간격이 줄어들 생각을 안합니다. 왜일까요? 불쌍한 디자인과 학생 돕는다고 생각하시고 제발 한번만 도와주십셔 ㅠㅠ 어제도 정말 감사했었습니다.
mousVY = mousY - prevMousY;
float Tay = random(30,50);
float Hay = random(30,50);
float Var = random(0,maxVar);
{
paintDots.add(new paintDot(mousX, mousY, Tay,Hay,Var));
}
}
updateDots();
}
void updateDots()
{
print(paintDots.size());
for (int i = paintDots.size()-1; i >= 0; i--)
{
paintDot drop = (paintDot)paintDots.get(i);// An ArrayList doesn't know what it is storing so we have to cast the object coming out
drop.update();
drop.display();
if (drop.finished())
{
paintDots.remove(i);
}
}
}
class paintDot {
float x, y, vx, vy, siz, prevx,prevy, slow, sizDec,life,vectorVar,vectorTay,vectorHay;
int r,g,b;
boolean dripping;
paintDot (float moux, float mouy, float vT, float vH, float vV) {
r = (int)random(70,80);
g = (int)random(28,3);
b = (int)random(5,15);
vectorHay = vH;
vectorVar = vV;
vectorTay = vT;
sizDec = splatSizDec;//random(0,splatSizDec);
float offsetX = pow(random(0,maxOffset),2);
float offsetY = pow(random(0,maxOffset),2);
x = moux + random(-1,1)*offsetX;
y = mouy + random(-1,1)*offsetY;
vx = vectorTay + random(-1*vectorVar,vectorVar);
vy = vectorHay + random(-0.75*vectorVar,vectorVar);
siz = random(1,maxSiz);
}
void update() {
vx *= slow;
vy *=slow;
// 위 두 줄을 주석 처리하면 tay, hay, var의 의미를 알 수 있음
if(dripping == false)
prevx = x;
prevy = y;
x += vx;
y += vy;
siz = (siz * sizDec) + sizInc;
if(dripping)
{ siz -= (int)(sizInc); }
//print("Dot at " + x + ", " + y + " vx = " + vx + " vy = " + vy + " siz = " + siz);
}
void display()
{
stroke(r,g,b,240);
strokeWeight((int)siz);
line(x,y,prevx,prevy);
}
boolean finished()
{
if(vx*vx + vy < minSpeed)
{
if(dripping == false)
{
dripping = true;
vx = 0;
vy = pow(random(0,1.5),2);
return false; }
else{
return true;
}
}
else
{
return false;
}
}
}
slow 쓰는 부분을 주석처리해 보니(원래 slow 변수에 어떤 값이 있어야 하는 모양인데 이 코드 상에서는 0.0 값이 들어있어서 0이 곱해져서 작동 안한 거)
tay, hay, var가 작동하는데, vx, vy는 점이 매 프레임마다 이동하는 속도인 듯.
tay, hay는 vx, vy에 쓰일 기준 값, var는 랜덤 범위로 vx, vy에 더할 ~±α에서 α의 크기를 지정.
물감 흩뿌리는 걸 구현한 것으로 보임.
으왕노무오료오르앙...ㅠ^ㅠ요미고눙ㄱr릐뱅그릐뱅그릐@_@
멋졍~
와 카페에서 코드 공부하다가 이제 봤네요 너무 감사합니다 어떻게 보답을 해드려야 하나요 ㅠㅠㅠㅠ 진짜 너무너무 감사합니다 ㅜㅜㅜㅜㅜ 바쁘실 것 같은데 ㅠㅠ
http://dblack.tk
커뮤니티 사이트 입니다 많은 이용 부탁 드립니다.