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를 만든 것과 같은 동작을 수행할 수는 없다.