메뉴 건너뛰기

창작에 관련된 질문이나 간단한 팁, 예제를 올리는 곳

이 문제의 해결에 4가지 방법이 나왔다.

물론 환경이나 상황에 따라 더 많은 해결방법이 나올 수 있고,

어떤 것이 답인지는 그때 그때 마다 다른다.


일단 상황부터 정리.

스프라이터를 처리하는 툴에서는 스프라이터 애니메이션을 숫자가 아닌 특정 코멘트를 붙일 수 있고,

그 코멘트를 바탕으로 define이나 enum의 상수값을 뽑아낼 수 있다.

그리고 lua 스크립트에서도 그 값을 쓰려고 한다.

하지만 lua 스크립트는 C헤더를 읽을 수 없고 상수값도 쓰지 못한다.



해결법.1

루아에서 상수값으로 쓸 변수들을 선언하는 파일 하나를 정해두고,

C의 헤더를 따라 하나 씩 추가해 준다.


=> 썩 좋지 않은 방법이다. 변경이 있을 때 마다 수동으로 수정해 줘야 하고,

    그때마다 제대로 연동이 되었을지 무결성에 의심이 들게 된다.


해결법.2

C 헤더에서 상수값을 추출해내는 루아 스크립트를 작성한다.

C 헤더에 변경이 생겼을 때마다 배치 파일같은 것을 실행해서 바로바로 뽑아내는 것이다.


나쁘지 않은 방법이긴 한데,

나의 경험을 말하지면, 이 코드를 찾기 위해서 검색했으나 약간 문제가 있었다.

고칠려고 하니 그것도 수고스럽고,

(프로그래머는 언제나 검색이 먼저다! 누군가 자신과 비슷한 경험을 하고 해결을 시도했을 것이므로

혼자서 해결하려고만 하는 자세는 좋지 않다. 단, 시간이 남아돌고 개인 연습이라면 말리지 않는다.)

적절한 코드를 찾다가 이 방법은 보류하기로 했다.


해결법.3

tolua라는 것이 있다.

C/C++의 헤더는 물론 클래스나 이것저것 다 쓸 수 있게 해주는 것이다.

기능이 멋지긴 한데, 지금 필요한 것은 헤더에서 상수값만 뽑아내는 것이므로 쓸데 없이 무겁다.

그리고 이것 역시 뽑아내기 위해서는 배치 파일을 만들어 이것저것 실행해줘야 한다.

수고는 2와 비슷하다면 가벼운 2를 선택하는 것이 좋을 것이다.


그리고 개인적으로 이것저것 붙여서 프로젝트가 어려워 지는 것은 선호하지 않는다.

어려운 대신 편리하다는 장점은 있겠지만, 자신의 코드를 볼 사람들이 그 코드를 이해하기 위해서는

또 그만큼의 공부를 해야 할 테니까.


해결법.4

이건 상황이 상황인지라 가능했던 방법.

툴에서 애니메이션에 대한 헤더를 뽑아내는 것을 프로그래머가 수정할 수 있었다.

그래서 C용 헤더와 함께 루아에서 쓸 헤더(정확하게는 변수들이 선언된 lua파일)를 같이 뽑게 고친다.

C 헤더 추출 -> lua용 변환이라는 2단계의 작업을 거칠 필요없이,

C 헤더 추출&lua용 코드 추출이 동시에 되며 무결성도 아주 좋다.


만약 이게 안 되었으면 2번 방법을 선택했을 듯.

조회 수 :
3450
등록일 :
2011.05.25
22:23:35 (*.121.150.114)
엮인글 :
게시글 주소 :
https://hondoom.com/zbxe/index.php?mid=study&document_srl=339948
List of Articles
번호 제목 글쓴이 조회 수 추천 수 날짜 최근 수정일sort
25 RPG Maker MV 로컬라이징 방법 file 똥똥배 924   2015-10-27 2015-10-27 05:51
 
24 김프로 이미지 맵 만들기 노루발 393   2015-11-11 2015-11-11 08:05
https://docs.gimp.org/en/plug-in-imagemap.html  
23 Love2d 게임 중간에 광고 표시 [1] 노루발 377   2015-11-12 2015-11-17 00:16
http://love2d.org/forums/viewtopic.php?f=11&t=81224  
22 Love2d DPI 이슈 해결 [3] 노루발 97   2019-06-29 2019-07-01 06:34
이런 love 프로젝트가 있다고 하자. (conf.lua) function love.conf(t) t.window.width = 640 t.window.height = 360 end 창 크기를 640*480으로 설정한 뒤 실행하면 어떻게 보일까? 당연히 창 크기가 640*480 크기로 보여야겠지만 내 컴퓨터에서는 이렇게 보...  
21 Windows To Go와 R-Studio를 이용한 손실된 데이터 복구하기 노루발 89   2020-01-30 2020-01-30 19:52
하기의 복구 방법으로 모든 자료를 100% 복구할 수는 없으므로 자료의 손실 이전에 신뢰성 있고 주기적인 백업이 선행되어야 한다. 준비물: - 부팅 USB 혹은 외장 HDD/SSD - 복구한 자료를 저장할 외부 저장장치 (옵션) - R-Studio https://www.r-studio.com/ ...  
20 Lua 인수로 nil값이 들어왔을 경우 처리하기 노루발 36   2020-11-06 2020-11-06 20:29
or 연산자를 사용한다. 예제 코드: function moveplayer(direction) direction = direction or "nowhere" print("player moved to ".. direction) end moveplayer() --> "player moved to nowhere" moveplayer("north") -- "player moved to north" 이런 코드...  
19 Lua 테이블 안에 함수 저장하기 노루발 28   2020-11-06 2020-11-06 21:07
테이블 안에 함수를 저장할 수 있다. function move(object, direction) print(object .. " moved to ".. direction) end scheduler = {} scheduler.queue = {} function scheduler.newentry(action, args) scheduler.queue[#scheduler.queue + 1] = {} schedu...  
18 Lua 클래스 만들고 활용하기 노루발 24   2020-11-06 2020-11-06 22:43
------------------------ stairs.lua ------------------------ Stairs = {} function Stairs:new(x, y, floor, direction, locked) local newStairs = {x = x, y = y, floor = floor, direction = direction, locked = locked} self.__index = self retur...  
17 특정좌표를 기준으로 zoom in/zoom out하기 노루발 59   2020-11-11 2020-11-11 01:22
-- x,y - 줌인/줌아웃시 기준점 (좌표 이동이나 scale에 영향받지 않는 순수한 화면 좌표) -- scale - 현재 scale(1:그대로 0.5:1/2 사이즈 2:2배 사이즈) -- scaleinc - 얼마나 scale을 변화시킬것인가 (I usually use 0.1 or -0.1) -- camx - 카메라의 x좌표...  
16 love2d에서 안드로이드 터치 제스처 인식하기 노루발 20   2020-11-12 2020-11-12 00:38
-- 안드로이드/iOS 등등의 터치스크린 입력을 받는 기기에서는 총 3가지의 콜백 함수를 사용한다: -- love.touchpressed / love.touchmoved / love.touchreleased -- 다만 위 3가지 함수는 마우스 클릭으로는 발생하지 않으므로 추가적인 처리가 필요하다. -- ...  
15 이쁜 눈나가 유니티 개발 알려주는 재생목록 노루발 37   2020-11-12 2020-11-12 05:59
https://www.youtube.com/watch?v=Ur2jN6_si6c&list=PLi-ukGVOag_1lNphWV5S-xxWDe3XANpyE https://www.youtube.com/watch?v=sJClf9S7AMA&list=PLi-ukGVOag_0HR09oTs966Wt81IYYXlFH 유니티를 배우고 있는 건 아닌데 만들어진 라이브러리를 다루는게 아...  
14 턴 기반 시스템 구현에 대한 글 [4] 노루발 440   2020-11-14 2020-11-18 05:49
플레이어와 NPC들의 모든 행동에 1턴이 소요된다면 턴 기반 시스템의 구현이 쉽겠지만 (사실 엄청 쉽지는 않다... 게임엔진은 실시간으로 돌아가는데 행동은 턴으로 제약해야 하니) 전략성을 요구하기 위해 행동에 소모되는 턴을 다르게 설정한다면 다소 생각...  
13 루아 스타일 가이드 노루발 34   2020-11-19 2020-11-19 00:58
http://lua-users.org/wiki/LuaStyleGuide https://github.com/Olivine-Labs/lua-style-guide  
12 Love2d 이미지 하얗게 그리기 노루발 42   2020-11-23 2020-11-23 04:11
아래와 같은 코드를 사용해 이미지에 색상을 적용할 수 있다. hamster = love.graphics.newImage("hamster.png") love.graphics.setColor(1, 0, 0) -- 빨간색으로 그리기 love.graphics.draw(hamster) love.graphics.setColor(1, 1, 1) 하지만 이미지를 하얗게...  
11 Love2d로 만든 로그라이크 예제 노루발 253   2020-11-30 2020-11-30 22:54
https://gitlab.com/Jalexander39/roguelikedev-does-the-complete-roguelike-tutorial 이걸 왜 여태 몰랐지...  
10 Oracle cloud에 Nginx/MariaDB 설치하기 노루발 93   2020-12-06 2020-12-06 20:19
https://itreport.tistory.com/624  
9 리캡챠 적용 [1] 노루발 11   2021-01-08 2021-01-11 12:15
XE 회원가입 시 구글 리캡챠 인증 추가하기 : 네이버 블로그 (naver.com)  
8 자동화된 Lua 스크립트의 문서화 - LDoc 노루발 43230   2021-01-11 2021-01-11 11:53
다운로드 https://github.com/lunarmodules/LDoc penlight 설치가 필요 luarocks install penlight 프로젝트가 있는 폴더에서 아래의 명령행을 실행 lua /path/to/ldoc/ldoc.lua $* https://stevedonovan.github.io/ldoc/manual/doc.md.html 문서 코멘트라는걸...  
7 Love2d 게임 안드로이드로 패키징하기 노루발 48   2021-01-11 2021-02-21 01:45
http://hondoom.com/zbxe/index.php?mid=study&document_srl=797993 버전이 바뀌면서 빌드 방법이 바뀌었기에 다시 정리한다. 1. Android studio 설치 https://developer.android.com/studio/index.html SDK 플랫폼 - Android 11.0 [API 30] SDK 버전 - An...  
6 certbot을 이용한 HTTPS 인증서 발급 및 적용 노루발 18   2021-01-12 2021-01-12 16:57
snap 설치 및 업데이트 sudo snap install core; sudo snap refresh core certbot 설치 sudo snap install --classic certbot 심볼릭 링크 생성 sudo ln -s /snap/bin/certbot /usr/bin/certbot nginx에 맞춰 자동 설정 sudo certbot --nginx 알아서 다 해주기...