Atlas
여러 image를 처리하기 위한 방법으로, sprite
로도 알려져 있다.(오호 sprite는 unity에서 낯익다)
application image들을 하나의 큰 image로 group화 하여 request를 줄이는 방식이다. 쉽게 말하면 img1~100을 받을 때 100번 req 해야하는데, 이걸 이어 붙이고 좌표를 보내서 1번의 req로 받겠다!
하나의 큰 atlas 이미지와 각 이미지에 대한 좌표들을 json file로 저장하는 작업을 내부적으로 해준다.
atlas 이미지를 생성하기 위해 pillow library가 필요하며 아래와 같은 명령어로 실행함
python -m kivy.atlas invasion 100 *.png
(basename, size, img list)basename
.png,basename
.atlas(json format) 이 생성됨
atlas 이미지를 사용하기 위해서 kv에서는 source: atlas://src/path/imgfile
와 같이 사용한다.
SoundLoader
kivy에서 sound effect를 사용하기 위해서 SoundLoader를 사용한다.
SoundLoader.load('soundfile.wav')
와 같이 soundfile을 load하면 Sound class를 return하고 이를 .play()
를 통해 재생시킬 수 있다.
Animation
목적지까지 움직이는 것과 같은 간단한 animation을 설정하는데 사용한다.
default로 period를 1초로 갖는다.
on_start
, on_progress
, on_complete
의 3개의 event를 bind 해서 사용한다. 여기서 progress는 진행 정도를 말한다.
animation instance의 parameter는 적용할 widget의 어떤 property도 될 수 있다.
- 이게 무슨말이냐면
Animation(font_size=72, d=2)
같이 font_size를 설정할 수도 있고 property는 다된다는 거다
transition으로 목적지까지의 transition의 모양을 설정할 수 있다.
on_complete
를 통해 두 개의 animation을 연결할 수 있다. 이 방식은 on_complete 즉 종료되면 다른 animation을 실행하도록 하는 방식이다.
Automatic bind
pos: self.parent.pos
를 layout에 선언함으로써 parent가 움직일때, child도 움직이도록 할 수 있다.
- 이렇게 parent가 바뀔 때, child가 따라서 pos가 바뀌게 할 수 있는데, 이 pos의 변화와 parent가 아닌 다른 event에 의한 pos의 변화가 겹쳐서 발생하면 문제가 생길 수 있음. 따라서 parent의 pos 변화를 받도록 하는 widget을 만들고, 실제 widget은 마음대로 움직이도록 함
scheduling
kivy Clock을 import하여 사용한다.
schedule_interval
을 통해 주기적으로 해당 함수를 실행할 수 있다. (단위는 초)
schedule_once
를 통해 한 번만 해당 함수를 실행할 수도 있다.
마찬가지로 unschedule
을 통해 schedule을 해제할 수 있다.
multi-touch
모든 kivy widget과 component는 multi-touch를 지원한다.
kivy는 각 touch에 대한 data들을 제공하여 이를 활용해 multi-touch를 구현할 수 있도록 한다.
collide_point로, touch.pos
가 어디에 있는지를 통해 touch를 구분하도록 한다.
on_touch_down
, on_touch_move
, on_touch_up
은 모두 같은 touch reference를 사용하기 때문에 이를 통해 touch를 구분할 수 있다.
touch.ud
(user data)를 활용하여 down을 어디서 했는지 구분하는 등으로 사용 가능함.
keyboard
Window.request_keyboard
를 통해 keyboard를 받는데, paremeter 중 하나로 keyboard가 closed될 때 수행될 함수를 넣어주며, 보통 unbind를 넣는다.
bind(on_key_down=)
를 통해, key를 누를 때 수행 될 함수를 구현하여 bind 해 준다.
mobile device에서는 keyboard를 사용하지 않아야 할 수도 있다.
어떤 event에 bind
할 수 있는 method의 개수는 제한이 없다.
combining animation
+
, &
을 통해 animation을 combine할 수 있다.
+
: one after another.*
: at the same time.
Animation1 &= Animation2
으로 2가 1과 동시에 수행되도록 할 수 있고,
Animation1 += Animation2
으로 2가 1이 수행된 이후에 수행되도록 할 수 있다.
+
의 동작은 on_complete
로 animation을 연결한 것과 유사하지만, on_complete
에서 animation 두 개를 연결해 loop를 만든 것과 같은 동작을 수행할 수는 없다.