2017-03-09 4 views
0

저는 학년도가 끝날 때까지 학교 프로젝트를 위해 웹 기반 인 Zork 또는 A Hitchhiker's Guide to the Galaxy과 같은 텍스트 기반 게임을 만들고 있습니다. 지금은 파서를 만들었고 게임의 기본 구조가 완성되었습니다. 내 문제는 플레이어가 페이지를 다시로드 한 후에 데이터를 저장해야한다는 것입니다. 사용자가 페이지를로드 할 때마다 전체 Javascript 파일을 저장하고 변경된 버전을로드하려면 어떻게해야합니까?

나는
"content.js는"개체 선언을 포함 등의 분야에서 어떤 플레이어의 위치와 같은 게임에 대한 모든 데이터를 저장 "content.js"라는 자바 스크립트 파일을, 가지고 있고, "onPickup()"과 같은 객체에 해당하는 함수입니다.

일부 기능을 실행하여이 파일을 저장하고 사용자가 페이지를로드 할 때마다 원래 버전이 아닌이 저장된 버전의 "content.js"를로드합니다. 예를 들어 사용자가 특정 지역에서 무언가를 변경 한 경우 진행 상황을 저장하고 해당 페이지를 다시로드하면 변경 사항이 이어집니다.

일반적으로 나는이 모든 객체를 배열에 저장하고 그 배열을 저장하려고합니다.하지만 실제 게임 (스토리, 영역 등) 전에 게임 구조를 만들었 기 때문에 나는 모릅니다 얼마나 많은 것들을 저장해야 할 것인가? 그런 어레이를 생성 할 때 객체 중 하나를 잊어 버리면 오류가 발생하기 쉽다.

"content.js"의 현재 버전을 저장하고 사용자가 저장 한 후 해당 버전을로드하게 할 방법이 있습니까?
는 (참고 :이 프로젝트를 위해 jQuery를 사용하고 있지 않다) : https://www.html5rocks.com/en/features/storage

당신이 뭔가를 할 수 있습니다 : 당신은 HTML5 저장을 살펴해야

+2

로컬 스토리지 또는 쿠키에 저장된 변수를 사용 해본 적이 있습니까? – Paul

+1

한명의 플레이어가 _all_ 사용자에게 영향을주기 위해 저장하지 않는 한, 하나의 JS 파일을 업데이트하는 것은 의미가 없습니다. 해당 사용자의 데이터 만 해당 브라우저에 저장하려면 localStorage를 사용해야합니다. 사용자가 변경 한 데이터를 사용중인 모든 장치에서 사용 가능하게하려면 서버 측에 저장해야하지만 각 사용자마다 개별적으로 저장해야합니다. – CBroe

답변

1

var gamedata = localStorage.getItem("gamedata"); 
// modify your game state 
// ... 
localStorage.setItem("gamedata", gamedata); 

간단한있다 데모 : http://html5demos.com/storage. 값을 입력 한 다음 창을 닫고 동일한 브라우저에서 새 창에서 열면 이전 값이 표시됩니다.

+0

내가 저장하고있는 객체는 매우 복잡하고 많은 배열과 기능을 가진 다른 객체가 포함되어 있으므로 JSON으로 문자열을 변형하려고하면 JSON에서 "순환 구조"에 대한 오류가 발생합니다.내 게임을 완전히 다시하고 데이터를 저장하는 방식을 변경하는 것 이외에는이 오브젝트를 전체적으로 저장하는 방법을 알지 못합니다. – finnty

0

신청서에 대한 염려는 분명히 구분해야합니다. Javascript는 물건을 보관할 장소가 아닙니다. 데이터베이스 지원 서버 측에 API를 추가하여 사용자를 저장하려는 계획이 없다면 Paul이 제시 한 바를 참고하십시오. LocalStorage는 브라우저 자체 데이터베이스이지만 영구적이지 않을 수 있으므로주의해야합니다. 사용자가 정기적으로 해당 데이터를 삭제할 수 있기 때문에 쿠키에도 동일하게 적용됩니다. 진행 클라이언트 측 저장은 데이터가 로컬에 저장되고 편집 될 수 있으므로 부정 행위를 허용 할 수 있습니다. 동일한 저장소의 쿠키에 적용됩니다.

시간이 있다면 서버 측 저장소 사용을 고려하십시오. php 나 다른 서버 측 언어에 익숙하지 않다면 javascript serverside (node.js)를 사용하고 mongo db와 함께 제공되는 유성을 살펴보십시오. 그건 분명히 A + 결과를 귀하의 선생님들에게 감동시킬 것입니다.