1. 서브 폴더를 만들지 말아라
- Graphics/Pictures/pic1/... 이런식으로 계속 서브폴더 여러게를 만들면 반드시 느려집니다.
Graphics/Parallaxes를 Graphics/Parallaxes/p1로 만들어서 p1폴더에서 Parallaxe 불러오니 느려지더군요.
아예 Graphics/Parallaxes로 하지말고 Graphics/로 하던가 Graphics폴더가 존재하는 같은 폴더에 픽쳐를 두면
둘 수록 렉이 줄어듭니다.
Cache 모듈쪽으로 가 보면
def self.animation(filename, hue)
load_bitmap("Graphics/Animations/", filename, hue)
end
이 있는데
def self.animation(filename, hue)
load_bitmap("Animations/", filename, hue)
end
이런식으로 Animations 폴더를 밖으로 빼라는 의미죠(사용 파일도 옮겨야 함). 확실히 렉이 줄어듭니다.
2. 동작이미지를 만들때는 세로로 연결하지 말고 가로로 연결하라.
- 왜 인지는 모르겠지만
움직이는 그림을 연결 할 때
동작1
동작2
동작3
.
.
이렇게 연결하는 것 보다
동작1 동작2 동작3 ....
으로 연결해서
스프라이트.비트맵.src_rect.set(i * 128, j * 128, 128, 128)
이런식으로 동작연결을 하는 게 렉이 더 줄어듭니다.
3. 불필요한 업데이트는 삼가라. 필요할때 업데이트를 적절하게 하라.
- 기본 Scene_Base 스크립트 내부를 보면 update_basic 부분에 update_all_windows가 보입니다.
한 프레임마다 update_all_windows를 실행한다는 의미 입니다.
이게 상당히 문제있는 부분 입니다. window같은 경우는 업데이트를 하게 되면 내용물 전체를 삭제하고 다시 내용을
작성하는 식으로 코딩이 되 있기때문에 window내부에 쓴 것이 많거나 큰 비트맵이라도 불러온 경우라면 한 프레임
마다 잡아먹는 렉은 가히.. 상상 이상으로 렉렉 거리게 되죠.
저 update_all_windows 부분을 과감히 삭제할 필요가 있습니다. 그리고 해당 윈도우 내용을 업데이트 할 필요가 있
을 경우만 (해당윈도우.update)를 해 주는게 좋습니다.
비트맵 경우도 마찬가지로 신경쓰면서 스크립트를 작성하는게 중요합니다.
4. 가급적 이미지들을 연결하지 말고 개별적으로 만들어라
- 알만툴 렉을 줄이는데 핵심이라고 할수 있습니다. 불러오기 시간을 줄이는데 탁월합니다.
동작 이미지들은 연결하지 않고 만들면 파일 개수가 많이지는 경우가 생길 수 있으니 연결을 하고 그도 그럴 것이
동작 이미지는 한 이미지 파일을 딱 한 번 불러와서 이미지 부분의 인텍스만 변경하면서 보여주는 것이기에 문제가
없지만, 그 이외의 아이템 이미지들이나 케릭터 얼굴 이미지들은 따로 만드는게 좋습니다.
알만툴의 비트맵을 표시하는 방법이 표시하려는 이미지가 포함된 전체 이미지를 한번 불러오고 그 다음에 시각부분을
설정하여 그 부분만 보여주는 방식 입니다. 그런데 연결된 이미지 파일 크기가 크면 처음 불러올 때 렉이 생깁니다.
얼굴 이미지 같은 경우는 총 8개 얼굴 이미지가 같이 붙어있는데 윈도우에서 표시를 한다고 하면 윈도우를 업데이트
시킬때마다 8개가 붙어있는 파일을 불러오게 되기때문에 그만큼 렉이 생깁니다. 하지만 96*96으로 각각의 얼굴파을을
하나씩으로만 한다면 필요한 캐릭터의 얼굴파일을 불러올 때 8개가 붙어있는 이미지파일보다는 불러오는 렉이 줄어들게
됩니다.
그리고 아이템 이미지 하나의 크기가 24*24인데 IconSet 에 이런게 한 100줄 들어가 있다고 생각해보세요.
24*24크기의 이미지를 한번 불러오려고 2400*2400의 이미지를 일단 불러오게되는 오나전 렉렉한 경우가 생갑니다.
처음부터 24*24크기의 이미지들로만 저장하면 24*24만 불러오게되서 렉이 싹 사라집니다. 근데 아이템 이 경우는
스크립트를 좀 손을 봐야합니다. 하지만 얼굴 이미지 같은 경우는 처음부터 96*96크기로 저장해도 되지요.
5.사용하는 이미지는 게임 시작 전 다 불러오고 class를 나가게 될때 절대 이미지들을
dispose 시키지 말아라.
- 이건 렉을 줄인다기 보다는 게임 중간중간 로딩시간을 없애는데 쓰입니다. 작은 이미지들을 상관이 없지만 만약 용량이 큰 이미지들을 불러오게 될 때에는 게임이 몇초간 멈추게 되죠. 그걸 막기 위한 방법입니다.
Scene_Title 부분의 start에
temp = Cache.picture("그림1")
temp = Cache.system("IconSet")
.
.
.
처럼 한 번씩 불러오고
위 그림들이 사용되는 스크립트를 찾아가서 .bitmap.dispose 을 시행하는 부분을 삭제해버리는 겁니다.
6. 게임을 암호화 시키지 말아라
- 이부분은 확실치는 않습니다. 하지만 오디오 암호화 스크립트를 사용한 적이 있는데 음악을 불러올때마다 끊겼습니다.
그리고 이미지가 큰 경우에도 암호화 시 끊김현상이 발생합니다.
쾌적한 암호화 시스템을 구축하거나 하지 않으면, 기존 주어진 enterbrain 식의 암호화를 사용하면 렉이 발생하는 듯 합
니다. 아니면 데이터 폴더만 압축하는 시스템을 만들던가, 암호화를 원하는 픽쳐 폴더 부분만 한다든지..
사실 개인적으로 판매용 아니고서는 암호화 시키는 것을 별로 좋아하지 않게 생각해서 이런 것 일 수도 있겠지만..
ps.벌써 시간이 이렇게....
두서없이 막 쓰긴 썼는데...
더 있던 것 같지만 지금 생각나는 것이라고 이 정도네요.
확실히 3년간 알만툴 만지만서 습득한 실전 노하우 입니다.
이런 실전 노하우를 바탕으로 나름 쾌적한 60fps 알만툴을 사용중입니다.
또 다른 노하우나 그런거 있으면 공유합시다.
-77er