JS 게임을 다운로드 가능하게하려면 어떻게합니까?


20

HTML과 JavaScript를 같은 .html파일 에 넣을 수는 있지만 이미지는 별도의 파일이어야합니다. 내 마음에 오는 유일한 해결책은 사용자에게 .zip폴더 를 제공하는 것 입니다.

이건 예쁘지 않아요 ... 어떻게하면 되나요?


8
"표준" JS 게임을 다운로드 가능하게 만드는 것이 아닙니다 . 그들은 브라우저에서만 작동합니다. 그것을하는 모호한 방법이있을 수 있지만, 솔직히 그 이유는 무엇입니까? 직무에 적합한 도구를 사용하십시오.
jhocking

답변:


21

dataurl-syntax를 사용하여 HTML 문서에 이미지를 포함 할 수 있습니다.이 이미지를 사용하면 이진 이미지 데이터의 base64 표현을 이미지의 src 속성으로 넣을 수 있습니다. 다른 종류의 미디어 파일에서도 작동합니다.

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAIAAAACUFjqAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAALEgAACxIB0t1+/AAAAAd0SU1FB9EFBAoYMhVvMQIAAAAtSURBVHicY/z//z8DHoBH+v///yy4FDEyMjIwMDDhM3lgpaEuh7gTEzDiDxYA9HEPDF90e5YAAAAASUVORK5CYII=">

CSS 스타일 시트를 사용하면 JavaScript에서 완전히 절차적인 스타일 시트를 작성할 수 있습니다.


물론 base64는 파일 크기를 4 배로
늘려서

10
@TobiasKienzler : 64 * 4 = 256은 단일 바이트를 인코딩하는 데 4 배 많은 데이터가 필요하다는 것을 의미하지는 않지만 각 바이트의 8 개마다 6 비트 (2 ** 6 = 64) 만 사용합니다. 즉, 3 바이트를 인코딩하는 데 4 바이트가 걸리므로 크기가 33 % 증가합니다 (필요한 경우에는 패딩을 계산하지 않음). 거의 4 배가되지 않습니다. 데이터 크기가 4 배로 증가하는 유일한 경우는 2 바이트의 데이터 바이트와 2 개의 패딩 바이트가 필요한 단일 바이트를 인코딩 할 때입니다.
Panda Pajama

2
@PandaPajama 나의 나쁜, 나는 "2/4 = 1/4 낭비 비트로 인해"1/4로 증가 시키려고했다. 어쨌든 내가 실수를 했음에도 불구하고 당신이 얻은 33 %가 맞습니다. 아직도, 그것은 이메일 첨부 파일에서 "유명한"오버 헤드입니다
Tobias Kienzler

1
기본 64 인라인 인코딩이 .wav, .ogg, .m4a 및 일반적으로 모든 파일과 같은 다른 리소스에서 작동합니까?
DrZ214

1
@ DrZ214 시도하지 않았지만 AFAIK는 URL이 작동하는 곳 어디에서나 작동해야합니다.
Philipp

31

대부분의 웹 응용 프로그램은 HTTP 요청을 통해 리소스에 액세스 할 수 있도록 웹 서버가 필요하기 때문에 모든 파일을 .zip 파일에 넣는 것만으로는 효과적인 솔루션이 아닙니다. 일부 시스템에서는 file://URI-scheme을 통해 파일에 액세스 할 수 있지만 보안상의 이유로 모든 곳에서 작동한다고 보장 할 수 없으며 AJAX 요청과 같은 경우에는 실패합니다.

대부분의 인라인 리소스가있는 매우 간단한 앱에서 작동 할 수 있지만 이것은 내가 누군가에게 권장하는 접근법이 아닙니다. 그러나 다음과 같은 대안이 있습니다.

기본 애플리케이션 구축

Node-Webkit을 사용하여 웹 애플리케이션을 기본 앱으로 패키지 할 수 있습니다 . 이 기능을 사용하여 게임에 기본 데스크탑 기능 (예 : 로컬 저장 게임)을 추가 할 수도 있습니다.

이것은 " 패키지 및 완료 "접근 방식이 아닙니다. 응용 프로그램의 일부를 다시 작성하고 다른 로더를 작성해야합니다 (예 : 데스크톱 응용 프로그램을 사용하면 파일 시스템을 통해 파일을로드하는 대신 HTTP를 사용함) -브라우저 / 온라인 게임에서 요청).

HTML5 기능을 사용하여 앱의 오프라인 액세스를 허용

기본 목표는 플레이어가 게임을 오프라인에서 플레이하도록 허용하는 경우 응용 프로그램 캐시 를 사용하여 앱의 오프라인 액세스를 허용 할 수도 있습니다 . 이것은 대부분의 최신 브라우저 에서 작동하는 기능입니다 . 추가 이점은 사용자가 아무것도 다운로드 할 필요가 없으며 오프라인 일 때도 북마크를 사용하여 게임을 할 수 있다는 것입니다.

비동기 적으로로드되는 리소스 (AJAX)의 경우 별도의로드 메커니즘을 구현해야합니다. 당신의 사용을 만들 수있는 로컬 스토리지를 오프라인으로 사용하기 위해 이러한 자원을 절약 할 수 있습니다.


2
Node-Webkit은 꽤 커서 "hello world"JS 게임을 포함하면 60MB 정도가됩니다.
ashes999

1
응용 프로그램이 원격으로 복잡한 경우에도 정답입니다.
Vaughan Hilts

1
@ ashes999 동의하지만 요즘 데스크톱 앱의 경우 60MB는 여전히 작습니다. 많은 범용 프레임 워크가 파일 크기 오버 헤드를 생성합니다 (유니티를 두드러진 예로 사용하십시오). 계속 증가하는 저장 공간, 편리한 파일 크기 승)
bummzack

2
@bummzack 동의하지 않습니다. 아트 나 오디오를 추가하기 전에 ~ 100kb JS 게임을하고 60MB가되는 것을보고 우울합니다. 바라건대 누군가가 더 나은 방법을 제시 할 것입니다. +1 btw
ashes999

1
이 답변에는 유용한 정보가 많이 있지만, 선고는 분명하지 않습니다. 게임 데이터를 JavaScript 파일에 넣을 수 있으며 최신 브라우저는 최소 몇 MB의 JavaScript를 처리 할 수 ​​있어야하며 캔버스에서 이미지 데이터를 읽으려고하지 않는 한 이미지 파일을 사용하는 데 아무런 문제가 없습니다. . 내가 마지막으로 확인했을 때, 모든 최신 브라우저는 file:///프로토콜 액세스를 허용하여 localStorage저장에 효과적입니다. 온라인 게임을 제외하고 HTML 게임에서 할 수있는 모든 것을 확장 할 수 있습니다.
aaaaaaaaaaaa

7

Chrome 기반 솔루션으로 게임을 오프라인에서 실행하고 일부 기본 기능을 즐기려면 Chrome 앱 만들기를 고려할 수 있습니다 .

이런 식으로, 당신은 당신이 어떤 즐길 수있는, 추가 가시성 크롬 웹 스토어에 배포 할 수 있습니다 강력한 API를 , 그리고 그것을 만들어 더 많은 독립 실행 형 응용 프로그램처럼 .

단점은 물론 Chrome이 필요하다는 것입니다.


1
Firefox (및 Firefos OS)에는 OpenWebApps ( developer.mozilla.org/en/Apps/Quickstart/Build/… )가 있으며 이는 응용 프로그램으로 설치되어 다운로드 한 웹 응용 프로그램 ID입니다. 두 솔루션 모두 공통 표준 인 html5doctor.com/web-manifest-specification으로 수렴해야합니다 . code.google.com/p/chromium/issues/detail?id=366145
ysdx

@ysdx 언급 한 수렴 표준은 '패키지 앱'이라고도하는 자체 포함 된 다운로드 가능한 앱과 달리 Chrome에서 '호스팅 된 앱'이라고하는 것입니다. Firefox에도 동일한 용어가 적용됩니다. 불행히도 패키지 된 앱은 구조적으로 매우 다르며 수렴 할 가능성이 없습니다.

@Xan 패키지 앱이란 무엇입니까? Firefox 및 Chrome 앱 스토어에서 '호스트'및 '패키지'앱을 모두 사용할 수 있습니까?
Qsigma

1
@Qsigma 패키지 앱은 로컬 파일 시스템 액세스와 같은 강력한 API에 액세스 할 수있는 대부분 독립적 인 HTML5 앱입니다. 다운로드에 자체 리소스가 포함되어 있기 때문에 "패키지"되어 있습니다. "호스팅 된"앱은 기본적으로 일부 메타 데이터가있는 웹 사이트에 대한 링크입니다. 바로 가기와 책갈피 사이의 십자가라고 생각하십시오. Firefox 저장소에 대해서는 말할 수 없지만 첫 번째 의견의 문서에는 패키지 앱을 작성하는 방법이 설명되어 있습니다.
Xan

더 많은 할당량 및 권한으로 추가 다운로드없이 앱을 클릭하여 오프라인으로 실행하고 더 많은 할당량 및 권한으로 추가 다운로드없이 앱을 클릭하여 실행하는 것의 차이점은 무엇입니까? 기술적으로는 차이가 있지만 그 차이는 피상적이며 사용자에게는 차이가 없습니다. 올바르게 디자인 된 호스팅 된 앱을 패키징하는 것은 올바른 매니페스트를 사용하는 것이 쉽지 않습니다. 패키지 된 앱의 단점은 외부 패키지 관리자 없이는 자체 업데이트 할 수 없으며 호스팅 된 앱에서는 브라우저 자체가 패키지 관리자라는 것입니다.
리 라이언

0

글쎄, 그것은 당신이 정말로 얼마나 많은 일을 넣고 싶어하는지에 달려 있습니다. 현재 웹 API 세트를 사용하여 다음을 수행 할 수 있습니다.

  • PWA ( 프로그레시브 웹 앱) 만들기 (대개 PWA 는 휴대 전화 및 Chrome OS 전용이지만 데스크톱 용 Chrome에서 곧 지원할 예정 이라고 들었습니다 . 현재는 이전 애플리케이션 이후 플래그 뒤에 숨겨져 있습니다) 캐시는 더 이상 사용되지 않습니다
  • 변하게 하다모든 것을 텍스트 ( 이미지오디오 ) 로 . 또한 사용자가 웹 페이지를 그대로 (사용 중이 Cmd+S거나 Ctrl+S브라우저에) 저장하거나 페이지를 PWA로 캐시 하도록 권장합니다 . 모바일에서는 dataURI가 잘 수행되지 않는다는 것을 알고 있습니다.
  • Chrome 앱을 만들 수 있지만 Chrome OS에서 실행되지 않는 Chrome 버전에서는 작동하지 않습니다 . 즉, 대신 확장 프로그램 을 만드는 것이 좋습니다
  • 대부분의 게임은 10MB 미만이며 모든 게임 데이터를 로컬 저장소에 캐시 할 수 있다고합니다. 당신이하는 방법은 당신에게 달려 있습니다 : 당신은 위의 작업 (텍스트로 변환), Blob API 등을 사용할 수 있습니다. 일부 휴대 전화는 메모리에서 전체 게임을 지울 수 있기 때문에 이것을 권장하지 않습니다. 즉, 코드가 아직 메모리에있는 경우 모든 것이 정상인지 확인해야합니다. 이는로드 시간이 길어지고 사용자 전화가 중단 될 수 있음을 의미합니다. 그래도이 길을 선택하면 LocalForage 를 사용하면 도움이됩니다.
  • 전자 사용하기 또는 NW.js를 html, css 및 js를 사용하여 데스크탑 앱을 만들 수 있습니다. 비슷한 방법을 사용하여 모바일 앱을 만들 수도 있습니다 ( Cordova 또는 PhoneGap 과 같은 Cordova 종속 기능 사용 ). 이렇게하면 원하는 경우 사용자가 정식 게임을 다운로드 할 수 있습니다.
  • 여전히 계속하려면 zip 파일 JSZip을 체크 아웃 하십시오 . 어떻게 사용할 수 있는지 잘 모르겠지만 누군가가 좋은 아이디어를 얻을 수 있다고 확신합니다 (파일을 압축 한 다음 이진 데이터를 문자열로 변환 하여 HTML에 인라인으로 배치 할 수 있음).
  • 이 이상한 해킹 통해 텍스트 데이터를 데이터 블록이라고하는 텍스트로로드 할 수 있습니다. 이것은 자산을 html 파일에 포함시키는 데 사용할 수있는 또 다른 도구입니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.