wxgame2를 개선 하고 있습니다.
By SeukWon Kang
새로 바뀐 스크린 샷
client/server 실행법
서버는 인자없이 그냥 실행하면 됩니다. python wxgame2server.py 또는 이번 C/S 분리의 목적중 하나인 wxpython 코드 제거로 wxpython코드가 서버에는 없기 때문에 pypy를 사용할 수도 있습니다.
클라이언트 실행 python wxgame2client.py -s serverip -t teamname -s 는 접속할 서버의 주소, port는 고정입니다. -t 는 클라이언트 AI의 팀 이름 -t 옵션이 생략되면 서버에 observer mode로 접속합니다. ( 서버가 보내주는 정보를 화면에 표시만 하는 모드 ) 각 팀은 랜덤한 teamcolor를 가지며 그 color대로 표시됩니다.
수정 사항들 기존에 사용하던 정체 모를 ( 어디서 가져왔는지 기억나지 않는) 리소스들을 빼는 작업 - 진행중 ( 제 리눅스 머신에서 찾은 것이니 문제가 될 수지는 적겠지만 그래도 정리하는게 좋겠지요.)
UI 가 없는 AI client 지원 관찰자 모드 지원
대규모 클라이언트 지원을 위한 준비작업 - 팀 이미지 리소스 제한 으로 8개 이상지원 불가능하던 것을 24bit 개로 확장 단일 grey 이미지를 로딩시 scale 과 AdjustChannels 를 사용 team color에 맞게 수정 이에 따라 각 오브젝트의 크기도 실제 collisionCricle 크기에 맞게 되었습니다. 여러 장의 이미지로 animate 하던 것도 image rotate 를 사용 로딩시 생성하게 수정.
gimp로 간단히 작업해서 만들었습니다. ^^
시각적 장식이자 방해물인 구름 재추가( 예전에 있다가 뺀 것을 정리해서 다시 넣었습니다. )
리소스 로드 코드 수정.
네트웍 thread 쪽 설계 재구성으로 cpu 사용문제 해결 - 대규모 클라이언트 지원 준비 작업.
profile을 사용해서 성능 개선( 별 생각 없이 쓴 deepcopy 가 상당한 시간을 쓰더군요.) 추가로 이야기하면 꽤 복잡한 dictionary 구조에 오브젝트 레퍼런스를 많이 사용하고 있습니다. 그런데 이 부분에서 object 의 reference가 까딱 잘못하면 꼬입니다. 그래서 deepcopy를 사용하고 있었는데 프로파일링을 해보니 성능에 문제가 되더군요. 결국 다 찾아서 수정했습니다.
제가 성능 개선에 사용했는 profile 방법 메모( 소스 코드 내 주석에도 적었지만) 클라이언트를 실행할때 python -m cProfile -o profile.txt wxgame2client.py -t teama 종료후 프로파일을 볼때 python을 실행하고 import pstats pstats.Stats(‘profile.txt’).strip_dirs().sort_stats(’tottime’).print_stats(40)
언제나 처럼 모든 코드와 리소스는 github에 있습니다.