Similar presentations:
Go делать игры!
1.
Go делать игры!Алексей Акулович (ВКонтакте)
2019.10.07 #6
2.
Как так вышло?2
3.
Как так вышло?голосовые сообщения
фотографии
рассылка пушей
CDN
аудио
документы
логи
Go RPC
мониторинг
трансляции
видео
3
4.
Как так вышло?голосовые сообщения
фотографии
рассылка пушей
CDN
аудио
документы
логи
Go RPC
мониторинг
трансляции
видео
4
5.
Как так вышло?голосовые сообщения
фотографии
рассылка пушей
CDN
аудио
документы
логи
Go RPC
мониторинг
трансляции
видео
игры
5
6.
Подходы к GameDev’у- Pascal (или Basic) DOS-графика
6
7.
Подходы к GameDev’у- Pascal (или Basic) DOS-графика
- DirectDraw/DirectX, OpenGL
7
8.
Подходы к GameDev’у- Pascal (или Basic) DOS-графика
- DirectDraw/DirectX, OpenGL
- Blitz3D, Scratch, LÖVE
8
9.
Подходы к GameDev’уMail.ru Game Jam 2 (2017)
Unity (C#)
9
youtube.com/watch?v=WhxkAu-GAsw
10.
Подходы к GameDev’уВнутренний хакатон
Go, GopherJS, WebGL
10
youtube.com/watch?v=no1ZJVJ1llk
11.
Подходы к GameDev’уВнутренний хакатон
CoronaSDK (lua), WebGL
11
vk.com/app6810744
12.
Подходы к GameDev’уLudum Dare 42
- CoronaSDK (lua), WebGL
- ASEprite, sfxr, Bosca Ceoil
12
ldjam.com/events/ludum-dare/42/
oh-no-this-is-monsters
13.
Подходы к GameDev’уLudum Dare 43
CoronaSDK (lua), WebGL
ASEprite
13
ldjam.com/events/ludum-dare/43/
ludumcoin
14.
Lua, Lua, Lua...Где Go?
14
15.
Выбор в пользу Go- Типизация, отладка, профилирование
- Поддержка в IDE
- Мало Go на работе
15
16.
А если Go...Есть чё?
16
17.
А если Go...Какие есть игровые движки на Go?
17
18.
Какие есть игровые движки на GoENGi
Korok
Oak
18
g3n
19.
Как выбрать ТОТ САМЫЙ?19
20.
Как выбрать ТОТ САМЫЙ?- Живость
20
21.
ENGiDesktop + GopherJS
“SUPER ALPHA v0.6”
Не обновлялся > 3 лет
Тот самый хакатон
21
github.com/ajhager/engi
22.
3DDesktop
Не обновлялся > 3 лет
22
github.com/azul3d/engine
23.
Какие все еще есть игровые движкиENGi
Korok
Oak
23
g3n
24.
Как выбрать ТОТ САМЫЙ?- Живость
- Поддержка платформ
24
25.
Платформы- Desktop
Windows, Linux, MacOS
- Mobile
Android, iOS
- Web
HTML5
25
26.
Как выбрать ТОТ САМЫЙ?- Живость
- Поддержка платформ
- Web HTML5
- Mobile
- Desktop
26
27.
Как выбрать ТОТ САМЫЙ?- Живость
- Поддержка платформ
- Web HTML5
- Mobile
- Desktop
- Предоставляемое API
27
28.
Посмотрим на оставшиесяENGi
Korok
Oak
28
g3n
29.
OakSoftware renderer
Desktop Windows
29
github.com/oakmound/oak
30.
2DDesktop
pixel-examples raycaster
30
github.com/faiface/pixel
31.
Korok2D
Desktop, mobile, web
Делает (делал?) один китаец
Не смог запустить даже desktop
31
github.com/KorokEngine/Korok
32.
G3N3D
Desktop cgo ‒ сломана
wasm syscall/js ‒ как?
Нет примеров
Почти нет документации
github.com/danaugrs/gokoban
32
github.com/g3n/engine
33.
3D + 2DDesktop, mobile, web
C++ / C# / GDScript
33
godotengine.org
34.
GDNative APIgodotengine.org/article/look-gdnative-architecture
Плагин
.so, .dylib, .dll
Нет mobile, web
godot-go examples DodgeTheCreeps
34
github.com/ShadowApex/godot-go
35.
3D + 2DC library
35
github.com/raysan5/raylib
raylib examples textures_bunnymark
36.
cgo bindingDesktop + Android
36
github.com/gen2brain/raylib-go
37.
Что остается?ENGi
Korok
Oak
37
g3n
38.
2DDesktop, mobile, web
38
github.com/hajimehoshi/ebiten
39.
Документация39
40.
Примеры…
40
41.
Примеры41
42.
Код ‒ Go Wayebiten.NewImageFromImage(source image.Image, ...)
42
43.
Код ‒ Go Way// +build android ios
43
44.
Код ‒ Go Way44
45.
4546.
Медленная загрузка картинокНемного лучше с go-bindata, statik, ...
46
47.
Ограниченный APIНо есть всякие DrawImageOptions.ColorM и т.п.
47
48.
Очень жирный и медленный для веба GJS/WASM9+МБ на пустышке
GJS еще и глючный
48
49.
“Но ENGO-то мне точно подойдет!”49
50.
Engo2D
Desktop, mobile, web
+ VulkanAPI
50
github.com/EngoEngine/engo
51.
EngoДокументация
51
52.
EngoДокументация
52
53.
EngoПримеры
53
54.
EngoA cross-platform game engine written in Go following an
interpretation of the Entity Component System paradigm.
…
v1.0 is now available!
...
54
55.
Engo55
56.
EngoКак включить рендер?
56
57.
Engo// 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{})
}
57
58.
EngoКак добавить спрайт
на сцену?
58
59.
Engotype MySuperPuperGopher struct {
ecs.BasicEntity
common.RenderComponent
common.SpaceComponent
}
59
60.
Engotype MySuperPuperGopher struct {
ecs.BasicEntity
common.RenderComponent
common.SpaceComponent
common.MouseComponent
}
60
61.
Engotype MySuperPuperGopher struct {
ecs.BasicEntity
common.RenderComponent
common.SpaceComponent
common.MouseComponent
common.AnimationComponent
}
61
62.
Engotype MySuperPuperGopher struct {
ecs.BasicEntity
common.RenderComponent
common.SpaceComponent
common.MouseComponent
common.AnimationComponent
common.AudioComponent
}
62
63.
Engotype MySuperPuperGopher struct {
ecs.BasicEntity
common.RenderComponent
common.SpaceComponent
common.MouseComponent
common.AnimationComponent
common.AudioComponent
common.CollisionComponent
}
63
64.
EngoКомпоненты сами себя не обновят
64
65.
EngoКомпоненты сами себя не обновят
func (*myScene) Setup(u engo.Updater) {
world, _ := u.(*ecs.World)
world.AddSystem(&common.RenderSystem{})
world.AddSystem(&common.MouseSystem{})
world.AddSystem(&common.AnimationSystem{})
// ...
}
65
66.
Engo66
67.
Engo67
68.
EngoКак обработать click/tap?
68
69.
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 {
scene.join()
}
}})
69
70.
Engo70
71.
Engo“All problems in computer science
can be solved by another level of
indirection”
David Wheeler
71
72.
Engo- Странная реализация ECS
72
73.
Engo- Странная реализация 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
}
73
74.
Engo- Странная реализация ECS
- Баги, нехватка документации
74
75.
Engo- Странная реализация ECS
- Баги, нехватка документации
- Работает
75
76.
EngoНативный на компе
76
77.
EngoБраузер на компе
77
78.
EngoБраузер на компе
Сеть?
gorilla/websocket
+
js.Global().Get(`WebSocket`)
78
79.
EngoБраузер на компе
Производительность?
Пару секунд мир подождет
79
80.
EngoБраузер на телефоне
Samsung / iPad
80
81.
EngoБраузер на телефоне
Samsung / iPad
GJS / WASM файл: 7+МБ
Парсинг на ноуте: 2 сек
Парсинг на телефонах: +∞
81
82.
А если Go...“А разве еще что-нибудь есть?”
82
83.
Handmade Web HTML583
84.
Handmade Web HTML5- WebGL
github.com/nuberu/webgl
- js WebSockets
- GopherJS / WASM
84
85.
Handmade Web HTML5Ebiten - 9 МБ
Engo - 7 МБ
Фигак-фигак - 1.5 МБ
85
86.
Handmade Web HTML5Ebiten - 9 МБ
Engo - 7 МБ
Фигак-фигак - 1.5 МБ
86
87.
DEMO TIME87
Картинка: https://www.teepublic.com/t-shirt/5102595-golang-gopher-unicorn
88.
Demo88
89.
DemoПопробовать:
ater.me/go_races
Исходники:
github.com/atercattus/golangconf19_examples
89
90.
Что выбрать?- Desktop
Godot-go выглядит круто / Raylib для души
- Mobile
Android ‒ raylib; iOS ‒ ?
- Web
Handmade или никак
90
91.
ater.me/conf/goc19.pptx Презентацияater.me/go_races
vk.com/ac
@atercattus
91
Демка
Вопросы