Разделы презентаций


Go делать игры!

Содержание

Как так вышло?

Слайды и текст этой презентации

Слайд 1Go делать игры!
Алексей Акулович (ВКонтакте)
2019.10.07 #6

Go делать игры!Алексей Акулович (ВКонтакте)2019.10.07 #6

Слайд 2Как так вышло?

Как так вышло?

Слайд 3Как так вышло?
видео
трансляции
фотографии
голосовые сообщения
рассылка пушей
мониторинг
логи
Go RPC
CDN
аудио
документы

Как так вышло?видеотрансляциифотографииголосовые сообщениярассылка пушеймониторинглогиGo RPCCDNаудиодокументы

Слайд 4Как так вышло?
видео
трансляции
фотографии
голосовые сообщения
рассылка пушей
мониторинг
логи
Go RPC
CDN
аудио
документы

Как так вышло?видеотрансляциифотографииголосовые сообщениярассылка пушеймониторинглогиGo RPCCDNаудиодокументы

Слайд 5Как так вышло?
трансляции
фотографии
голосовые сообщения
рассылка пушей
мониторинг
логи
Go RPC
CDN
аудио
документы
игры
видео

Как так вышло?трансляциифотографииголосовые сообщениярассылка пушеймониторинглогиGo RPCCDNаудиодокументыигрывидео

Слайд 6Подходы к GameDev’у
- Pascal (или Basic) DOS-графика

Подходы к GameDev’у  - Pascal (или Basic) DOS-графика

Слайд 7Подходы к GameDev’у
- Pascal (или Basic) DOS-графика

- DirectDraw/DirectX, OpenGL

Подходы к GameDev’у  - Pascal (или Basic) DOS-графика  - DirectDraw/DirectX, OpenGL

Слайд 8Подходы к GameDev’у
- Pascal (или Basic) DOS-графика

- DirectDraw/DirectX, OpenGL
- Blitz3D, Scratch, LÖVE

Подходы к GameDev’у  - Pascal (или Basic) DOS-графика  - DirectDraw/DirectX, OpenGL  - Blitz3D, Scratch,

Слайд 9Подходы к GameDev’у
Mail.ru Game Jam 2 (2017)

Unity (C#)

youtube.com/watch?v=WhxkAu-GAsw

Подходы к GameDev’уMail.ru Game Jam 2 (2017)  Unity (C#)youtube.com/watch?v=WhxkAu-GAsw

Слайд 10
Внутренний хакатон

Go, GopherJS, WebGL
Подходы к GameDev’у
youtube.com/watch?v=no1ZJVJ1llk

Внутренний хакатон  Go, GopherJS, WebGLПодходы к GameDev’уyoutube.com/watch?v=no1ZJVJ1llk

Слайд 11Внутренний хакатон

CoronaSDK (lua), WebGL


Подходы к GameDev’у
vk.com/app6810744

Внутренний хакатон  CoronaSDK (lua), WebGLПодходы к GameDev’уvk.com/app6810744

Слайд 12
Ludum Dare 42

- CoronaSDK (lua), WebGL

-

ASEprite, sfxr, Bosca Ceoil

Подходы к GameDev’у
ldjam.com/events/ludum-dare/42/
oh-no-this-is-monsters

Ludum Dare 42  - CoronaSDK (lua), WebGL  - ASEprite, sfxr, Bosca CeoilПодходы к GameDev’уldjam.com/events/ludum-dare/42/oh-no-this-is-monsters

Слайд 13
Ludum Dare 43

CoronaSDK (lua), WebGL

ASEprite


Подходы к

GameDev’у
ldjam.com/events/ludum-dare/43/
ludumcoin

Ludum Dare 43  CoronaSDK (lua), WebGL  ASEpriteПодходы к GameDev’уldjam.com/events/ludum-dare/43/ludumcoin

Слайд 14Lua, Lua, Lua...
Где Go?

Lua, Lua, Lua...Где Go?

Слайд 15Выбор в пользу Go
- Типизация, отладка, профилирование

- Поддержка в IDE
- Мало Go на работе


Выбор в пользу Go  - Типизация, отладка, профилирование  - Поддержка в IDE  - Мало

Слайд 16А если Go...
Есть чё?

А если Go...Есть чё?

Слайд 17Какие есть игровые движки на Go?
А если Go...

Какие есть игровые движки на Go?А если Go...

Слайд 18
Какие есть игровые движки на Go
ENGi
Oak
Korok
g3n

Какие есть игровые движки на GoENGiOakKorokg3n

Слайд 19Как выбрать ТОТ САМЫЙ?

Как выбрать ТОТ САМЫЙ?

Слайд 20Как выбрать ТОТ САМЫЙ?
- Живость

Как выбрать ТОТ САМЫЙ? - Живость

Слайд 21
ENGi

Desktop + GopherJS

“SUPER ALPHA v0.6”
Не обновлялся > 3 лет
github.com/ajhager/engi
Тот самый

хакатон

ENGiDesktop + GopherJS“SUPER ALPHA v0.6”Не обновлялся > 3 летgithub.com/ajhager/engiТот самый хакатон

Слайд 22
3D
Desktop

Не обновлялся > 3 лет
github.com/azul3d/engine

3DDesktopНе обновлялся > 3 летgithub.com/azul3d/engine

Слайд 23
Какие все еще есть игровые движки
ENGi
Oak
Korok
g3n

Какие все еще есть игровые движкиENGiOakKorokg3n

Слайд 24Как выбрать ТОТ САМЫЙ?
- Живость
- Поддержка платформ

Как выбрать ТОТ САМЫЙ? - Живость - Поддержка платформ

Слайд 25Платформы
- Desktop
Windows, Linux, MacOS
-

Mobile
Android, iOS
- Web

HTML5

Платформы - Desktop    Windows, Linux, MacOS - Mobile    Android, iOS -

Слайд 26Как выбрать ТОТ САМЫЙ?
- Живость
- Поддержка платформ

- Web HTML5
- Mobile

- Desktop

Как выбрать ТОТ САМЫЙ? - Живость - Поддержка платформ    - Web HTML5

Слайд 27Как выбрать ТОТ САМЫЙ?
- Живость
- Поддержка платформ

- Web HTML5
- Mobile

- Desktop
- Предоставляемое API
Как выбрать ТОТ САМЫЙ? - Живость - Поддержка платформ    - Web HTML5

Слайд 28
Посмотрим на оставшиеся
ENGi
Oak
Korok
g3n

Посмотрим на оставшиесяENGiOakKorokg3n

Слайд 29
Oak

Software renderer
Desktop Windows
github.com/oakmound/oak

OakSoftware rendererDesktop Windows github.com/oakmound/oak

Слайд 30

2D
Desktop

github.com/faiface/pixel
pixel-examples raycaster

2DDesktopgithub.com/faiface/pixelpixel-examples raycaster

Слайд 31Korok

2D
Desktop, mobile, web
Делает (делал?) один китаец
Не смог запустить даже desktop


github.com/KorokEngine/Korok

Korok2DDesktop, mobile, webДелает (делал?) один китаецНе смог запустить даже desktopgithub.com/KorokEngine/Korok

Слайд 32
G3N

3D
Desktop cgo ‒ сломана
wasm syscall/js ‒ как?
Нет примеров
Почти нет документации


github.com/g3n/engine
github.com/danaugrs/gokoban

G3N3DDesktop cgo ‒ сломанаwasm syscall/js ‒ как?Нет примеровПочти нет документацииgithub.com/g3n/enginegithub.com/danaugrs/gokoban

Слайд 33

3D + 2D
Desktop, mobile, web
C++ / C# / GDScript
godotengine.org

3D + 2DDesktop, mobile, webC++ / C# / GDScriptgodotengine.org

Слайд 34

GDNative API
godotengine.org/article/look-gdnative-architecture
Плагин
.so, .dylib, .dll

Нет mobile, web

github.com/ShadowApex/godot-go
godot-go examples DodgeTheCreeps

GDNative APIgodotengine.org/article/look-gdnative-architectureПлагин	.so, .dylib, .dllНет mobile, webgithub.com/ShadowApex/godot-gogodot-go examples DodgeTheCreeps

Слайд 35
3D + 2D
C library





github.com/raysan5/raylib
raylib examples textures_bunnymark


3D + 2DC librarygithub.com/raysan5/raylibraylib examples textures_bunnymark

Слайд 36
cgo binding
Desktop + Android
github.com/gen2brain/raylib-go

cgo bindingDesktop + Androidgithub.com/gen2brain/raylib-go

Слайд 37
Что остается?
ENGi
Oak
Korok
g3n





Что остается?ENGiOakKorokg3n

Слайд 38
2D
Desktop, mobile, web

github.com/hajimehoshi/ebiten

2DDesktop, mobile, webgithub.com/hajimehoshi/ebiten

Слайд 39Документация

Документация

Слайд 40Примеры

Примеры…

Слайд 41Примеры

Примеры

Слайд 42Код ‒ Go Way
ebiten.NewImageFromImage(source image.Image, ...)

Код ‒ Go Way  ebiten.NewImageFromImage(source image.Image, ...)

Слайд 43Код ‒ Go Way
// +build android ios

Код ‒ Go Way  // +build android ios

Слайд 44Код ‒ Go Way

Код ‒ Go Way

Слайд 46 Медленная загрузка картинок
Немного лучше

с go-bindata, statik, ...

Медленная загрузка картинок    Немного лучше с go-bindata, statik, ...

Слайд 47 Ограниченный API
Но есть всякие

DrawImageOptions.ColorM и т.п.

Ограниченный API    Но есть всякие DrawImageOptions.ColorM и т.п.

Слайд 48 Очень жирный и медленный для веба GJS/WASM

9+МБ на пустышке
GJS еще

и глючный
Очень жирный и медленный для веба GJS/WASM    9+МБ на пустышке

Слайд 49“Но ENGO-то мне точно подойдет!”

“Но ENGO-то мне точно подойдет!”

Слайд 50
2D
Desktop, mobile, web
+ VulkanAPI
github.com/EngoEngine/engo
Engo

2DDesktop, mobile, web  + VulkanAPIgithub.com/EngoEngine/engoEngo

Слайд 51Документация
Engo

ДокументацияEngo

Слайд 52Engo
Документация

EngoДокументация

Слайд 53Примеры
Engo

ПримерыEngo

Слайд 54A cross-platform game engine written in Go following an interpretation

of the Entity Component System paradigm.

v1.0 is now available!
...

Engo

A cross-platform game engine written in Go following an interpretation of the Entity Component System paradigm. …v1.0

Слайд 56Engo
Как включить рендер?

EngoКак включить рендер?

Слайд 57Engo
// Setup is called before the main loop starts. It

allows you to add entities and systems to your Scene.
func

(*myScene) Setup(u engo.Updater) {
world, _ := u.(*ecs.World)
world.AddSystem(&common.RenderSystem{})
}
Engo// Setup is called before the main loop starts. It allows you to add entities and systems

Слайд 58Engo
Как добавить спрайт
на сцену?

EngoКак добавить спрайтна сцену?

Слайд 59type MySuperPuperGopher struct {
ecs.BasicEntity
common.RenderComponent
common.SpaceComponent
}
Engo

type MySuperPuperGopher struct {	ecs.BasicEntity	common.RenderComponent	common.SpaceComponent}Engo

Слайд 60type MySuperPuperGopher struct {
ecs.BasicEntity
common.RenderComponent
common.SpaceComponent
common.MouseComponent
}
Engo

type MySuperPuperGopher struct {	ecs.BasicEntity	common.RenderComponent	common.SpaceComponent	common.MouseComponent}Engo

Слайд 61type MySuperPuperGopher struct {
ecs.BasicEntity
common.RenderComponent
common.SpaceComponent
common.MouseComponent
common.AnimationComponent
}
Engo

type MySuperPuperGopher struct {	ecs.BasicEntity	common.RenderComponent	common.SpaceComponent	common.MouseComponent	common.AnimationComponent}Engo

Слайд 62type MySuperPuperGopher struct {
ecs.BasicEntity
common.RenderComponent
common.SpaceComponent
common.MouseComponent
common.AnimationComponent
common.AudioComponent
}
Engo

type MySuperPuperGopher struct {	ecs.BasicEntity	common.RenderComponent	common.SpaceComponent	common.MouseComponent	common.AnimationComponent	common.AudioComponent}Engo

Слайд 63type MySuperPuperGopher struct {
ecs.BasicEntity
common.RenderComponent
common.SpaceComponent
common.MouseComponent
common.AnimationComponent
common.AudioComponent
common.CollisionComponent
}
Engo

type MySuperPuperGopher struct {	ecs.BasicEntity	common.RenderComponent	common.SpaceComponent	common.MouseComponent	common.AnimationComponent	common.AudioComponent	common.CollisionComponent}Engo

Слайд 64Компоненты сами себя не обновят

Engo

Компоненты сами себя не обновятEngo

Слайд 65Компоненты сами себя не обновят

func (*myScene) Setup(u engo.Updater) {
world, _

:= u.(*ecs.World)
world.AddSystem(&common.RenderSystem{})
world.AddSystem(&common.MouseSystem{})
world.AddSystem(&common.AnimationSystem{})
// ...
}
Engo

Компоненты сами себя не обновятfunc (*myScene) Setup(u engo.Updater) {	world, _ := u.(*ecs.World)	world.AddSystem(&common.RenderSystem{})	world.AddSystem(&common.MouseSystem{})	world.AddSystem(&common.AnimationSystem{})	// ...}Engo

Слайд 68Engo
Как обработать click/tap?

EngoКак обработать click/tap?

Слайд 69Engo
btn.AddToWorld(u)
mouseSystem.Add(&btn.BasicEntity, &btn.MouseComponent,
&btn.SpaceComponent, &btn.RenderComponent,
)
scene.World().AddSystem(&systems.MousableSystem{
Callback: func(dt float32) {

if btn.MouseComponent.Clicked {

scene.join()
}
}})

Engobtn.AddToWorld(u)mouseSystem.Add(&btn.BasicEntity, &btn.MouseComponent,  &btn.SpaceComponent, &btn.RenderComponent,)scene.World().AddSystem(&systems.MousableSystem{  Callback: func(dt float32) {    if btn.MouseComponent.Clicked {

Слайд 71Engo
“All problems in computer science can be solved by another

level of indirection”
David Wheeler

Engo“All problems in computer science can be solved by another level of indirection”David Wheeler

Слайд 72 - Странная реализация ECS
Engo

- Странная реализация ECSEngo

Слайд 73 - Странная реализация ECS
// RunOptions are

the options used to Run engo
type RunOptions struct

{
// Update is the function called each frame during the runLoop to update all of the systems. If left blank, it defaults to &ecs.World{}. Use this if you plan on utilizing engo's window / GL management but
don't want to use the ECS paradigm.
Update Updater
}

Engo

- Странная реализация ECS  // RunOptions are the options used to Run engo

Слайд 74 - Странная реализация ECS
- Баги, нехватка

документации

Engo

- Странная реализация ECS  - Баги, нехватка документацииEngo

Слайд 75 - Странная реализация ECS
- Баги, нехватка

документации
- Работает
Engo

- Странная реализация ECS  - Баги, нехватка документации  - РаботаетEngo

Слайд 76Нативный на компе

Engo

Нативный на компеEngo

Слайд 77Браузер на компе

Engo

Браузер на компеEngo

Слайд 78Браузер на компе

Сеть?
gorilla/websocket

+
js.Global().Get(`WebSocket`)

Engo

Браузер на компе  Сеть?   gorilla/websocket   +   js.Global().Get(`WebSocket`)Engo

Слайд 79Браузер на компе

Производительность?
Пару секунд

мир подождет

Engo

Браузер на компе  Производительность?    Пару секунд мир подождетEngo

Слайд 80Браузер на телефоне
Samsung / iPad

Engo

Браузер на телефоне  Samsung / iPadEngo

Слайд 81Браузер на телефоне
Samsung / iPad

GJS / WASM файл:

7+МБ
Парсинг на ноуте: 2 сек
Парсинг на телефонах: +∞
Engo

Браузер на телефоне  Samsung / iPadGJS / WASM файл: 7+МБПарсинг на ноуте: 2 секПарсинг на телефонах:

Слайд 82А если Go...
“А разве еще что-нибудь есть?”

А если Go...“А разве еще что-нибудь есть?”

Слайд 83Handmade Web HTML5

Handmade Web HTML5

Слайд 84 - WebGL
github.com/nuberu/webgl

- js WebSockets

- GopherJS / WASM

Handmade Web HTML5

- WebGL github.com/nuberu/webgl  - js WebSockets  - GopherJS / WASMHandmade Web HTML5

Слайд 85 Ebiten - 9 МБ

Engo - 7

МБ

Фигак-фигак - 1.5 МБ

Handmade Web HTML5

Ebiten - 9 МБ  Engo - 7 МБ  Фигак-фигак - 1.5 МБHandmade Web

Слайд 86 Ebiten - 9 МБ

Engo - 7

МБ

Фигак-фигак - 1.5 МБ

Handmade Web HTML5

Ebiten - 9 МБ  Engo - 7 МБ  Фигак-фигак - 1.5 МБHandmade Web

Слайд 87Картинка: https://www.teepublic.com/t-shirt/5102595-golang-gopher-unicorn
DEMO TIME

Картинка: https://www.teepublic.com/t-shirt/5102595-golang-gopher-unicornDEMO TIME

Слайд 89Попробовать:
ater.me/go_races

Исходники:
github.com/atercattus/golangconf19_examples

Demo

Попробовать:  ater.me/go_racesИсходники:  github.com/atercattus/golangconf19_examplesDemo

Слайд 90Что выбрать?
- Desktop
Godot-go

выглядит круто / Raylib для души
- Mobile

Android ‒ raylib; iOS ‒ ?
- Web
Handmade или никак
Что выбрать?  - Desktop     Godot-go выглядит круто / Raylib для души

Обратная связь

Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика