본문 바로가기

렌파이/GUI 꾸미기

드래그&드롭 사용법 - 드롭 이용하기

기본:
- 드래그를 끌어서 또다른 드래그에 올려놓았을 때, 그러니까 드롭했을 때(또는 되었을 때) 실행할 함수만 만들자.
그 후 드래그에 함수를 적용하면 드래그&드롭으로 인한 상호작용이 발생하게 만들 수 있다.

예제:
아래의 스크립트는 RPG게임에서의 아이템 장착창을 염두에 두고 초단순하게 만들어 본 것이다.


설명:


- 드롭은 같은 드래그그룹에 속한 드래그끼리만 가능하다.
- 드래그의 모양은 child 로 설정한다.
- 드래그, 드롭의 가능 여부는 draggable, droppable 로 설정할 수 있다. 기본값은 둘 다 True로, 상황에 맞에 설정하면 된다.

 이라는 부위에 을 장착할 수 있게 만들어보았으니 이제 그 칼의 공격력이 캐릭터의 능력치에 더해지도록 해야한다.



hand 에 sword가 드롭이 되었을 때 작동할 함수는 대략 위와 같은 형태이다(이 상태 그대로는 작동이 안 된다).
이 함수가 작동되도록 하려면 hand 드래그에 dropped 라는 속성을 적고 그 옆에 함수 이름을 적어주면 된다.



dropped 속성에 함수를 적으면 (drop이 가능한) 드래그와, 드래그에 얹혀진 drag에 관한 정보가 순서대로 해당 함수에 넘어간다. 이제 다시 hand_equipped()함수로 돌아가서 괄호 안을 다음처럼 바꿔준다.



칼의 공격력에 관한 정보는 drag_name에 저장해서 이용할 수 있다. drag_name에는 다양한 자료형(리스트, 문자열, 정수 등)을 적을 수 있다.



다시 함수로 돌아가서 sword의 drag_name을 공격력에 더하도록 만든다.



여기서 drags[0]이라는 건 hand 드래그에 드롭된 첫 번째 드래그를 뜻한다. 여기서는 sword가 첫 번째 드래그이니 attack + drags[0].drag_name을 적으면 attack 이라는 변수에 sword의 drag_name을 더하라는 의미가 된다.


- 드롭은 했는데 뭔가 착착 달라붙는-_-; 느낌이 들지 않는다고 아쉬워하시는 분들은 함수에 다음과 같이 추가하면 된다.

drags[0].snap(drop.x, drop.y, 0.1)

snap은 drag를 특정 위치까지 자동으로 이동시키는 함수이다. 괄호에 입력되어야 할 내용은 차례로 (x, y, 이동 시간).
위의 예에서 drop.x 와 drop.y는 드롭의 위치, 0.1은 드래그가 드롭까지 이동하는 데 걸리는 시간을 나타낸다. 즉 첫 번째 drag를 drop의 x, y 위치로 .1초 걸려 이동시킨다는 뜻이다.

스크립트를 완성하고 시험해보면 어느정도 드래그&드롭이 동작한다는 것을 확인할 수 있을 것이다. 물론 이대로는 문제가 여러가지 있는 상태이므로 필요에 따라 수정해서 사용해야 할 것이다.

바로가기: 렌파이 드래그&드롭 관련 매뉴얼