| hitTestBounds( )
zim.js는 물리엔진을 사용하지 않는 선에서 '충돌'을 잡아낼 수 있는 기능을 제공한다.
hitTestBouds( )메서드는 오브젝트와 충돌한 객체를 콜벡으로 반환한다.
[코드]
//네번째 타일
const fourth = new Container(stageW/2, stageH/2)
.pos(0, 0, RIGHT, BOTTOM);
const pixel = new Tile(new Rectangle(30, 30, [pink, yellow, green, orange], dark), 9, 5, 4, 4)
.center(fourth);
const eraser = new Rectangle(30, 30, grey, dark)
.pos(pixel.x-30, 0, LEFT, BOTTOM, fourth)
.sha()
.drag();
eraser.on('pressmove', ()=>{
pixel.loop(pixels=>{
if(eraser.hitTestBounds(pixels)){
//pixels.removeFrom();
pixels.alp(0).animate({
wait:2,
props:{alpha:1}
});
stage.update();
}
},true);
});
eraser는 hitTestBounds( )의 반환값에 애니메이팅 효과를 적용함으로써
마치 지우개로 지우는 듯한 기능을 만들 수 있다.
[구현]
|컨테이너 애니메이팅
현재 컨테이너가 순차적으로 나타나는 애니메이팅 코드가 다소 지저분하다.
같은 구문이 반복됨으로써 장황한 느낌이다.
// part5 - animations
ANIMATE = true; //애니메이팅 기능설정
first.animate({
props:{alpha:0},
from:true,
time:0.7
});
second.animate({
props:{alpha:0},
from:true,
time:0.5,
wait:0.4*2
})
three.animate({
props:{alpha:0},
from:true,
time:0.6,
wait:0.5*3
});
fourth.animate({
props:{alpha:0},
from:true,
time:0.6,
wait:0.5*4
})
위의 코드를 9~10줄로 줄여보자.
[코드]
// part5 - animations
ANIMATE = true;
let animTime = 0.7;
let parts = [first, second, third, fourth];
loop(parts, (part, i)=>{
part.animate({
props:{alpha:0},
from:true,
time:animTime,
wait:animTime*i
})
})
loop구문에 컨테이너 데이터를 배열로 넣음으로써
간단하게 컨테이너 애니메이팅 기능을 구사할 수 있다.
'웹개발 자료실 > 웹앱 개발 자바스크립트Code' 카테고리의 다른 글
zim.js 파티클생성 (0) | 2021.02.09 |
---|---|
zim.js 드로잉 기능 (0) | 2021.02.08 |
zim.js 모션패스 적용 (0) | 2021.02.07 |
zim.js 슬라이더 | 다이얼 제작하기 (0) | 2021.02.07 |
zim.js 반복문 (0) | 2021.02.05 |
댓글