2013-11-26 1 views
1

다양한 세계의 이미지 파일 위치 및 다양한 레벨의 레이아웃 정보와 같은 게임 정보 용 SQLite db를 사용하는 코로나 SDK를 사용하여 게임을 만들고 있습니다. 분명히 게임 진행 상황도 저장하기를 원합니다 (예 : 레벨에서 높은 점수, 현재 레벨 상태 저장, 잠금 해제 된 레벨, 인앱 구매 데이터 등)iOS에서 Corona를 사용할 때 내 게임 정보를 두 개의 데이터베이스로 나눌 수 있습니까?

다음 작업을 계획합니다.

• 내 app로 두 개의 SQLite 데이터베이스를 배포하십시오. 하나는 게임 설정 데이터 (이미지 파일, 세계 이름 등) 및 플레이어 진행률 데이터를 저장하는 설정입니다. 플레이어 진행률 데이터베이스에는 시작부터 잠금 해제 된 레벨을 나타 내기 위해 두 행에 이 미리 채워져 있습니다.

• 게임 설정 데이터베이스를 캐시 디렉토리로 복사하고 플레이어 progress db를 Documents Directory로 복사하십시오.

더 효과적인 방법이 있습니까? 코로나는 iOS에서 "백업 안 함"플래그를 지원하지 않으므로 캐시 DB가 메모리 부족으로 인해 제거 될 가능성이 있으며 추가 코드가 있는지 확인하거나 다시 작성해야합니다. 또한 별도의 데이터베이스에서 조인 (Join)과 같은 SQL 작업을 수행하는 것은 약간의 고통입니다.

답변

1

나는 코로나로 응용 프로그램을 만들었습니다. 문서 폴더를 사용하여 게임 진행 상황을 저장할 수 있습니다. 거기에 저장하지 말아야 할 것은 게임 자산 등입니다. 자산 및 코드를 특정 폴더에 배치하면 안됩니다. 폴더 이름을 사용하지 않고 앱의 '루트'폴더에서 직접 액세스 할 수 있습니다. 앱을 사용하는 동안 변경되지 않는 게임에 사용할 항목을 배치 할 수 있습니다. 그러니까 기본적으로, 당신은 더 특별한 일을하려고하지 않는 한 것 :

  • 로드 이미지 코드 방금 자신의 이름을 사용하여 변경하지 않을 SQLite는 데이터베이스. 예 : filedata:copyFile("scores.db", system.ResourceDirectory, "scores.db", system.DocumentsDirectory ,0)

이이 filedata:copyFile 함수의 내용 다음과 같습니다 :

function filedata:copyFile(srcName, srcPath, dstName, dstPath, overwrite) 

local results = true    -- assume no errors 

-- Copy the source file to the destination file 
-- 
local rfilePath = system.pathForFile(srcName, srcPath) 
local wfilePath = system.pathForFile(dstName, dstPath) 

local rfh = io.open(rfilePath, "rb")    
local wfh = io.open(wfilePath, "rb") 
if wfh~=nil then 
    if overwrite==0 then 
     results=false 
     return 
    else 
    end 
end 
--io.close(wfh) 
local wfh = io.open(wfilePath, "wb") 

if not wfh then 
    results = false     -- error 
else 
    -- Read the file from the Resource directory and write it to the destination directory 
    local data = rfh:read("*a") 

    if not data then 
     --print("read error!") 
     results = false  -- error 
    else 
     if not wfh:write(data) then 
      --print("write error!") 
      results = false -- error 
     end 
    end 
end 
    -- Clean up our file handles 
    rfh:close() 
    wfh:close() 

    return results 
end 

그리고 당신은 항상 진행 데이터베이스에 액세스 할 문서 폴더에 local picture = display.newImageRect("mypic.png", 40, 47)

  • 로드 및 저장 진행 데이터 그 내용을 Documents 디렉토리에 저장하십시오. 알다시피, 이것은 제안보다 훨씬 쉽습니다 :)

  • 관련 문제