메뉴 건너뛰기

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

Love2D 엔진은 Lua 기반이라 좋던 싫던 우리는 이미 Lua를 쓰고 있는 것입니다.

그래서 원활한 개발을 원한다면 Lua 언어를 알아두는 것이 좋습니다.

어 차피 Lua라는 게 알아먹기 쉽고 가벼우므로 게임 업게에 종사하는 디자이너 혹은 작가, 게임 디자이너가 Lua나 Python 같은 가벼운 스크립트 언어를 하나 정도 알고 있다면 당신의 아이디어를 실제로 구현하는 프로그래머와 좀 더 원활한 의사소통이 가능하므로 하나쯤 익혀두면 좋겠습니다.


Lua는 게임제작 외에도 게임의 Mod 제작(이것도 게임제작인가?), 리눅스 시스템의 관리, 웹 프로그래밍, GUI를 가진 윈도우 프로그램도 만들 수 있고 C나 C++에 붙어서 돌아가기도(사실 이 경우가 더 많다고 합니다) 하기 때문에 정말 쓸 데가 많다고 합니다.


잡설 이만 잘라먹고 시작합니다.


Lua를 실행하는 법은 자세히 안 다룹니다.

일단 설치파일을 실행하던 리눅스에서 apt-get을 하던 루아를 받습니다.

리눅스에서: lua 파일이름.lua

Windows에서: Lua 경로로 간다(환경변수를 등록한다) -> lua 파일이름.lua

Mac에서: 무다다! 무다무다무다무다무다! 시간은 움직이기 시작한다!


어차피 Lua를 설치할 필요는 없습니다. 정말 이 요약글을 보며 하나하나 실습하고 싶어하는 모범생이 아닌 이상. Love2D가 목적이지 Lua 자체가 목적은 아니니까요. Lua는 살짝 맛만 볼 겁니다.


일단 뭔가 내뱉는 녀석이다. 이런저런 처리를 하고 결과를 출력하는 데 쓴다.

print("출력할 것")

"" 안은 문자열. 변수도 출력할 수 있다. 변수가 뭐냐면 나중에 배우자.


그럼 입력을 받자. 사용자가 뭘 넣어줘야 프로그램이 결과를 돌려주니까.

io.read()

이러면 값을 넣는다. 하지만 입력받는것만으로는 뭘 할 수 없다. 어딘가에 저장하고, 처리해서 다시 돌려줘야 한다.


자, 입력과 출력을 배웠다. 첫 프로그램을 만들어보자. Hello Word 따위는 시시하니까 다른 걸 만들자.

입력한 걸 바로 출력해 돌려주는 녀석이다.


print(io.read())


한 줄이다.

실행해 보라.


print("io.read()")가 아니다. 그러면 입력을 받지 않고 io.read()를 문자열로 받아들여 버린다.

'읽어들인 입력을 출력하라'는 명령을 내리는 것이 아닌 'io.read()라고 출력하라.' 라고 컴퓨터에게 명령해버리는 것이다. 이래선 안 된다.


시 시하겠지만 이것으로 첫 프로그램이 완성되었다. 더 나아가면 그래픽으로 그림을 그려 출력할 수도 있고, 출력을 네트워크로 보낼 수도 있고, 파일로도 입력 받을 수 있고, GUI 창을 만들어서 입력받을수도 있고, 기타 등등이 가능하다. 더 나아가는 공부는 다른 곳에 많다. 여기선 Love2D를 막힘 없이 사용할 수 있는 정도의 Lua 문법만 알아볼 것이다.


그럼 다음에는 들어온 데이터를 어떻게던 처리해보도록 한다.

루아의 코딩 스타일, 주석 변수, 수치의 연산을 배우고, 가능하면 제어문이나 문자열의 처리 등도 같이 공부해 보자.

어려운 말이 마구 쏟아져 나오는데.. 같이 공부해 나가자. 궁금한 것은 덧글로 달아 같이 배워 봅시다.

조회 수 :
705
등록일 :
2013.09.17
08:21:34 (*.209.135.92)
엮인글 :
게시글 주소 :
https://hondoom.com/zbxe/index.php?mid=study&document_srl=703431
List of Articles
번호 제목 글쓴이 조회 수sort 추천 수 날짜 최근 수정일
65 [Lua] 테이블 노루발 1422   2013-09-17 2013-09-17 08:13
이것은 Lua 문법입니다. Love2D와는 관계가 없습니다.  안녕하세요, 노루발입니다. 오늘은 테이블에 대해서 설명을 해보겠습니다.   테이블이란 쉽게 말해 변수를 묶은 겁니다. Lua상에서 뭔가 쌈빡하게 테이블을 쓰는 법도 있는 듯 하지만 저는 그냥 타 언어...  
64 중력 처리할때 캐릭터가 낍니다. [2] ㅁㄴㅇㄹ 1395   2012-02-12 2012-02-13 00:59
플랫폼 게임에서 중력 처리시 발판과 캐릭터가 충돌하면 더 이상 캐릭터가 밑으로 떨어지지 않게 했습니다. 그런데 캐릭터와 발판이 정상적이지 않게 충돌할 경우(점프했을 때 머리와 발판이 충돌한다던가) 캐릭터가 발판에 낍니다. 어떻게 발판의 처리를 다르...  
63 Lua 소코반 EX: 그래픽 준비 노루발 1084   2013-09-18 2013-09-18 08:00
안녕하세요, 노루발입니다. 얼마 전 만든 Lua 소코반을 게임다운 게임을 만들기 위해 그래픽을 씌워보려고 합니다. 저번에 한 Love2D로 살펴본 뭐가 뭔지 모르는 복잡한 그리기 함수들도 사실은 모두가 소코반을 그래픽으로 만들기 위한 훼이크였습니다. 후후....  
62 혼돈형한테 질문 (페인트샾 관련) [2] file 장펭돌 939   2007-11-19 2008-03-17 04:37
 
61 RPG Maker MV 로컬라이징 방법 file 똥똥배 915   2015-10-27 2015-10-27 05:51
 
60 Lua 소코반 EX: 포팅: 3 (머나먼 여행길 안녕 친구여) 노루발 913   2013-09-18 2013-09-18 08:05
안녕하세요, 노루발입니다. 오늘로 그래픽 소코반을 끝내기로 했습니다. 아쉽지만 끝내야죠. 일단 걸음수와 이것저것을 뿌려주기로 합니다. 그런데 이미 화면이 꽉 차버려서 뿌려줄 공간이 없네요... 없으면 만들면 되지. 창을 늘립시다. conf.lua를 수정. fun...  
59 Lua 소코반 EX: 포팅: 1 노루발 856   2013-09-18 2013-09-18 08:03
-- 플레이어 위치를 저장하는 변수 -- 초기 시작지점은 5, 5로 설정. playerx = 5 playery = 5 -- 박스의 위치를 저장하는 배열. box = {} -- 박스 목표 지점의 위치를 저장하는 배열. goal = {} -- 움직인 횟수 저장 moves = 0 -- 맵 데이터를 저장하는 8*8의...  
58 Lua 소코반: 맵을 뿌리자. 노루발 833   2013-09-17 2013-09-17 08:29
-- 맵 데이터를 저장하는 8*8의 2차원 배열 Map 생성 map = {} for a = 1, 8 do     map[a] = {}     for b = 1, 8 do         map[a][b] = 0     end end -- 맵 데이터 초기화 map[1][1] = 1 map[1][2] = 1 map[1][3] = 1 map[1][4] = 1 map[1][5] = 1 map[1]...  
57 Lua 소코반 EX: 포팅: 2 (키가 눌리면 이동하게 해 보자) 노루발 832   2013-09-18 2013-09-18 08:04
-- 플레이어 위치를 저장하는 변수 -- 초기 시작지점은 5, 5로 설정. playerx = 5 playery = 5 -- 박스의 위치를 저장하는 배열. box = {} -- 박스 목표 지점의 위치를 저장하는 배열. goal = {} -- 움직인 횟수 저장 moves = 0 -- 맵 데이터를 저장하는 8*8의...  
56 이미지 그리는 방법: 2편. 부제: 쿼드! 노루발 821   2013-09-17 2013-09-17 08:37
(역시 이미지가 중요한 글인데 이미지가 모두 잘렸습니다. 문화재 손실에 슬픔을 표합니다.) Quad에 대해 알아본댔습니다. 쿼드? 쿼드가 뭐지? 생소한 개념인데? 하나의 큰 그림을 로드해서 쪼개서 쓰는 겁니다. 타일 깔듯이요. 우리가 포켓몬스터 같은 걸 하...  
55 이미지 그리는 방법 1편 노루발 812   2013-09-17 2013-09-17 08:35
이미지가 중요한 글인데 이미지가 다 짤렸네요. 압박. 준비물은 일단 이미지입니다. 예제 이미지로 럭키♥를 준비했습니다. 럭키! 럭키! 럭키! 와아아아! 어쨌든 이 럭키를 가지고 예제를 진행하겠습니다! 와아아! 글쓸 맛 난다! 일단 Love2D에서 뭔가 그린다는...  
54 cocos2d-x 2.2.2 UILabelBMFont 메모리 누수 해결법 [2] 똥똥배 783   2014-03-10 2014-05-31 19:30
만약 CocoStudio로 UI를 만든 후 GUIReader를 써서 지정 폰트를 불러오면 엔진 버그로 인해서 메모리 누수가 생긴다. 이걸 고치려면 LabelBMFont.cpp를 아래와 같이 수정해야 한다. void LabelBMFont::setFntFile(const char *fileName) { if (!fileName || st...  
53 Cocostudio의 ActionNode 메모리 누수 해결법(cocos2d-x 2.2.2) [2] 똥똥배 776   2014-03-09 2014-05-31 19:26
Cocostudio로 액션을 만들고 액션매니저를 이용해서 ActionManager::shareManager()->playActionByName 아래와 같이 실행을 해주면 액션이 실행되는 경우 메모리 누수가 발생한다. (액션을 실행하지 않았을 때는 메모리 누수 없음) 이 메모리 누수를 없애려면 ...  
52 게임의 기본 설정을 담당하는 love.conf 노루발 763   2013-09-17 2013-09-17 08:39
안녕하세요, 노루발입니다. 여태까지 이것저것 많이 Love2D를 다뤄와서 제가 만든 소코반에 그래픽을 씌울 수준까지 되었지만 (물론 키 입력은 논외로 치죠, 나중에 다룰게요.) 아직 이걸로 정식 게임을 만든다면 모자라도 한참 모자랍니다. 창의 이름도 실행...  
51 Lua 소코반: 플레이어를 그리고 움직이게 해보자 노루발 758   2013-09-17 2013-09-17 08:30
오늘자 전체 코드입니다. 어제처럼 바뀐 부분만 설명해 봅니다. -- 플레이어 위치를 저장하는 변수 -- 초기 시작지점은 5, 5로 설정. playerx = 5 playery = 5 -- 움직인 횟수 저장 moves = 0 -- 맵 데이터를 저장하는 8*8의 2차원 배열 Map 생성 map = {} for...  
50 Lua 소코반: 목표 지점을 만들고, 상자가 모두 옮겨지면 게임을 끝내자! 노루발 754   2013-09-17 2013-09-17 08:33
-- 플레이어 위치를 저장하는 변수 -- 초기 시작지점은 5, 5로 설정. playerx = 5 playery = 5 -- 박스의 위치를 저장하는 배열. box = {} -- 박스 목표 지점의 위치를 저장하는 배열. goal = {} -- 움직인 횟수 저장 moves = 0 -- 맵 데이터를 저장하는 8*8의...  
49 흥크립트 원인불명 버그... [3] file 네모상자 738   2008-02-16 2008-03-17 04:37
 
» Love2D를 사용하기 위한 Lua 강좌: 입출력과 기본 노루발 705   2013-09-17 2013-09-17 08:21
Love2D 엔진은 Lua 기반이라 좋던 싫던 우리는 이미 Lua를 쓰고 있는 것입니다. 그래서 원활한 개발을 원한다면 Lua 언어를 알아두는 것이 좋습니다. 어 차피 Lua라는 게 알아먹기 쉽고 가벼우므로 게임 업게에 종사하는 디자이너 혹은 작가, 게임 디자이너가 ...  
47 Lua 소코반: 벽을 뚫고 나가지 않게 해보자! 노루발 696   2013-09-17 2013-09-17 08:31
전체 코드입니다.슬슬 길어지니 요약글 기능이 필요해진달지.. -- 플레이어 위치를 저장하는 변수 -- 초기 시작지점은 5, 5로 설정. playerx = 5 playery = 5 -- 움직인 횟수 저장 moves = 0 -- 맵 데이터를 저장하는 8*8의 2차원 배열 Map 생성 map = {} for ...  
46 CCTextFieldTTF 0바이트 메모리 누수 버그 해결법 똥똥배 692   2014-01-13 2014-01-13 10:38
CCTextFieldTTF::textFieldWithPlaceHolder("", FONT_NAME, FONT_SIZE); 이런 식으로 텍스트필드를 생성하면 ""가 0바이트라서 해체를 못하고 0바이트 누수가 발생한다. 그냥 스페이스(" ")라도 넣어주면 누수는 발생하지 않는다. 이 버그가 발생하는 버전은 2...