게임용으로 개발한 Go 패키지
github.com/hajimehoshi/ebiten
죽은 단순한 2D 게임 라이브러리. 기본적으로 이것은 OpenGL 래퍼입니다. 이것은 GopherJS에 의해 데스크탑뿐만 아니라 모바일 및 웹 브라우저까지 여러 플랫폼에서 작동합니다! 실제로 우리는 데스크톱과 브라우저에서 게임을 개발할 수 있었고 모바일용으로 출시했습니다.
에비텐(海老天)은 새우 튀김이라는 뜻으로 제가 가장 좋아하는 일본 음식 중 하나입니다 :-)
github.com/hajimehoshi/go-mp3
순수한 Go의 MP3 디코더. 퍼블릭 도메인 라이선스의 MP3 디코더인 PDMP3의 포트입니다. 사양을 이해하지 않고 이것을 자동으로 이식했기 때문에 여전히 내 lib에서 무슨 일이 일어나고 있는지 이해하기 위해 고군분투하고 있습니다 :-)
Ogg와 같은 다른 디코더 대신 MP3 디코더를 개발한 동기는 브라우저에서 게임이 작동하도록 만들고 싶었기 때문입니다. 현재MP3 is supported by most modern browsers이지만 다른 것들은 잘 지원되지 않습니다(예: Ogg ). 성능을 위해 Go의 MP3 디코더 대신 브라우저의 브라우저 네이티브 디코더를 활용할 수 있습니다. MP3는 특허 문제가 있었지만 2017년 특허가 만료됐다.
github.com/hajimehoshi/oto
낮은 수준의 오디오 라이브러리. 이것의 가장 큰 장점은 이식성입니다. 이것은 Windows, macOS, Linux, Android, iOS 및 웹 브라우저에서 작동합니다. 이것은 단지 io.Writer
를 제공하며 라이터에 바이트를 써서 모든 사운드를 재생할 수 있습니다. go-mp3
로 io.Copy
( Example ) 로 MP3 파일을 재생할 수 있습니다!
func run() error {
f, err := os.Open("classic.mp3")
if err != nil {
return err
}
defer f.Close()
// Decode MP3 stream and the result is an `io.Reader`
d, err := mp3.NewDecoder(f)
if err != nil {
return err
}
defer d.Close()
// Create an oto's player, which is an `io.Writer`
p, err := oto.NewPlayer(d.SampleRate(), 2, 2, 8192)
if err != nil {
return err
}
defer p.Close()
// With `io.Copy`, you can play the decoded MP3 on your machine!
if _, err := io.Copy(p, d); err != nil {
return err
}
return nil
}
오토(音)는 일본어로 '소리'를 의미합니다.
github.com/hajimehoshi/file2byteslice
go-bindata 과 같이 Go 파일에 바이너리를 삽입하는 또 다른 도구입니다. file2bytesslice
는 다른 유사한 패키지에 비해 매우 간단합니다. 이것은 하나의 바이너리를 하나의 바이트 슬라이스 리터럴로 변환합니다. 그게 다야! 내가 이것을 개발한 동기는 incident이 있었다는 것입니다. go-bindata의 원래 작성자가 GitHub 계정을 삭제했고 다른 사람이 동일한 GitHub 계정을 다시 사용했으며 저장소가 더 이상 신뢰할 수 없다고 생각했습니다. 그래서 직접 개발해보기로 했습니다.
Usage of file2byteslice:
-compress
use gzip compression
-input string
input filename
-output string
output filename
-package string
package name (default "main")
-var string
variable name (default "_")
github.com/hajimehoshi/go-mplusbitmap
font.Face
의 M+ Bitmap font 객체를 8/16 비티 스타일 일본어 텍스트로 제공하는 패키지입니다. font.Face
는 글꼴을 표현하기 위한 준표준 인터페이스로 Go to makefont.Face
인스턴스에 a TrueType parser이 있습니다. Ebiten's text package으로 텍스트를 아주 쉽게 그릴 수 있습니다! 물론 이것은 (준)표준 렌더링 패키지( Example )와 함께 사용할 수 있습니다.
const text = `Hello, World!
こんにちは世界!`
func run() error {
const (
ox = 16
oy = 16
)
dst := image.NewRGBA(image.Rect(0, 0, 320, 240))
// Initialize the destination image dst by filling with white.
draw.Draw(dst, dst.Bounds(), image.NewUniform(color.White), image.ZP, draw.Src)
f := mplusbitmap.Gothic12r
// golang.org/x/image/font's Drawer draws a text on a specified image.
d := font.Drawer{
Dst: dst,
Src: image.NewUniform(color.Black),
Face: f,
Dot: fixed.P(ox, oy),
}
for _, l := range strings.Split(text, "\n") {
d.DrawString(l)
d.Dot.X = fixed.I(ox)
d.Dot.Y += f.Metrics().Height
}
// Now the text is drawn to the image dst.
return nil
}
github.com/hajimehoshi/chinesegamefonts
이것은 Noto CJK fonts의 (압축된) TTF 바이너리를 제공합니다. 이 패키지의 글꼴은 몇 가지 점에서 원본 Noto CJK 글꼴과 다릅니다.
순수한 Go의 MP3 디코더. 퍼블릭 도메인 라이선스의 MP3 디코더인 PDMP3의 포트입니다. 사양을 이해하지 않고 이것을 자동으로 이식했기 때문에 여전히 내 lib에서 무슨 일이 일어나고 있는지 이해하기 위해 고군분투하고 있습니다 :-)
Ogg와 같은 다른 디코더 대신 MP3 디코더를 개발한 동기는 브라우저에서 게임이 작동하도록 만들고 싶었기 때문입니다. 현재MP3 is supported by most modern browsers이지만 다른 것들은 잘 지원되지 않습니다(예: Ogg ). 성능을 위해 Go의 MP3 디코더 대신 브라우저의 브라우저 네이티브 디코더를 활용할 수 있습니다. MP3는 특허 문제가 있었지만 2017년 특허가 만료됐다.
github.com/hajimehoshi/oto
낮은 수준의 오디오 라이브러리. 이것의 가장 큰 장점은 이식성입니다. 이것은 Windows, macOS, Linux, Android, iOS 및 웹 브라우저에서 작동합니다. 이것은 단지 io.Writer
를 제공하며 라이터에 바이트를 써서 모든 사운드를 재생할 수 있습니다. go-mp3
로 io.Copy
( Example ) 로 MP3 파일을 재생할 수 있습니다!
func run() error {
f, err := os.Open("classic.mp3")
if err != nil {
return err
}
defer f.Close()
// Decode MP3 stream and the result is an `io.Reader`
d, err := mp3.NewDecoder(f)
if err != nil {
return err
}
defer d.Close()
// Create an oto's player, which is an `io.Writer`
p, err := oto.NewPlayer(d.SampleRate(), 2, 2, 8192)
if err != nil {
return err
}
defer p.Close()
// With `io.Copy`, you can play the decoded MP3 on your machine!
if _, err := io.Copy(p, d); err != nil {
return err
}
return nil
}
오토(音)는 일본어로 '소리'를 의미합니다.
github.com/hajimehoshi/file2byteslice
go-bindata 과 같이 Go 파일에 바이너리를 삽입하는 또 다른 도구입니다. file2bytesslice
는 다른 유사한 패키지에 비해 매우 간단합니다. 이것은 하나의 바이너리를 하나의 바이트 슬라이스 리터럴로 변환합니다. 그게 다야! 내가 이것을 개발한 동기는 incident이 있었다는 것입니다. go-bindata의 원래 작성자가 GitHub 계정을 삭제했고 다른 사람이 동일한 GitHub 계정을 다시 사용했으며 저장소가 더 이상 신뢰할 수 없다고 생각했습니다. 그래서 직접 개발해보기로 했습니다.
Usage of file2byteslice:
-compress
use gzip compression
-input string
input filename
-output string
output filename
-package string
package name (default "main")
-var string
variable name (default "_")
github.com/hajimehoshi/go-mplusbitmap
font.Face
의 M+ Bitmap font 객체를 8/16 비티 스타일 일본어 텍스트로 제공하는 패키지입니다. font.Face
는 글꼴을 표현하기 위한 준표준 인터페이스로 Go to makefont.Face
인스턴스에 a TrueType parser이 있습니다. Ebiten's text package으로 텍스트를 아주 쉽게 그릴 수 있습니다! 물론 이것은 (준)표준 렌더링 패키지( Example )와 함께 사용할 수 있습니다.
const text = `Hello, World!
こんにちは世界!`
func run() error {
const (
ox = 16
oy = 16
)
dst := image.NewRGBA(image.Rect(0, 0, 320, 240))
// Initialize the destination image dst by filling with white.
draw.Draw(dst, dst.Bounds(), image.NewUniform(color.White), image.ZP, draw.Src)
f := mplusbitmap.Gothic12r
// golang.org/x/image/font's Drawer draws a text on a specified image.
d := font.Drawer{
Dst: dst,
Src: image.NewUniform(color.Black),
Face: f,
Dot: fixed.P(ox, oy),
}
for _, l := range strings.Split(text, "\n") {
d.DrawString(l)
d.Dot.X = fixed.I(ox)
d.Dot.Y += f.Metrics().Height
}
// Now the text is drawn to the image dst.
return nil
}
github.com/hajimehoshi/chinesegamefonts
이것은 Noto CJK fonts의 (압축된) TTF 바이너리를 제공합니다. 이 패키지의 글꼴은 몇 가지 점에서 원본 Noto CJK 글꼴과 다릅니다.
func run() error {
f, err := os.Open("classic.mp3")
if err != nil {
return err
}
defer f.Close()
// Decode MP3 stream and the result is an `io.Reader`
d, err := mp3.NewDecoder(f)
if err != nil {
return err
}
defer d.Close()
// Create an oto's player, which is an `io.Writer`
p, err := oto.NewPlayer(d.SampleRate(), 2, 2, 8192)
if err != nil {
return err
}
defer p.Close()
// With `io.Copy`, you can play the decoded MP3 on your machine!
if _, err := io.Copy(p, d); err != nil {
return err
}
return nil
}
go-bindata 과 같이 Go 파일에 바이너리를 삽입하는 또 다른 도구입니다.
file2bytesslice
는 다른 유사한 패키지에 비해 매우 간단합니다. 이것은 하나의 바이너리를 하나의 바이트 슬라이스 리터럴로 변환합니다. 그게 다야! 내가 이것을 개발한 동기는 incident이 있었다는 것입니다. go-bindata의 원래 작성자가 GitHub 계정을 삭제했고 다른 사람이 동일한 GitHub 계정을 다시 사용했으며 저장소가 더 이상 신뢰할 수 없다고 생각했습니다. 그래서 직접 개발해보기로 했습니다.Usage of file2byteslice:
-compress
use gzip compression
-input string
input filename
-output string
output filename
-package string
package name (default "main")
-var string
variable name (default "_")
github.com/hajimehoshi/go-mplusbitmap
font.Face
의 M+ Bitmap font 객체를 8/16 비티 스타일 일본어 텍스트로 제공하는 패키지입니다. font.Face
는 글꼴을 표현하기 위한 준표준 인터페이스로 Go to makefont.Face
인스턴스에 a TrueType parser이 있습니다. Ebiten's text package으로 텍스트를 아주 쉽게 그릴 수 있습니다! 물론 이것은 (준)표준 렌더링 패키지( Example )와 함께 사용할 수 있습니다.
const text = `Hello, World!
こんにちは世界!`
func run() error {
const (
ox = 16
oy = 16
)
dst := image.NewRGBA(image.Rect(0, 0, 320, 240))
// Initialize the destination image dst by filling with white.
draw.Draw(dst, dst.Bounds(), image.NewUniform(color.White), image.ZP, draw.Src)
f := mplusbitmap.Gothic12r
// golang.org/x/image/font's Drawer draws a text on a specified image.
d := font.Drawer{
Dst: dst,
Src: image.NewUniform(color.Black),
Face: f,
Dot: fixed.P(ox, oy),
}
for _, l := range strings.Split(text, "\n") {
d.DrawString(l)
d.Dot.X = fixed.I(ox)
d.Dot.Y += f.Metrics().Height
}
// Now the text is drawn to the image dst.
return nil
}
github.com/hajimehoshi/chinesegamefonts
이것은 Noto CJK fonts의 (압축된) TTF 바이너리를 제공합니다. 이 패키지의 글꼴은 몇 가지 점에서 원본 Noto CJK 글꼴과 다릅니다.
const text = `Hello, World!
こんにちは世界!`
func run() error {
const (
ox = 16
oy = 16
)
dst := image.NewRGBA(image.Rect(0, 0, 320, 240))
// Initialize the destination image dst by filling with white.
draw.Draw(dst, dst.Bounds(), image.NewUniform(color.White), image.ZP, draw.Src)
f := mplusbitmap.Gothic12r
// golang.org/x/image/font's Drawer draws a text on a specified image.
d := font.Drawer{
Dst: dst,
Src: image.NewUniform(color.Black),
Face: f,
Dot: fixed.P(ox, oy),
}
for _, l := range strings.Split(text, "\n") {
d.DrawString(l)
d.Dot.X = fixed.I(ox)
d.Dot.Y += f.Metrics().Height
}
// Now the text is drawn to the image dst.
return nil
}
이것은 Noto CJK fonts의 (압축된) TTF 바이너리를 제공합니다. 이 패키지의 글꼴은 몇 가지 점에서 원본 Noto CJK 글꼴과 다릅니다.
golang.org/x/image/font/sfnt
is under development ). chinesegamefonts
글꼴에는 파일 크기를 줄이기 위해 일반적인 CJK 글리프만 포함되어 있습니다. 원본 파일 크기는 46.1MB(간체 및 전통)이고 축소된 파일 크기는 4.4MB(간체) 및 7.6MB(전통)입니다! 우리 게임은 지금까지 중국어를 지원하지 않지만 이제 이 글꼴 패키지로 구현하고 있습니다.
위의 패키지 외에도 현재 패키지를 개발하고 있습니다. 사용자 인터페이스용. 계속 지켜봐!
Reference
이 문제에 관하여(게임용으로 개발한 Go 패키지), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/hajimehoshi/go-packages-we-developed-for-our-games--4cl9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)