Lua script cpp서 사용하기 Lua 버전

Slides:



Advertisements
Similar presentations
19 장. 보건통계 (Public Health Statistics). 제 1 절. 보건통계의 정의 ▶ 보건통계의 의미 1. 지역사회나 국가의 보건 수준및 보건 상태 2. 보건사업의 필요성 결정 3. 보건입법을 촉구하며, 보건사업에 대한 공공지원을 촉진하게 할수 있음 4.
Advertisements

Copyright © 2006 The McGraw-Hill Companies, Inc. 프로그래밍 언어론 2nd edition Tucker and Noonan 5 장 타입 “ 타입은 컴퓨터 프로그래밍의 효소이다 ; 프로그래밍은 타입을 통해 소화할만한 것이 된다.” 로빈.
프로젝트 보고서 학과 : 임학과 학번 : 성명 : 조성환 Windows 프로그래밍.
Windows Programming 담당교수: 이상정 교수님 발표자 : 김인태 학번 :
3. C++와 객체지향 C++ 코딩 방법 객체 단위로 2 개의 파일 인터페이스 파일 구현파일
명품 C++ 프로그래밍 3장. 클래스와 객체.
2장 닷넷 프레임워크.
C++ Espresso 제1장 기초 사항.
4장 어셈블리 프로그램 작성의 기본 어셈블러 어셈블리 언어 요소 예제 프로그램 데이터 정의
7장 배열 ②.
D. 지뢰찾기 분석 설계 예제.
2014 ITA 8월 강의 C Programming -1주차- C언어 기초 정대진 ( )
에서 ( 탭 – [인기 다운로드 | 모든 다운로드] ) Visual Studio 2015
명품 C++ 13장 예외 처리와 C 언어와의 링크 지정.
5장. 리스트 리스트 학습목표 목록이나 도표처럼 여러 데이터를 관리할 수 있는 자료형을 추상화
2주 실습강의 Java의 기본문법(1) 인공지능연구실.
8. 객체와 클래스 (기본).
Power Java 제4장 자바 프로그래밍 기초.
10장 객체-지향 프로그래밍 II ©창병모.
논리회로 및 실험 C++을 이용한 논리회로 기초 실습
화면(UI) 기반 도메인모델 작성 2014년 8월.
이쁜 코드 작성하기 마이에트 레이더즈팀 중원.
6. 기본 클래스 프로그래밍 6 컴퓨터공학과 신동일.
윤성우의 열혈 C++ 프로그래밍 윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 03. 클래스의 기본.
구현 기능 목록 1. Pipeline Submission 기능
C ++ 프로그래밍 시작.
This, static, final 지정 예약어 자바 4대 중첩 클래스
C++ 개요 객체지향 윈도우즈 프로그래밍 한국성서대학교 유일선
시스템 분석 및 설계.
스택(Stack) 김진수
12 검색.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
목차 INDEX 1. 회원가입 및 로그인 2. 업체정보 3. 제조검사 신청 4. 인보이스 5. 검사진행현황(현장검사 신청)
C언어 프로그래밍의 이해 Ch13. 선행처리기와 주석문.
자바의 신 Volume 1 1부(1~3장) 자바의 신 메인 홈 : 자바의 신 페이스북: 자바의 신 문제 풀이 :
Ch.1 Iterator Pattern <<interface>> Aggregate +iterator
Database Programing 이름 : 김 수 종 학번 :
가상함수와 추상 클래스.
메소드와 클래스 정의 및 문제 풀이 Method and Class Define and Problem Solve
게임인공지능 제 6 장 스크립트 2008년 5월 6일.
Chap. 14 성능향상시키기 PS Lab. 이지연.
[INA470] Java Programming Youn-Hee Han
컴퓨터공학실습(I) 3주 인공지능연구실.
Java IT응용시스템공학과 김형진 교수 5장. 객체지향 개념 public class SumTest {
Chap02 객체 지향 개념 2.1 객체지향(object-oriented)과 절차지향(procedural-oriented)
JA A V W. 04.
프로젝트 포트폴리오 요약 프로젝트 종류 프로젝트 이력 역할 주요 기술 : Windows System Application
2d game pRogramming 1차 발표 이재남.
Chapter 4 변수 및 바인딩.
작성일 참고서적 – Programing Game AI by Example
Chapter 11 해쉬(Hash) SANGJI University Kwangman KO
제 11장. 템플릿과 STL 학기 프로그래밍언어및실습 (C++).
JVM의 구조와 메모리 모델 JVM의 내부 구조 클래스 파일 클래스 로더 메소드(method) 영역 힙(heap) 영역
자바 5.0 프로그래밍.
이번엔 핵엔슬래시 최명근.
6장 클래스(상속).
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
2015년 2학년 1반.
컴퓨터 프로그래밍 기초 - 11th : 파일 입출력 및 구조체 -
Java 5장. 객체지향 개념 public class SumTest {
“경상북도 산업체, (예비)스타트업, 연구기관 엔지니어를
캡슐화 (Encapsulation) 두원공과대학 소프트웨어개발과 이 원 주.
▶서류관리 프로그램 1. 로그인….2 2. 서류등록 … 서류도착 서류스티커발행
실습과제 1번 /* 1. 멤버 변수로 반경 radius를 갖고, 그 값을 모니터에 출력하는
교육 내용 OMRON SYSMAC Gateway(SGW) 설치 INDEX 제어 프로그램 설치
책을 읽읍시다  탈향 진지하게 설명해드림 1303 김소희 1309박지호 1315이지수.
MFC 응용 프로그램 구조 두 개의 윈도우로 구성된 일반적인 MFC 프로그램 프레임 윈도우
C++ 언어의 특징
2016년 제1차 운영위원회 평택시건강가정 ∙다문화가족지원센터
Python 기본.
Presentation transcript:

Lua script cpp서 사용하기 Lua 5.1.2 버전 작성일 2007.07.16 참고서적 – Programing Game AI by Example 작성자 : 10thP김성재 Lua script cpp서 사용하기

Lua와 Cpp 간의 인터페이스 하는 원리 1. C / C++과 인터페이스 하기

1. C / C++과 인터페이스 하기 직접적으로 data를 소통 할 수 없을 만큼 Cpp과 Lua는 서로 다르다. 그래서 Lua와 Cpp는 virtual stack을 사용해 data를 간접적으로 주고 받는다. Virtual stack은 스크립트의 요구에 따라 커지거나 줄어 들수 있다. (기본크기는20이다. Lua.h에 정의되어있음)

Lua와 Cpp가 data를 주고받는과정 Name = “Creator” 1. c++ 함수는 문자열 Name를 Lua Stack에 넣는다. 2.Lua는 Stack을 읽고 문자열 Name를 찾는다 3.Lua는 전역 테이블에서 Name의 값을 찾고 Name에 지정된값 “Creator”를 Stack에 넣는다. 4.C++ 함수는 문자열 “Creator”를 Stack의 맨위에서 가져간다 다른 어떤것을 해도 과정이 복잡 해질 수 있어도 본질적으로는 같다.

Lua Stack의 index -1이 최상위이며, 1이 최하위 이다. 양수값을 사용하려면 스택의 크기를 알아야 하므로 음수 값을 사용 하는 것이 더 편하다.

2. Lua Script로 부터 전역변수 얻어오기 기본적인 방법으로 data를 뽑아내기. 위 방법을 함수화 하여 쉽게 data를 뽑아내기. 2. Lua Script로 부터 전역변수 얻어오기

2. Lua Script로 부터 전역변수 얻어오기

2. Lua Script로 부터 전역변수 얻어오기 이전 구문이 위의 내용으로 축약이 가능하다 Data를 뽑는 기능은 이미 만들어져 있는 함수들이 있다. (제대로 안돌아가는 부분은 개인적으로 수정했음) 지원하는 함수

2. Lua Script로 부터 전역변수 얻어오기 1번 예제를 살펴보고, 사용한다 0번 예제와 같은 방식이 궁금하다면 LuaHelperFunction.h를 살펴보자 Script 파일은 “Script.lua”이다. 1번 예제서 다음과 데이터들을 뽑아내는 예제가 있다. 정수, 실수(double), 문자, 문자열, bool Table , Associate Table로 부터 data 뽑기 이것을 활용하면 최소한 게임의 속성값들에 대한 조율이 가능하다.

Cpp에서 사용하는 함수를 Lua 노출하여 사용할수 있다. 이 방법을 알아보자.

3. Cpp의 함수를 Lua에서 사용하기 Lua에서 사용할 함수를 등록하는 부분 (두 함수의 색이 다른것은 신경쓰지 말것) 함수 등록시, 첫 인자는 LuaState, 둘째는 Lua서 사용할 함수이름, 셋째는 Cpp에 있는 함수이름

3. Cpp의 함수를 Lua에서 사용하기 일반적으로 Lua에서 사용되는 함수는 위와 같이 return 자료형 int, 인자 lua_State*, 이어야 하며 return 값은 Lua에서 return 받을 인자의 개수 이다.

3. Cpp의 함수를 Lua에서 사용하기 Lua에서 인자를 넘겨주는 함수라 해도 방금전에 설명했던 함수형태와 같다. 인자값은 위와 같이 Lua Stack을 이용해 값을 전달받고 사용한다.

3. Cpp의 함수를 Lua에서 사용하기

4. LuaBind Class를 사용하기 위해서 사용한다. Luabind를 책에는, 미사어구들을 붙여놨지만… 개인적으론, Lua의 지옥은 여기서 부터였다. Orz 4. LuaBind

(0). Luabind 설정하기 Luabind를 사용하기 위해서 몇가지 설정해야 할것들이 있다. Lua,Boost, Luabind와 관련된 파일들이다. 직접 프로젝트에 추가시켜도 좋고 (예제들은 직접적으로 프로젝트에 다 추가했음) 옵션에서 한번 설정으로 쉽게 하는 방법이 있다. 개인적으로는 후자를 추천한다. 지금 이곳에 적는 기준은 닷넷 2003 기준이다.

A.포함 디렉토리, 라이브러리 디렉토리 설정 C. Luabind 코드 추가 Luabind 코드를 Lib 로 만들어 사용하는방법 소스코드를 프로젝트에 직접 추가하여 사용하는 방법중 하나를 택하여 쓴다.

A.프로젝트에 직접 추가하는 방법 내용 ../common; ../common/boost_1_33_1; ../common/luabind; ../common/lua5_1_2_Win32_vc7_lib/include

A.프로젝트에 직접 추가하는 방법 내용 ../common/lua5_1_2_Win32_vc7_lib

B.한방에 해결하는 방법

B.포함 파일

B.라이브러리 파일

C. Luabind 코드 추가하기 A, 나 B 방법을 통해, 폴더를 지정했으리라 생각한다. 다음은 할것은 아래에 있다. \Common\Luabind\src에 있는 모든 소스를 추가해서 사용하던지, 이 소스를 lib로 만들어 사용해야한다. \Common\lua5_1_2_Win32_vc7_lib\LuaBindFiles.lib 로 만들어 놨으니 이것을 추가해도된다. 예제는 이것을 사용한다 ( #pragma comment (lib,”LuaBindFiles.lib”) )

C. Luabind 코드 추가하기 이전 방법을 택했으면, 이부분은 건너 뛰어도 좋다 (소스를 추가 하는 방법) 이전 방법을 택했으면, 이부분은 건너 뛰어도 좋다 (소스를 추가 하는 방법) 단점이 소스가 길어지면, 컴파일 하는데 2분이 걸리기도 한다. debug 폴더 용량이, 100메가를 넘기도 한다. (simple soccer를 스크립트로 바꾸는데 겪었던 경험)

(1). 함수 노출

(1). 함수 노출 일단 본문 부터 살펴보자 인자 데이터형 Return 형 lua_State* 인자 데이터형 Return 형 lua_State* module 내의 구문이 함수 노출 하는 부분

각 함수가 어떻게 노출되고 있는지, 이전 페이지를 살펴보며 확인해 보기 바란다. (1). 함수 노출 각 함수가 어떻게 노출되고 있는지, 이전 페이지를 살펴보며 확인해 보기 바란다.

(1). 함수 노출 스크립트 소스와 실행 부분

(2). Class 노출

(2). Class 노출 멤버 변수 접근법 메소드 접근법 어떤 class 객체의 이름이 instance라고 하자 이 객체는 attribute 라는 멤버 변수를 가졌고, method() 라는 메소드(멤버함수)를 가졌다고 예를 들자. 이들을 접근 하는 방법은 다음과 같다. 멤버 변수 접근법 instance.attribute 메소드 접근법 instance:method()

(2).Class 노출 예제

(2).노출된 Class의 내용

(2).노출된 Class의 내용

(2). 예제 Script 내용

(3).Script에서 Class 정의하기

(3).Script에서 Class 정의하기 Lua Script에서 Class를 정의하면 모든 class는 접근권한이 기본적으로 public 이다.

(3).Script에서 Class 정의하기 이전까지와 별다른 내용은 없다.

(3). Animal class 정의 스크립트 소스임

(3).Animal class를 상속받는 Pet class 스크립트 소스임

아직 작성하지 못한부분 스크립트를 이용해 FSM을 만든 예제가 있 으나 아직 추가 하지 못했음. 차후에 다시 작성하여 자료를 올리도록 하 겠음(luabind::object 를 사용하는 부분)

D. 주의 사항 개인적으로 아직도 경험이 부족하지만 Luabind를 class와 연동해서 사용할때 #define LUABIND_NO_RTTI 닷넷 2003은 위 define문을 꼭 써주자. (2005는 상관없음) 또한 다른 코드들과 엉켜서 같이 컴파일되면, 해괴한 컴파일 오류를 볼수있음 (libcmt.lib를 무시하는것으로 어떤것은 해결이되지만, 안되는 경우도 있음)

D. 주의 사항 Class , 함수, 변수 등등 너무 많은 것들을 (대략 400라인정도) Luabind를 이용해 노출해주면 아래와 같은 Error를 볼수있다. (아직 해결책은 찾지 못했음)

D. 주의 사항 luabind::object를 사용해서 연관테이블로 함수를 사용할경우 인자값은 1개만 가능하다. 2개이상일경우에는 컴파일시 에러를 내버린다.