lua의 파일을 데이터 구조로 사용하기 위해서 table을 사용할려고 했다.
책을 제대로 보지 못하고 했는지 모르지만.. ^^ 암튼 처음 할려니 어렵다.
그래서 아래와 같이 설정해봤다.
resid = {} --테이블을 설정
//방법1
resid[1].id = 10
//방법2
resid.id = 10
//방법3
function ResIDInit()
--배열을 초기화 할려면 여기서 for문을 돌려야 한다.
for indx = 1, ResIDCount do
resid[indx] = {}
end
end
-----------------------------------------------
결과
> 방법1
- 이 부분은 에러가 난다. print()를 해도 값이 없다고 나온다.
> 방법2
- 이 부분은 에러가 나지 않는다. 정상 동작 한다. 하지만 resid는 배열이 아니라
단순한 구조체 방법을 취하고 있다. 그래서 resid[1].id 이런건 되지 않는다.
> 방법3
- 이 부분이 정답이다. table을 만들고 그 테이블이 배열구조를 가지게 할려면
초기화를 해줘야 한다.
------------------------------------------------
참조할 코드
--=======================================
-- function: EnemyInit()
-- author: Nick Carlson
-- created: February 11, 2005
-- returns: nothing (process)
-- descrip: sets up initial enemies
--=======================================
function EnemyInit()
enemyCount = 5 --Number of enemies in the game
myEnemies = {} --Creates myEnemies table
--Creates table, one entry per potential enemy
for indx = 1,enemyCount do
--Creates a table to hold the data for each enemy
myEnemies[indx] = {}
--Now initialize the enemy
EnemyRespawn(indx)
end
end
--=======================================
-- function: EnemyRespawn(indx)
-- author: Nick Carlson
-- created: February 11, 2005
-- returns: nothing (process)
-- descrip: fills in enemy data given an index to the myEnemies table
--=======================================
function EnemyRespawn(indx)
--Fills/refills myEnemies table according to indx
--indx is the myEnemies table index assigned to the enemy
--Initial values
myEnemies[indx].XTHRUST = 0 --Thrust along the x-axis (#)
myEnemies[indx].YTHRUST = 0 --Thrust along the y-axis (#)
myEnemies[indx].ROT = math.random(1,8) --Rotation of enemy ship (#)
myEnemies[indx].ID = GUI_RUNTIME_SPRITES + indx + 100 --Starts GUI identification at 101 (#)
myEnemies[indx].E_TOW = "no" --Towing flag (target ID # or "no")
myEnemies[indx].FIRE = 0 --Projectile firing time interval (#)
--Randomly selects side of screen to enter from
entrySide = math.random(1,4)
if entrySide == 1 then --Left
myEnemies[indx].EX = math.random(-40,-20) --X coordinate (#)
myEnemies[indx].EY = math.random(-40,620) --Y coordinate (#)
elseif entrySide == 2 then --Right
myEnemies[indx].EX = math.random(800,820) --X coordinate (#)
myEnemies[indx].EY = math.random(-40,620) --Y coordinate (#)
elseif entrySide == 3 then --Top
myEnemies[indx].EX = math.random(-40,820) --X coordinate (#)
myEnemies[indx].EY = math.random(-40,-20) --Y coordinate (#)
else --Bottom
myEnemies[indx].EX = math.random(-40,820) --X coordinate (#)
myEnemies[indx].EY = math.random(600,620) --Y coordinate (#)
end
--Determines enemy's thrust, reaction, and firing abilities based on time
--Reaction time decreases as REACT decreases (must be at least 1)
--Maximum thrust increases as MAX increases
--enemyFireInterval (#) compared to FIRE to determine enemy shooting (see EnemyFacing(indx) function)
if (timeCounter >= 0) and (timeCounter < 100) then
myEnemies[indx].REACT = 5 --Reaction time interval (#)
myEnemies[indx].MAX = 5 --Maximum thrust (#)
enemyFireInterval = 9
elseif (timeCounter >= 100) and (timeCounter < 200) then
myEnemies[indx].REACT = 4 --Reaction time interval (#)
myEnemies[indx].MAX = 6 --Maximum thrust (#)
enemyFireInterval = 8
elseif (timeCounter >= 200) and (timeCounter < 300) then
myEnemies[indx].REACT = 3 --Reaction time interval (#)
myEnemies[indx].MAX = 7 --Maximum thrust (#)
enemyFireInterval = 7
elseif (timeCounter >= 300) and (timeCounter < 400) then
myEnemies[indx].REACT = 2 --Reaction time interval (#)
myEnemies[indx].MAX = 8 --Maximum thrust (#)
enemyFireInterval = 6
elseif (timeCounter >= 400) then
myEnemies[indx].REACT = 1 --Reaction time interval (#)
myEnemies[indx].MAX = 9 --Maximum thrust (#)
enemyFireInterval = 5
end
--Randomly selects the AI type and diplays the proper ship image
myEnemies[indx].TYPE = math.random(1,4) --AI type (1,2,3, or 4)
if myEnemies[indx].TYPE == 1 then
CreateItem(myEnemies[indx].ID, "Sprite", "e1_ship1.bmp")
elseif myEnemies[indx].TYPE == 2 then
CreateItem(myEnemies[indx].ID, "Sprite", "e2_ship1.bmp")
elseif myEnemies[indx].TYPE == 3 then
myEnemies[indx].MAX = 10
CreateItem(myEnemies[indx].ID, "Sprite", "e3_ship1.bmp")
elseif myEnemies[indx].TYPE == 4 then
CreateItem(myEnemies[indx].ID, "Sprite", "e4_ship1.bmp")
end
SetItemPosition(myEnemies[indx].ID, myEnemies[indx].EX, myEnemies[indx].EY, 20, 20)
end