{"id":445284,"date":"2025-01-17T09:00:16","date_gmt":"2025-01-17T09:00:16","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=445284"},"modified":"-0001-11-30T00:00:00","modified_gmt":"2025-01-17T09:00:16","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=445284","title":{"rendered":"<span>Go \u0432 GUI, \u044f \u0441\u043e\u0437\u0434\u0430\u043b<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0418\u0434\u0435\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0438\u0433\u0440\u0443 \u043f\u043e\u0434 Android \u043d\u0430 Go \u0431\u044b\u043b\u0430 \u043d\u0435\u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e\u0439, \u043d\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0439. \u042f \u043b\u0435\u0433\u043a\u043e \u043c\u043e\u0433 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c Go \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u043e\u0439 \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u0439 \u043d\u0438\u0448\u0435, \u043d\u043e \u0438 \u0432 \u043f\u0440\u0438\u043a\u043b\u0430\u0434\u043d\u043e\u0439 \u2014 \u0435\u0433\u043e \u043a\u0440\u043e\u0441\u0441-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0438 \u0431\u043b\u0438\u0437\u043e\u0441\u0442\u044c \u043a \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u043c\u0443 \u0443\u0440\u043e\u0432\u043d\u044e \u0432 \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u0438 \u0441 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u043e\u0439 \u043f\u0440\u0438\u0448\u043b\u0438\u0441\u044c \u0431\u044b \u0442\u0430\u043c \u043e\u0447\u0435\u043d\u044c \u043a\u0441\u0442\u0430\u0442\u0438. \u0418 \u0432\u043e\u0442 \u043c\u044b \u0437\u0434\u0435\u0441\u044c \u2014 \u0438\u0433\u0440\u0443 \u043c\u0435\u0447\u0442\u044b \u044f \u043f\u043e\u043a\u0430 \u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u043b, \u043d\u043e \u043f\u0430\u0440\u0443 \u0438\u0433\u0440 \u043f\u043e\u043f\u0440\u043e\u0449\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0443\u0434\u0430\u043b\u043e\u0441\u044c.<\/p>\n<p>\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0445\u043e\u0447\u0443 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u0431 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0445, \u043f\u043e\u044f\u0432\u0438\u0432\u0448\u0438\u0445\u0441\u044f \u043f\u043e \u0445\u043e\u0434\u0443 \u0440\u0430\u0431\u043e\u0442\u044b. \u0421\u0430\u043c\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u044f \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u043b \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 <a href=\"https:\/\/github.com\/a1emax\/youngine\" rel=\"noopener noreferrer nofollow\">Youngine<\/a> \u0438 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043b \u043d\u0430 GitHub. \u0422\u0430\u043c \u0436\u0435 \u044f \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043b <a href=\"https:\/\/github.com\/a1emax\/dragon\" rel=\"noopener noreferrer nofollow\">\u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0438\u0433\u0440\u0443<\/a> \u0434\u0440\u0430\u043a\u043e\u043d\u043e\u0432\u043e-\u0437\u043c\u0435\u0438\u043d\u043e\u0439 \u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0438 \u043f\u043e \u043d\u043e\u0432\u043e\u0433\u043e\u0434\u043d\u0435\u043c\u0443 \u0441\u043b\u0443\u0447\u0430\u044e \u043a\u0430\u043a \u043f\u0440\u0438\u043c\u0435\u0440 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043d\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430.<\/p>\n<h2>Youngine<\/h2>\n<p>\u041e\u0431\u0440\u0430\u0442\u043d\u044b\u0439 Node.js \u0432 \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u0435 Go \u043e\u043b\u0438\u0446\u0435\u0442\u0432\u043e\u0440\u044f\u0435\u0442 \u043d\u0435 \u0442\u0430\u043a \u0443\u0436 \u043c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432. \u0414\u043b\u044f \u043c\u043e\u0435\u0439 \u0436\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u0432\u044b\u0431\u043e\u0440 \u0447\u0443\u0442\u044c \u043b\u0438 \u043d\u0435 \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e \u0441\u0432\u0451\u043b\u0441\u044f \u043a <a href=\"https:\/\/github.com\/hajimehoshi\/ebiten\" rel=\"noopener noreferrer nofollow\">Ebitengine<\/a>. \u0415\u0441\u0442\u044c \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u044f\u044e\u0449\u0438\u0435 \u0448\u0442\u0443\u043a\u0438 \u0432\u0440\u043e\u0434\u0435 <a href=\"https:\/\/github.com\/fyne-io\/fyne\" rel=\"noopener noreferrer nofollow\">Fyne<\/a>, <a href=\"https:\/\/github.com\/gioui\/gio\" rel=\"noopener noreferrer nofollow\">Gio<\/a>, <a href=\"https:\/\/github.com\/AllenDang\/giu\" rel=\"noopener noreferrer nofollow\">giu<\/a>, <a href=\"https:\/\/github.com\/go-flutter-desktop\/go-flutter\" rel=\"noopener noreferrer nofollow\">go-flutter<\/a> \u2013 \u043d\u043e \u044f \u0432 \u0438\u0442\u043e\u0433\u0435 \u043d\u0435 \u0441\u0442\u0430\u043b \u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e \u0440\u0430\u0437\u043d\u044b\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c: \u044f\u0432\u043d\u0430\u044f \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c (\u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0441 \u0443\u0447\u0451\u0442\u043e\u043c \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0438 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0439), \u0434\u043b\u044f \u0438\u0433\u0440 (\u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0441 \u0443\u0447\u0451\u0442\u043e\u043c \u0441\u043b\u043e\u0436\u043d\u043e\u0439 \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u0438 \u0448\u044d\u0439\u0434\u0435\u0440\u043e\u0432), \u043e\u0431\u0438\u043b\u0438\u0435 Cgo \u0438 \u043f\u0440\u043e\u0447\u0435\u0435 \u0441\u0443\u0431\u044a\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0435.<\/p>\n<p>\u0427\u0442\u043e \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f Ebitengine, \u0442\u043e \u043f\u0440\u043e dead simple \u2013 \u044d\u0442\u043e \u043d\u0435 \u0448\u0443\u0442\u043a\u0430. \u0421 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u0442\u0430\u043c \u0435\u0441\u0442\u044c \u0430\u0436 \u0446\u0435\u043b\u044b\u0439 Go-\u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0439 \u044f\u0437\u044b\u043a \u0448\u0435\u0439\u0434\u0435\u0440\u043e\u0432, \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0443\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0430\u0442\u043b\u0430\u0441\u044b, \u0435\u0441\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0448\u0440\u0438\u0444\u0442\u043e\u0432 \u0438 \u0430\u0443\u0434\u0438\u043e, \u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0434\u043b\u044f Android \u0438 iOS (\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0439 <a href=\"https:\/\/github.com\/golang\/mobile\" rel=\"noopener noreferrer nofollow\">gomobile<\/a>). \u0421 \u0434\u0440\u0443\u0433\u043e\u0439 \u0436\u0435 \u2014 \u044d\u0442\u043e \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u043e\u043a\u043d\u0430: \u0446\u0438\u043a\u043b \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f\/\u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u0441\u044b\u0440\u043e\u0439 \u0432\u0432\u043e\u0434 \u2014 \u0438 \u0432\u0441\u0451, \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0442\u0435\u0431\u0435 \u0430\u0441\u0441\u0435\u0442\u043e\u0432, \u0432\u0438\u0434\u0436\u0435\u0442\u043e\u0432, \u0444\u0438\u0437\u0438\u043a\u0438 \u0438 \u043f\u0440\u043e\u0447\u0435\u0439 \u043b\u0438\u0440\u0438\u043a\u0438. \u0415\u0441\u0442\u044c \u043d\u0430\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430, \u043d\u043e \u0438\u0445 \u043d\u0435 \u0442\u043e \u0447\u0442\u043e\u0431\u044b \u043c\u043d\u043e\u0433\u043e.<\/p>\n<p>\u041a\u043e\u0440\u043e\u0447\u0435 \u0433\u043e\u0432\u043e\u0440\u044f, \u0443 \u043c\u0435\u043d\u044f \u043d\u0430 \u0440\u0443\u043a\u0430\u0445 \u0431\u044b\u043b \u043c\u043e\u0449\u043d\u044b\u0439 \u0434\u0440\u0430\u0439\u0432\u0435\u0440, \u043d\u043e \u043a\u0430\u0440\u043a\u0430\u0441 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u043e\u0432\u0435\u0440\u0445 \u043d\u0435\u0433\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u043e\u044f\u043b\u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e.<\/p>\n<details class=\"spoiler\">\n<summary>\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043e\u0448\u0438\u0431\u043e\u043a (\u043f\u0430\u043a\u0435\u0442 fault)<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0412 \u0438\u043d\u043e\u043c \u044f\u0437\u044b\u043a\u0435 \u043f\u0430\u043a\u0435\u0442\u0430 <a href=\"https:\/\/pkg.go.dev\/github.com\/a1emax\/youngine@v0.3.0\/fault\" rel=\"noopener noreferrer nofollow\">fault<\/a> \u043d\u0435 \u0431\u044b\u043b\u043e \u0431\u044b \u0432\u043e\u0432\u0441\u0435, \u043a\u0430\u043a \u0438 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0441 \u043d\u0438\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0430 \u0441\u0442\u0430\u0442\u044c\u0438. \u041d\u043e \u0432 Go \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043b\u0438\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043e\u0442\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435 \u0438 \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u0442\u044c \u043f\u0440\u0438\u043d\u0446\u0438\u043f, \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u044f \u0440\u0435\u0448\u0438\u043b \u043f\u0440\u0438\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u044d\u0442\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u2014 \u044d\u0442\u043e \u043d\u0435 \u0441\u043d\u0438\u043c\u0435\u0442 \u0432\u043e\u043f\u0440\u043e\u0441\u044b, \u043d\u043e \u0445\u043e\u0442\u044f \u0431\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u0442 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f.<\/p>\n<p>\u0418\u0442\u0430\u043a, \u0435\u0441\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0438 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0438 \u043e\u0448\u0438\u0431\u043a\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430.<\/p>\n<p>\u041a \u043f\u0435\u0440\u0432\u043e\u043c\u0443 \u0442\u0438\u043f\u0443 \u043e\u0442\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0438 \u0434\u0435\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439, \u0441\u0435\u0442\u0435\u0432\u044b\u043c \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435\u043c, \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f\u043c\u0438 \u043a \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435, \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435\u043c \u0437\u0432\u0443\u043a\u0430 \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435. \u0422\u0430\u043a\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u0430 error, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0438\u0445 \u043d\u0430 \u043c\u0435\u0441\u0442\u0435 \u2014 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e \u0447\u0435\u0440\u0435\u0437 \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u0432\u0440\u0435\u043c\u044f, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0438\u043b\u0438 \u0434\u0430\u0436\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u043e\u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441 \u0437\u0430\u043f\u0438\u0441\u044c\u044e \u0432 \u043b\u043e\u0433.<\/p>\n<p>\u041a\u043e \u0432\u0442\u043e\u0440\u043e\u043c\u0443 \u0442\u0438\u043f\u0443 \u043e\u0442\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u043a\u043e\u0434\u043e\u043c \u2014 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 nil \u0442\u0430\u043c, \u0433\u0434\u0435 \u044d\u0442\u043e \u043d\u0435 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043e (\u0438 \u0432 \u0442\u0435\u043e\u0440\u0438\u0438 \u043c\u043e\u0433\u043b\u043e \u0431\u044b \u0431\u044b\u0442\u044c \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u0442\u0438\u043f\u043e\u0432). \u0414\u043b\u044f \u0442\u0430\u043a\u0438\u0445 \u043e\u0448\u0438\u0431\u043e\u043a \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0430\u043d\u0438\u043a\u0430 \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u0442\u0438\u043f\u0430 error, \u0441\u043e\u043f\u0440\u043e\u0432\u043e\u0436\u0434\u0430\u0435\u043c\u044b\u043c <a href=\"https:\/\/pkg.go.dev\/github.com\/a1emax\/youngine@v0.3.0\/fault#Trace\" rel=\"noopener noreferrer nofollow\">\u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u043e\u0439 \u0441\u0442\u044d\u043a\u0430<\/a> \u2014 \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u0430\u0434\u0435\u043a\u0432\u0430\u0442\u043d\u043e\u0433\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0438\u0445 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043d\u0430 \u043c\u0435\u0441\u0442\u0435 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442, \u043c\u043e\u0436\u043d\u043e \u043b\u0438\u0448\u044c \u0441\u043e\u043e\u0431\u0449\u0438\u0442\u044c \u043e \u043d\u0438\u0445 \u0438 \u0430\u0432\u0430\u0440\u0438\u0439\u043d\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u043d\u0435\u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u0443\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443. \u0412 \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0439 \u0436\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u043e\u043d\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c \u043d\u0435 \u043c\u043e\u0433\u0443\u0442, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u0431\u0435\u0441\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u044b\u043c\u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043f\u043e \u0432\u0441\u0435\u043c\u0443 \u0441\u0442\u044d\u043a\u0443, \u043a\u0430\u043a \u0434\u043b\u044f \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0442\u0438\u043f\u0430.<\/p>\n<p>\u041a\u043e \u0432\u0442\u043e\u0440\u043e\u043c\u0443 \u0436\u0435 \u0442\u0438\u043f\u0443 \u043e\u0442\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u0438 \u043f\u0430\u043d\u0438\u043a\u0438, \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0435 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u043e\u043c. \u041f\u043e\u0432\u043b\u0438\u044f\u0442\u044c \u043d\u0430 \u044d\u0442\u043e\u0442 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043d\u0435\u043b\u044c\u0437\u044f, \u043d\u043e \u0442\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u0441 \u043d\u0438\u043c \u0441\u043e\u0433\u043b\u0430\u0441\u0443\u0435\u0442\u0441\u044f.<\/p>\n<p>\u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0432\u0435\u0440\u0445\u043d\u0435\u043c \u0443\u0440\u043e\u0432\u043d\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 <a href=\"https:\/\/pkg.go.dev\/github.com\/a1emax\/youngine@v0.3.0\/fault#Recover\" rel=\"noopener noreferrer nofollow\">\u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0438\u0437 \u043f\u0430\u043d\u0438\u043a\u0438<\/a>, \u0435\u0441\u043b\u0438 \u043e\u043d\u0430 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430, \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0442 \u043e\u0448\u0438\u0431\u043a\u0438 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 <code>ebiten.Game.Update<\/code>) \u043b\u0438\u0431\u043e \u0435\u0451 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 main). \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0430\u0432\u0430\u0440\u0438\u0439\u043d\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442\u0441\u044f.<\/p>\n<\/div>\n<\/details>\n<p><strong>\u041b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0432\u0440\u0435\u043c\u044f (\u043f\u0430\u043a\u0435\u0442 clock)<\/strong><\/p>\n<p>\u0410\u043d\u0438\u043c\u0430\u0446\u0438\u0438, \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0440\u0430\u0441\u0447\u0451\u0442\u044b, \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0432\u0432\u043e\u0434\u0430, \u0438\u0433\u0440\u043e\u0432\u044b\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u2014 \u0432\u0441\u0451 \u044d\u0442\u043e \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043e \u043d\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u0412\u0441\u0435\u0433\u0434\u0430 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u043f\u043b\u0430\u0432\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435, \u043d\u043e \u0432 \u0442\u043e \u0436\u0435 \u0432\u0440\u0435\u043c\u044f \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0441\u0442\u044c \u0432\u0441\u0435\u0445 \u0447\u0430\u0441\u0442\u0435\u0439 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u043f\u043e\u043b\u0430\u0433\u0430\u0442\u044c\u0441\u044f \u043b\u0438\u0448\u044c \u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u0447\u0430\u0441\u044b, \u043d\u0438\u043a\u0430\u043a \u0438\u0445 \u043d\u0435 \u0430\u0431\u0441\u0442\u0440\u0430\u0433\u0438\u0440\u0443\u044f, \u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0437-\u0437\u0430 \u043f\u0440\u0438\u0440\u043e\u0434\u044b \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043d\u044b\u0445 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 \u0432\u0441\u0435 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0431\u0443\u0434\u0443\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f (\u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c\u0441\u044f) \u043a\u0430\u0436\u0434\u044b\u0439 \u0432 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u043c\u043e\u043c\u0435\u043d\u0442\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0435\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0442\u044c \u0442\u043e \u043b\u0438 \u00ab\u0422\u0435\u0440\u043c\u0438\u043d\u0430\u0442\u043e\u0440: \u0413\u0435\u043d\u0435\u0437\u0438\u0441\u00bb, \u0442\u043e \u043b\u0438 \u00ab\u0428\u043e\u0443 \u0411\u0435\u043d\u043d\u0438 \u0425\u0438\u043b\u043b\u0430\u00bb \u2014 \u0432\u043e \u0432\u0441\u044f\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043e\u0448\u0438\u0431\u043e\u043a. \u0414\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043f\u0435\u0440\u0435\u0434 \u043d\u0430\u0447\u0430\u043b\u043e\u043c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u2014 \u0442\u043e\u0433\u0434\u0430 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0434\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c\u0443 \u0442\u0430\u043a\u043e\u043c\u0443 \u043c\u043e\u043c\u0435\u043d\u0442\u0443, \u0430 \u043f\u043e\u0441\u043b\u0435 \u2014 \u0442\u0435\u043a\u0443\u0449\u0435\u043c\u0443, \u0430 \u0432\u0440\u0435\u043c\u044f \u0441\u0442\u0430\u043d\u0435\u0442 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u043c.<\/p>\n<p>\u0415\u0449\u0451 \u043e\u0434\u043d\u0438\u043c \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u043e\u043c \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043d\u043e\u0439 \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e, \u0447\u0442\u043e \u043e\u0434\u043d\u0430 \u0438 \u0442\u0430 \u0436\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0434\u0430\u0436\u0435 \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0435 \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e\u0435 \u0432\u0440\u0435\u043c\u044f, \u0438\u0437-\u0437\u0430 \u0447\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0440\u0430\u0437\u043d\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e. \u041f\u0440\u0438\u0447\u0451\u043c \u0440\u0435\u0447\u044c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0435 \u0442\u043e\u0440\u043c\u043e\u0437\u0430, \u043d\u043e \u0438 \u043f\u0440\u043e \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0432\u044b\u0441\u043e\u043a\u0443\u044e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043d\u0430 \u0431\u043e\u043b\u0435\u0435 \u043c\u043e\u0449\u043d\u044b\u0445 \u043c\u0430\u0448\u0438\u043d\u0430\u0445, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0434\u0435\u043b\u0430\u0435\u0442 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0438\u0447\u0443\u0442\u044c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u043d\u0435\u043f\u0440\u0438\u0433\u043e\u0434\u043d\u044b\u043c \u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e. \u042d\u0442\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438, \u043d\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e Ebitengine \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0448\u0430\u0433, \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u044f \u0441\u0432\u0435\u0440\u0445\u0443 \u0447\u0430\u0441\u0442\u043e\u0442\u0443 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f (\u0442\u043e \u0435\u0441\u0442\u044c \u0432\u044b\u0437\u043e\u0432\u043e\u0432 <code>ebiten.Game.Update<\/code>) \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c TPS (ticks per second), \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0440\u0430\u0432\u043d\u044b\u043c 60.<\/p>\n<p>\u041f\u0430\u043a\u0435\u0442 <a href=\"https:\/\/pkg.go.dev\/github.com\/a1emax\/youngine@v0.3.0\/clock\" rel=\"noopener noreferrer nofollow\">clock<\/a> \u0432\u0432\u043e\u0434\u0438\u0442 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0435 <a href=\"https:\/\/pkg.go.dev\/github.com\/a1emax\/youngine@v0.3.0\/clock#Ticks\" rel=\"noopener noreferrer nofollow\">\u0442\u0438\u043a\u0438<\/a> \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0435\u0434\u0438\u043d\u0438\u0446 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u2014 \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043a\u0430\u043a \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0442\u0430\u043a \u0438 \u043d\u0430\u043d\u043e\u0441\u0435\u043a\u0443\u043d\u0434\u044b, \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 (\u0433\u043b\u0430\u0432\u043d\u043e\u0435, \u0447\u0442\u043e\u0431\u044b \u0432\u0441\u0435\u0433\u0434\u0430 \u0438 \u0432\u0435\u0437\u0434\u0435 \u0432 \u043e\u0434\u043d\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u043e\u043d\u0438 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e). <a href=\"https:\/\/pkg.go.dev\/github.com\/a1emax\/youngine@v0.3.0\/clock#Clock\" rel=\"noopener noreferrer nofollow\">\u0427\u0430\u0441\u044b<\/a> \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0432\u0440\u0435\u043c\u044f, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u0438 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u0441\u044f \u0434\u043e \u0435\u0451 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f.<\/p>\n<p>\u0414\u0440\u0430\u0439\u0432\u0435\u0440 <a href=\"https:\/\/pkg.go.dev\/github.com\/a1emax\/youngine@v0.3.0\/clock\/driver\/ebitenclock\" rel=\"noopener noreferrer nofollow\">ebitenclock<\/a> \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0447\u0430\u0441\u044b, \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u044e\u0449\u0438\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430 \u043e\u0434\u0438\u043d \u0442\u0438\u043a \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438.<\/p>\n<p><strong>\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0432\u0432\u043e\u0434\u0430 (\u043f\u0430\u043a\u0435\u0442 input)<\/strong><\/p>\n<p>\u0421\u0438\u0441\u0442\u0435\u043c\u044b \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432\u0432\u043e\u0434\u0430, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u044f \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u043b\u0441\u044f, \u043c\u043e\u0436\u043d\u043e \u0443\u0441\u043b\u043e\u0432\u043d\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u043d\u0430 \u0434\u0432\u0430 \u043d\u0435\u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u044e\u0449\u0438\u0445\u0441\u044f \u043a\u043b\u0430\u0441\u0441\u0430 \u2014 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u044f\u0445 \u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0435 \u043f\u0440\u044f\u043c\u043e\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0442\u0435\u043a\u0443\u0449\u0435\u043c\u0443 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044e. \u041f\u0435\u0440\u0432\u044b\u0435 \u0443\u0434\u043e\u0431\u043d\u044b \u043f\u0440\u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0438 GUI \u2014 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, key press \u0438\u043b\u0438 mouse move) \u043f\u0440\u0438\u0432\u044f\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043a \u0435\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c \u0438 \u0441\u043a\u0440\u044b\u0432\u0430\u044e\u0442 \u043b\u043e\u0433\u0438\u043a\u0443 \u043e\u0442\u043d\u0435\u0441\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043c\u044b\u0448\u0438, \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0444\u043e\u043a\u0443\u0441\u0430 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044b \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435. \u0412\u0442\u043e\u0440\u044b\u0435 \u0436\u0435 \u0443\u0434\u043e\u0431\u043d\u044b \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u0433\u0440\u043e\u0432\u043e\u0433\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044f \u043d\u0435 \u0440\u0430\u0437\u043c\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0443\u044e \u043b\u043e\u0433\u0438\u043a\u0443 \u043f\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c \u0441\u043e\u0431\u044b\u0442\u0438\u0439 (\u0435\u0441\u043b\u0438 \u043e\u043d\u0430 \u0432\u043e\u043e\u0431\u0449\u0435 \u0432 \u043d\u0438\u0445 \u0432\u043f\u0438\u0448\u0435\u0442\u0441\u044f). \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432 \u0438\u0433\u0440\u0430\u0445 \u0435\u0441\u0442\u044c \u0438 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441, \u0438 \u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435, \u0438\u0433\u0440\u043e\u0432\u044b\u0435 \u0434\u0432\u0438\u0436\u043a\u0438 \u043e\u0431\u044b\u0447\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442 \u043e\u0431\u0430 \u043a\u043b\u0430\u0441\u0441\u0430, \u0442\u0430\u043a \u0438\u043b\u0438 \u0438\u043d\u0430\u0447\u0435 \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u044f \u0438\u0445 \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439.<\/p>\n<p>\u0412 \u043f\u0430\u043a\u0435\u0442\u0435 <a href=\"https:\/\/pkg.go.dev\/github.com\/a1emax\/youngine@v0.3.0\/input\" rel=\"noopener noreferrer nofollow\">input<\/a> \u043e\u043f\u0438\u0441\u0430\u043d <a href=\"https:\/\/pkg.go.dev\/github.com\/a1emax\/youngine@v0.3.0\/input#Input\" rel=\"noopener noreferrer nofollow\">\u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b<\/a>, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c\u044b\u0439 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u043e\u043c <a href=\"https:\/\/pkg.go.dev\/github.com\/a1emax\/youngine@v0.3.0\/input\/driver\/ebiteninput\" rel=\"noopener noreferrer nofollow\">ebiteninput<\/a> \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 Ebitengine. \u042d\u0442\u043e\u0442 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442 \u0444\u0438\u043a\u0441\u0430\u0446\u0438\u044e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0432\u0432\u043e\u0434\u0430 \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f (\u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0447\u0430\u0441\u043e\u0432) \u0438 \u0432 \u0445\u043e\u0434\u0435 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043d\u0435\u043c\u0443 \u0434\u043b\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438. \u0415\u0441\u043b\u0438 \u043d\u0430 \u043a\u0430\u043a\u043e\u043c-\u0442\u043e \u0435\u0451 \u0448\u0430\u0433\u0435 \u0447\u0430\u0441\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f, \u043e\u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043f\u043e\u043c\u0435\u0447\u0435\u043d\u0430 (Mark), \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0431\u044b\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u043d\u0451\u043d\u043d\u043e\u0439 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0448\u0430\u0433\u0430\u0445 \u2014 \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0448\u0430\u0433\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u00ab\u043f\u043e\u0433\u043b\u043e\u0449\u0430\u044e\u0442\u00bb \u0447\u0430\u0441\u0442\u0438 \u0432\u0432\u043e\u0434\u0430.<\/p>\n<details class=\"spoiler\">\n<summary>\u0418\u0441\u0442\u043e\u0440\u0438\u044f \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043c\u043e\u044f \u0434\u043e\u0447\u044c \u043d\u0430\u0448\u043b\u0430 \u0442\u043e \u043b\u0438 \u0431\u0430\u0433, \u0442\u043e \u043b\u0438 \u0444\u0438\u0447\u0443<\/summary>\n<div class=\"spoiler__content\">\n<p>\u041a\u043e\u0433\u0434\u0430 \u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b \u043f\u0435\u0440\u0432\u0443\u044e \u0438\u0433\u0440\u0443 \u0438 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b, \u043c\u043e\u044f \u0434\u043e\u0447\u044c, \u0438\u0433\u0440\u0430\u044f \u0432 \u043d\u0435\u0451 \u043d\u0430 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0435, \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0430\u0441\u044c \u0441 \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439: \u0435\u0441\u043b\u0438 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043a\u043e\u0441\u043d\u0443\u0442\u044c\u0441\u044f \u044d\u043a\u0440\u0430\u043d\u0430 \u0431\u043e\u043b\u044c\u0448\u0435 \u0447\u0435\u043c \u0434\u0432\u0443\u043c\u044f \u043f\u0430\u043b\u044c\u0446\u0430\u043c\u0438, \u0430 \u043f\u043e\u0442\u043e\u043c \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0436\u0435 \u0438\u0445 \u0443\u0431\u0440\u0430\u0442\u044c, \u0442\u043e \u0437\u0430\u043a\u043e\u043d\u0447\u0430\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u0432\u0430 \u0442\u0430\u0447\u0430, \u0430 \u043e\u0431 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442 \u0434\u043e\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c, \u0445\u043e\u0442\u044f \u044d\u043a\u0440\u0430\u043d \u0443\u0436\u0435 \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0442\u0440\u043e\u0433\u0430\u0435\u0442 \u2014 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, \u043e\u043d\u0438 \u0437\u0430\u0432\u0438\u0441\u043d\u0443\u0442, \u0438 \u0447\u0442\u043e\u0431\u044b \u043e\u0442 \u043d\u0438\u0445 \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f, \u043d\u0443\u0436\u043d\u043e \u0442\u0440\u043e\u0433\u0430\u0442\u044c \u044d\u043a\u0440\u0430\u043d \u0445\u0438\u0442\u0440\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442. \u042d\u0442\u0430 \u0431\u0430\u0433\u043e\u0444\u0438\u0447\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0433\u0434\u0435-\u0442\u043e \u043d\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u0435 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 \u0441\u0435\u043d\u0441\u043e\u0440\u043d\u043e\u0433\u043e \u044d\u043a\u0440\u0430\u043d\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0433\u043e Ebitengine, \u0438 \u0434\u043b\u044f \u043d\u0435\u0451 \u0435\u0441\u0442\u044c <s>\u043a\u043e\u0441\u0442\u044b\u043b\u044c<\/s> \u0432\u043d\u0435\u0448\u043d\u044f\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u0432 ebiteninput. \u0415\u0441\u043b\u0438 \u043a\u0442\u043e-\u0442\u043e \u0432 \u043a\u0443\u0440\u0441\u0435, \u0441 \u0447\u0435\u043c \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0442\u0430\u043a\u043e\u0435 \u0441\u0442\u0440\u0430\u043d\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u2014 \u043d\u0430\u043f\u0438\u0448\u0438\u0442\u0435 \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445, \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e.<\/p>\n<\/div>\n<\/details>\n<p>\u041f\u0440\u043e\u0442\u043e\u043a\u043e\u043b (\u0431\u0435\u0437 \u0437\u043d\u0430\u043d\u0438\u044f \u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0435) \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f <a href=\"https:\/\/pkg.go.dev\/github.com\/a1emax\/youngine@v0.3.0\/input#Controller\" rel=\"noopener noreferrer nofollow\">\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430\u043c\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432\u0432\u043e\u0434\u0430<\/a>. \u041d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u043d (Actuate), \u0435\u0441\u043b\u0438 \u043e\u043d \u0433\u043e\u0442\u043e\u0432 \u043a \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0432\u0432\u043e\u0434\u0430, \u043b\u0438\u0431\u043e \u043f\u043e\u0434\u0430\u0432\u043b\u0435\u043d (Inhibit), \u0435\u0441\u043b\u0438 \u043e\u043d \u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0435\u0433\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c. \u041a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044e\u0449\u0438\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f, \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u0432 \u043f\u0430\u043a\u0435\u0442\u0430\u0445 \u0433\u0440\u0443\u043f\u043f\u044b <a href=\"https:\/\/pkg.go.dev\/github.com\/a1emax\/youngine@v0.3.0\/input\/element\" rel=\"noopener noreferrer nofollow\">element<\/a>, \u043d\u043e \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043c\u043e\u0436\u0435\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0441 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0439 \u043b\u043e\u0433\u0438\u043a\u043e\u0439. \u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u044e, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e \u0438\u0445 \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u2014 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u043c\u044b\u0448\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u043d\u0430\u0436\u0430\u0442\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u0430\u044f \u043a\u043b\u0430\u0432\u0438\u0448\u0430 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044b, \u043b\u0438\u0431\u043e \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442 \u2014 \u0440\u0435\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u043d\u044b\u0439 \u0432\u0432\u043e\u0434 \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u043c\u044b\u0448\u044c \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u0433\u0440\u0430\u043d\u0438\u0446\u0430\u0445.<\/p>\n<p>\u041f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 \u0438 \u0438\u0445 \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u044e\/\u043f\u043e\u0434\u0430\u0432\u043b\u0435\u043d\u0438\u0435, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0438\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u0439, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 GUI, \u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u0434\u0430\u043b\u044c\u0448\u0435.<\/p>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b GUI \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0442 \u0441 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430\u043c\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0438\u0445 \u0438\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432\u0432\u043e\u0434\u0430, \u0430 \u0442\u0435, \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0438\u0435 \u0438\u0445 \u0447\u0430\u0441\u0442\u0438 \u0432\u0432\u043e\u0434\u0430 \u043f\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c\u043e\u043c\u0443 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u043e\u043c. \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043b\u0430\u0433\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430, \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 (\u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432 \u0438\u0433\u0440\u0430\u0445 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0435\u0442) \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044f \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043b\u0438\u0431\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432\u0432\u043e\u0434\u0430, \u043b\u0438\u0431\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0442\u0430\u043a \u0436\u0435 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e.<\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u0434\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u043a\u043d\u043e\u043f\u043a\u0438<\/summary>\n<div class=\"spoiler__content\">\n<p><a href=\"https:\/\/github.com\/a1emax\/dragon\/blob\/v0.1.0\/pkg\/window\/common\/button\/controller_desktop.go\" rel=\"noopener noreferrer nofollow\">dragon\/pkg\/window\/common\/button\/controller_desktop.go<\/a><\/p>\n<pre><code class=\"go\">\/\/go:build !android &amp;&amp; !ios  package button  import ( \"github.com\/a1emax\/youngine\/basic\" \"github.com\/a1emax\/youngine\/input\" \"github.com\/a1emax\/youngine\/input\/element\/mousebutton\" \"github.com\/a1emax\/youngine\/input\/element\/mousecursor\" )  func (b *buttonImpl[R]) initController(config Config) { b.controller = mousecursor.NewController(mousecursor.ControllerConfig[basic.None]{ Cursor: config.Input.Mouse().Cursor(),  HitTest: func(position basic.Vec2) bool { return b.region.Rect().Contains(position) },  Slave: mousebutton.NewController(mousebutton.ControllerConfig[mousecursor.Background[basic.None]]{ Button: config.Input.Mouse().Button(input.MouseButtonCodeLeft), Clock:  config.Clock,  OnPress: func(event mousebutton.PressEvent[mousecursor.Background[basic.None]]) { b.isPressed = true  if config.OnPress != nil { config.OnPress(PressEvent{ Duration: event.Duration, }) } }, OnUp: func(event mousebutton.UpEvent[mousecursor.Background[basic.None]]) { b.isPressed = false  if config.OnClick != nil { config.OnClick(ClickEvent{}) } }, OnGone: func(event mousebutton.GoneEvent) { b.isPressed = false }, }), }) }<\/code><\/pre>\n<p><a href=\"https:\/\/github.com\/a1emax\/dragon\/blob\/v0.1.0\/pkg\/window\/common\/button\/controller_mobile.go\" rel=\"noopener noreferrer nofollow\">dragon\/pkg\/window\/common\/button\/controller_mobile.go<\/a><\/p>\n<pre><code class=\"go\">\/\/go:build android || ios  package button  import ( \"github.com\/a1emax\/youngine\/basic\" \"github.com\/a1emax\/youngine\/input\/element\/touchscreentouch\" )  func (b *buttonImpl[R]) initController(config Config) { b.controller = touchscreentouch.NewController(touchscreentouch.ControllerConfig[basic.None]{ Touchscreen: config.Input.Touchscreen(), Clock:       config.Clock,  HitTest: func(position basic.Vec2) bool { return b.region.Rect().Contains(position) },  OnHover: func(event touchscreentouch.HoverEvent[basic.None]) { b.isPressed = true  if config.OnPress != nil { config.OnPress(PressEvent{ Duration: event.Duration, }) } }, OnEnd: func(event touchscreentouch.EndEvent[basic.None]) { b.isPressed = false  if config.OnClick != nil { config.OnClick(ClickEvent{}) } }, OnGone: func(event touchscreentouch.GoneEvent) { b.isPressed = false }, }) }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p><strong>\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f (\u043f\u0430\u043a\u0435\u0442 scene)<\/strong><\/p>\n<p>GUI \u0432 \u043f\u0430\u043a\u0435\u0442\u0435 <a href=\"https:\/\/pkg.go.dev\/github.com\/a1emax\/youngine@v0.3.0\/scene\" rel=\"noopener noreferrer nofollow\">scene<\/a> \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u0432\u043f\u043e\u043b\u043d\u0435 \u0442\u0438\u043f\u043e\u0432\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u2014 \u0432 \u0432\u0438\u0434\u0435 \u0434\u0435\u0440\u0435\u0432\u0430 <a href=\"https:\/\/pkg.go.dev\/github.com\/a1emax\/youngine@v0.3.0\/scene#Element\" rel=\"noopener noreferrer nofollow\">\u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432<\/a>. \u041d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0441\u0442\u0430\u0434\u0438\u0438:<\/p>\n<ul>\n<li>\n<p><strong>\u0410\u043a\u0442\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f<\/strong> (Refresh). \u041d\u0430\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u043f\u0435\u0440\u0432\u043e\u0439 \u0434\u043b\u044f <em>\u0432\u0441\u0435\u0445<\/em> \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432. \u041b\u043e\u0433\u0438\u043a\u0430 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0434\u0438\u0438 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u2014 \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u044d\u0442\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430.<\/p>\n<\/li>\n<li>\n<p><strong>\u0418\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/strong> (Exclude). \u042f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u0434\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0434\u043b\u044f <em>\u0441\u043a\u0440\u044b\u0442\u044b\u0445<\/em> \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u2014 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445, \u0438\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a, \u0438\u043b\u0438 \u043d\u0430\u0445\u043e\u0434\u044f\u0449\u0438\u0445\u0441\u044f \u043d\u0430 \u043d\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435. \u041d\u0430 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0434\u0438\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043e\u0431\u044b\u0447\u043d\u043e \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u0435\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b, \u0435\u0441\u043b\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e \u0441\u0442\u0430\u043b \u0441\u043a\u0440\u044b\u0442\u044b\u043c, \u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u0442, \u0435\u0441\u043b\u0438 \u0431\u044b\u043b \u0441\u043a\u0440\u044b\u0442\u044b\u043c \u0438 \u0440\u0430\u043d\u044c\u0448\u0435.<\/p>\n<\/li>\n<li>\n<p><strong>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430<\/strong> (Prepare). \u041d\u0430\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f <em>\u0432\u0438\u0434\u0438\u043c\u044b\u0445<\/em> \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432. \u041d\u0430 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0434\u0438\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u2014 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u043e\u0436\u0435\u0442 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0441\u0432\u043e\u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u044b\u0435 \u0433\u0430\u0431\u0430\u0440\u0438\u0442\u044b (Outline), \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0447\u0442\u0451\u0442 \u043f\u0440\u0438 \u0435\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440.<\/p>\n<\/li>\n<li>\n<p><strong>\u0420\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435<\/strong> (Arrange). \u041a\u0430\u043a \u0438 \u0441\u0442\u0430\u0434\u0438\u044f \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438, \u043d\u0430\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f <em>\u0432\u0438\u0434\u0438\u043c\u044b\u0445<\/em> \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432. \u041d\u0430 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0434\u0438\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0442\u0441\u044f \u0438\u0442\u043e\u0433\u043e\u0432\u044b\u0435 \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438 \u0440\u0430\u0437\u043c\u0435\u0440 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430. \u0422\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u044e\u0449\u0438\u0439 \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 (Region.Rect) \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u0435\u043d.<\/p>\n<\/li>\n<li>\n<p><strong>\u0410\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u044f<\/strong> (Actuate). \u041d\u0430\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f <em>\u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445<\/em> \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432. \u041d\u0430 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0434\u0438\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043e\u0431\u044b\u0447\u043d\u043e \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0443\u0435\u0442 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0432\u0432\u043e\u0434\u0430, \u0435\u0441\u043b\u0438 \u043e\u043d \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d. \u0412 \u043e\u0431\u0449\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u0441\u0435 <em>\u0432\u0438\u0434\u0438\u043c\u044b\u0435<\/em> \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0441\u0447\u0438\u0442\u0430\u044e\u0442\u0441\u044f <em>\u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c\u0438<\/em>, \u0430 <em>\u0441\u043a\u0440\u044b\u0442\u044b\u0435<\/em> \u2014 <em>\u043d\u0435\u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c\u0438<\/em>, \u043d\u043e \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u043c\u043e\u0436\u0435\u0442 \u0440\u0435\u0448\u0438\u0442\u044c \u0438\u043d\u0430\u0447\u0435 \u2014 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0435\u0442 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044e \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446, \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f, \u043d\u043e \u043d\u0430 \u0432\u0432\u043e\u0434 \u043d\u0435 \u0440\u0435\u0430\u0433\u0438\u0440\u0443\u0435\u0442.<\/p>\n<\/li>\n<li>\n<p><strong>\u041f\u043e\u0434\u0430\u0432\u043b\u0435\u043d\u0438\u0435<\/strong> (Inhibit). \u041d\u0430\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f <em>\u043d\u0435\u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445<\/em> \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 (\u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0434\u043b\u044f <em>\u0441\u043a\u0440\u044b\u0442\u044b\u0445<\/em>, \u044f\u0432\u043b\u044f\u044f\u0441\u044c \u0434\u043b\u044f \u043d\u0438\u0445 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439). \u041d\u0430 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0434\u0438\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043e\u0431\u044b\u0447\u043d\u043e \u043f\u043e\u0434\u0430\u0432\u043b\u044f\u0435\u0442 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0432\u0432\u043e\u0434\u0430, \u0435\u0441\u043b\u0438 \u043e\u043d \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d.<\/p>\n<\/li>\n<li>\n<p><strong>\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435<\/strong> (Update). \u041d\u0430\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f <em>\u0432\u0438\u0434\u0438\u043c\u044b\u0445<\/em> \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043d\u0438\u0445 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u043f\u0435\u0440\u0435\u0434 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c.<\/p>\n<\/li>\n<li>\n<p><strong>\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435<\/strong> (Draw). \u041d\u0430\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f <em>\u0432\u0438\u0434\u0438\u043c\u044b\u0445<\/em> \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u043f\u0440\u0438\u0447\u0451\u043c \u043f\u0435\u0440\u0435\u0434 \u043d\u0435\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441\u0442\u0430\u0434\u0438\u0439 \u043e\u0442 \u0430\u043a\u0442\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437 \u2014 \u0438\u0437-\u0437\u0430 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u0448\u0430\u0433\u0430 \u0432 Ebitengine \u043f\u0435\u0440\u0435\u0434 \u043e\u0434\u043d\u0438\u043c \u0432\u044b\u0437\u043e\u0432\u043e\u043c <code>ebiten.Game.Draw<\/code> \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u044b\u0437\u043e\u0432\u043e\u0432 <code>ebiten.Game.Update<\/code>.<\/p>\n<\/li>\n<\/ul>\n<p>\u041a\u0430\u0436\u0434\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0441\u0432\u044f\u0437\u0430\u043d \u0441 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c <a href=\"https:\/\/pkg.go.dev\/github.com\/a1emax\/youngine@v0.3.0\/scene#Region\" rel=\"noopener noreferrer nofollow\">\u0440\u0435\u0433\u0438\u043e\u043d\u043e\u043c<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0435\u0433\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u044e\u0449\u0438\u0439 \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a (Rect). \u041a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u0442\u0438\u043f \u0440\u0435\u0433\u0438\u043e\u043d\u0430 \u0437\u0430\u0434\u0430\u0451\u0442 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u2014 \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0433\u043e \u043e\u043d \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0438 \u043f\u043e\u0437\u0438\u0446\u0438\u043e\u043d\u0438\u0440\u0443\u0435\u0442 \u0435\u0433\u043e \u043d\u0430 \u0441\u0442\u0430\u0434\u0438\u0438 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u044f. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 <a href=\"https:\/\/pkg.go.dev\/github.com\/a1emax\/youngine@v0.3.0\/scene\/element\/flexbox\" rel=\"noopener noreferrer nofollow\">flexbox<\/a> \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0440\u0435\u0433\u0438\u043e\u043d\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0434\u043b\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0445\u0441\u044f \u0432 \u043d\u0451\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u0435 \u0434\u043b\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 basis, grow, shrink \u0438 align-self.<\/p>\n<p>\u0422\u0438\u043f \u044d\u043a\u0440\u0430\u043d\u0430, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442, \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u043c. \u0414\u043b\u044f \u0432\u0438\u0434\u0436\u0435\u0442\u043e\u0432, \u0438\u043c\u0435\u044e\u0449\u0438\u0445 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435, \u044d\u043a\u0440\u0430\u043d\u043e\u043c \u0437\u0430 \u043d\u0435\u0438\u043c\u0435\u043d\u0438\u0435\u043c \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f <code>*ebiten.Image<\/code>, \u043d\u043e \u0434\u043b\u044f \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432) \u044d\u0442\u043e\u0442 \u0442\u0438\u043f \u043e\u0431\u044b\u0447\u043d\u043e \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0438 \u043d\u0435\u0442 \u0441\u043c\u044b\u0441\u043b\u0430 \u043f\u0440\u0438\u0432\u044f\u0437\u044b\u0432\u0430\u0442\u044c \u0438\u0445 \u043a \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435.<\/p>\n<p>\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430, \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0435 \u043e\u0442 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b, \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u043f\u0430\u043a\u0435\u0442\u0430\u0445 \u0433\u0440\u0443\u043f\u043f\u044b <a href=\"https:\/\/pkg.go.dev\/github.com\/a1emax\/youngine@v0.3.0\/scene\/element\" rel=\"noopener noreferrer nofollow\">element<\/a>: \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b <a href=\"https:\/\/pkg.go.dev\/github.com\/a1emax\/youngine@v0.3.0\/scene\/element\/flexbox\" rel=\"noopener noreferrer nofollow\">flexbox<\/a> \u0438 <a href=\"https:\/\/pkg.go.dev\/github.com\/a1emax\/youngine@v0.3.0\/scene\/element\/overlay\" rel=\"noopener noreferrer nofollow\">overlay<\/a>, \u0432\u0440\u0430\u043f\u043f\u0435\u0440 <a href=\"https:\/\/pkg.go.dev\/github.com\/a1emax\/youngine@v0.3.0\/scene\/element\/padding\" rel=\"noopener noreferrer nofollow\">padding<\/a>, \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u044c \u0441\u0442\u0440\u0430\u043d\u0438\u0446 <a href=\"https:\/\/pkg.go.dev\/github.com\/a1emax\/youngine@v0.3.0\/scene\/element\/pageset\" rel=\"noopener noreferrer nofollow\">pageset<\/a> \u0438 \u043f\u0443\u0441\u0442\u043e\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 <a href=\"https:\/\/pkg.go.dev\/github.com\/a1emax\/youngine@v0.3.0\/scene\/element\/nothing\" rel=\"noopener noreferrer nofollow\">nothing<\/a>. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043f\u043e\u043a\u0430 \u0447\u0442\u043e \u0432\u0441\u0435 \u0432\u0438\u0434\u0436\u0435\u0442\u044b, \u0434\u0430\u0436\u0435 \u043a\u043d\u043e\u043f\u043a\u0438, \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u043b\u0438\u0441\u044c \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u043c\u0438 \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0441\u0442\u0438\u043b\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0434\u043b\u044f \u043c\u043e\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432, \u044f \u043d\u0435 \u0441\u0442\u0430\u043b \u0434\u0435\u043b\u0430\u0442\u044c \u0438\u0445 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u043c\u0438 \u2014 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e \u0442\u0430\u043a\u0438\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0432 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u043c \u0431\u0443\u0434\u0443\u0449\u0435\u043c, \u0435\u0441\u043b\u0438 Youngine \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0435\u043d \u0430\u0443\u0434\u0438\u0442\u043e\u0440\u0438\u0438. \u0412 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0436\u0435 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u0432\u0438\u0434\u0436\u0435\u0442\u043e\u0432 \u043f\u043e\u043c\u043e\u0433\u0443\u0442 \u043f\u0430\u043a\u0435\u0442\u044b <a href=\"https:\/\/pkg.go.dev\/github.com\/a1emax\/youngine@v0.3.0\/x\/colors\" rel=\"noopener noreferrer nofollow\">x\/colors<\/a>, <a href=\"https:\/\/pkg.go.dev\/github.com\/a1emax\/youngine@v0.3.0\/x\/bitmap\" rel=\"noopener noreferrer nofollow\">x\/bitmap<\/a>, <a href=\"https:\/\/pkg.go.dev\/github.com\/a1emax\/youngine@v0.3.0\/x\/roundrect\" rel=\"noopener noreferrer nofollow\">x\/roundrect<\/a> \u0438 <a href=\"https:\/\/pkg.go.dev\/github.com\/a1emax\/youngine@v0.3.0\/x\/textview\" rel=\"noopener noreferrer nofollow\">x\/textview<\/a>.<\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u0434\u0430 \u0432\u0438\u0434\u0436\u0435\u0442\u0430 \u0441 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439<\/summary>\n<div class=\"spoiler__content\">\n<p><a href=\"https:\/\/github.com\/a1emax\/dragon\/blob\/v0.1.0\/pkg\/window\/debuginfo\/debuginfo.go\" rel=\"noopener noreferrer nofollow\">dragon\/pkg\/window\/debuginfo\/debuginfo.go<\/a><\/p>\n<pre><code class=\"go\">package debuginfo  import ( \"fmt\" \"runtime\"  \"github.com\/a1emax\/youngine\/basic\" \"github.com\/a1emax\/youngine\/scene\" \"github.com\/a1emax\/youngine\/scene\/element\/flexbox\" \"github.com\/a1emax\/youngine\/scene\/element\/overlay\" \"github.com\/hajimehoshi\/ebiten\/v2\"  \"dragon\/pkg\/global\/assets\" \"dragon\/pkg\/global\/vars\" \"dragon\/pkg\/window\/common\" \"dragon\/pkg\/window\/common\/colorarea\" \"dragon\/pkg\/window\/common\/label\" )  type DebugInfo[R scene.Region] interface { common.Element[R] }  func New[R scene.Region](region R) DebugInfo[R] { var maxMemSys uint64 var maxMemPauseNs uint64  return overlay.New(region, overlay.Config{ StateFunc: func(state overlay.State) overlay.State { state = overlay.State{}  state.SetHeight(24.0)  return state }, }, colorarea.New(overlay.NewRegion(overlay.RegionConfig{ StateFunc: func(state overlay.RegionState) overlay.RegionState { state = overlay.RegionState{}  return state }, }), colorarea.Config{ StateFunc: func(state colorarea.State) colorarea.State { state = colorarea.State{}  state.Color = assets.Colors.DebugInfoBackground  return state }, }),  flexbox.New(overlay.NewRegion(overlay.RegionConfig{ StateFunc: func(state overlay.RegionState) overlay.RegionState { state = overlay.RegionState{}  return state }, }), flexbox.Config{ StateFunc: func(state flexbox.State) flexbox.State { state = flexbox.State{}  state.Direction = flexbox.DirectionRow state.JustifyContent = flexbox.JustifySpaceBetween state.AlignItems = flexbox.AlignCenter  return state }, }, label.New(flexbox.NewRegion(flexbox.RegionConfig{ StateFunc: func(state flexbox.RegionState) flexbox.RegionState { state = flexbox.RegionState{}  return state }, }), label.Config{ StateFunc: func(state label.State) label.State { state = label.State{}  state.SetWidth(150.0) state.Text = fmt.Sprintf(\"%.2f \/ %.2f\", ebiten.ActualFPS(), ebiten.ActualTPS()) state.TextFontFace = assets.FontFaces.DebugInfoText state.TextColor = assets.Colors.DebugInfoText  return state }, }),  label.New(flexbox.NewRegion(flexbox.RegionConfig{ StateFunc: func(state flexbox.RegionState) flexbox.RegionState { state = flexbox.RegionState{}  return state }, }), label.Config{ StateFunc: func(state label.State) label.State { state = label.State{}  state.SetWidth(150.0) state.Text = fmt.Sprintf(\"%dx%d \/ %dx%d\", vars.Ebiten.ScreenWidth, vars.Ebiten.ScreenHeight, vars.Ebiten.OutsideWidth, vars.Ebiten.OutsideHeight, ) state.TextFontFace = assets.FontFaces.DebugInfoText state.TextColor = assets.Colors.DebugInfoText  return state }, }),  label.New(flexbox.NewRegion(flexbox.RegionConfig{ StateFunc: func(state flexbox.RegionState) flexbox.RegionState { state = flexbox.RegionState{}  return state }, }), label.Config{ StateFunc: func(state label.State) label.State { state = label.State{}  var mem runtime.MemStats runtime.ReadMemStats(&amp;mem)  if mem.Sys &gt; maxMemSys { maxMemSys = mem.Sys }  memPauseNs := mem.PauseNs[(mem.NumGC+255)%256] if memPauseNs &gt; maxMemPauseNs { maxMemPauseNs = memPauseNs }  state.SetWidth(150.0) state.Text = fmt.Sprintf(\"%.2f MiB (%.2f ms)\", basic.Float(maxMemSys)\/(1024*1024), basic.Float(maxMemPauseNs)\/1_000_000, ) state.TextFontFace = assets.FontFaces.DebugInfoText state.TextColor = assets.Colors.DebugInfoText  return state }, }), ), ) }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u041f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u0434\u0430 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043a\u043d\u043e\u043f\u043a\u0438<\/summary>\n<div class=\"spoiler__content\">\n<p><a href=\"https:\/\/github.com\/a1emax\/dragon\/blob\/v0.1.0\/pkg\/window\/common\/button\/shape.go\" rel=\"noopener noreferrer nofollow\">dragon\/pkg\/window\/common\/button\/shape.go<\/a><\/p>\n<pre><code class=\"go\">package button  import ( \"github.com\/a1emax\/youngine\/basic\" \"github.com\/a1emax\/youngine\/x\/roundrect\" \"github.com\/hajimehoshi\/ebiten\/v2\" )  type shapePart struct { shapeKey basic.Opt[shapeKey] shape    *ebiten.Image }  type shapeKey struct { size         basic.Vec2 cornerRadius basic.Float }  func (b *buttonImpl[R]) setupShape() { r := b.region.Rect()  var cornerRadius basic.Float if b.state.CornerRadius.IsSet() { cornerRadius = b.state.CornerRadius.Get() } else { cornerRadius = r.Height() \/ 2 }  key := shapeKey{ size:         r.Size, cornerRadius: cornerRadius, }  if b.shapeKey.IsSet() &amp;&amp; b.shapeKey.Get() == key { return }  b.disposeShape()  bmp := roundrect.Fill(key.size.X(), key.size.Y(), key.cornerRadius, key.cornerRadius) img := ebiten.NewImage(bmp.Width(), bmp.Height()) img.WritePixels(bmp.Data())  b.shapeKey = basic.SetOpt(key) b.shape = img }  func (b *buttonImpl[R]) drawShape(screen *ebiten.Image) { if !b.shapeKey.IsSet() { return }  clr := b.color(b.state.PrimaryColor, b.state.PressedColor) if clr == nil { return }  r := b.region.Rect()  op := &amp;ebiten.DrawImageOptions{} op.GeoM.Translate(r.Left(), r.Top()) op.ColorScale.ScaleWithColor(clr)  screen.DrawImage(b.shape, op) }  func (b *buttonImpl[R]) disposeShape() { if !b.shapeKey.IsSet() { return }  b.shape.Deallocate()  b.shapePart = shapePart{} }<\/code><\/pre>\n<p><a href=\"https:\/\/github.com\/a1emax\/dragon\/blob\/v0.1.0\/pkg\/window\/common\/button\/text.go\" rel=\"noopener noreferrer nofollow\">dragon\/pkg\/window\/common\/button\/text.go<\/a><\/p>\n<pre><code class=\"go\">package button  import ( \"math\"  \"github.com\/a1emax\/youngine\/basic\" \"github.com\/a1emax\/youngine\/x\/textview\" \"github.com\/hajimehoshi\/ebiten\/v2\" \"github.com\/hajimehoshi\/ebiten\/v2\/text\" \"golang.org\/x\/image\/font\" )  type textPart struct { textKey basic.Opt[textKey] text    textview.SingleLine }  type textKey struct { width    basic.Float fontFace font.Face text     string }  func (b *buttonImpl[R]) setupText() { r := b.region.Rect()  key := textKey{ width:    r.Width(), fontFace: b.state.TextFontFace, text:     b.state.Text, }  if b.textKey.IsSet() &amp;&amp; b.textKey.Get() == key { return }  b.disposeText()  if key.fontFace == nil || key.text == \"\" { return }  b.textKey = basic.SetOpt(key) b.text = textview.NewSingleLine(key.width, key.fontFace, key.text) }  func (b *buttonImpl[R]) drawText(screen *ebiten.Image) { if !b.textKey.IsSet() { return }  clr := b.color(b.state.TextPrimaryColor, b.state.TextPressedColor) if clr == nil { return }  r := b.region.Rect()  left := r.Left() + (r.Width()-b.text.Width())\/2 top := r.Top() + (r.Height()-b.text.Height())\/2  b.text.Draw(textview.StringDrawerFunc(func(s string, x, y basic.Float, fontFace font.Face) { text.Draw(screen, s, fontFace, int(math.Floor(left+x)), int(math.Floor(top+y)), clr) })) }  func (b *buttonImpl[R]) disposeText() { b.textPart = textPart{} }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p><strong>\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0430\u0441\u0441\u0435\u0442\u043e\u0432 (\u043f\u0430\u043a\u0435\u0442 asset)<\/strong><\/p>\n<p>\u0421 \u0430\u0441\u0441\u0435\u0442\u0430\u043c\u0438 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441 \u0432\u0441\u0435\u0433\u0434\u0430 \u0432 \u0442\u043e\u043c, \u0433\u0434\u0435 \u0438\u0445 \u0432\u0437\u044f\u0442\u044c. \u0415\u0441\u043b\u0438 \u0436\u0435 \u043e\u043d\u0438 \u0435\u0441\u0442\u044c, \u0442\u043e \u0438\u0445 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043a\u0430\u043a \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0434\u043b\u044f \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0438\u0433\u0440 \u0441 \u0434\u0435\u0441\u044f\u0442\u043a\u043e\u043c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0438 \u0448\u0440\u0438\u0444\u0442\u043e\u0432, \u0442\u0430\u043a \u0438 \u0432\u0435\u0441\u044c\u043c\u0430 \u0441\u043b\u043e\u0436\u043d\u043e\u0439 \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u2014 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0439 \u0441\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e\u043c \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432 (\u0444\u0430\u0439\u043b\u043e\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430, \u0441\u0435\u0442\u044c), \u043a\u0430\u0441\u043a\u0430\u0434\u043d\u043e\u0439, \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0438 \u043a\u0430\u043a\u043e\u0439 \u0443\u0433\u043e\u0434\u043d\u043e \u0435\u0449\u0451.<\/p>\n<p>\u0412 \u043f\u0430\u043a\u0435\u0442\u0435 <a href=\"https:\/\/pkg.go.dev\/github.com\/a1emax\/youngine@v0.3.0\/asset\" rel=\"noopener noreferrer nofollow\">asset<\/a> \u0430\u0441\u0441\u0435\u0442\u044b \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u043c\u0438 \u0441\u0442\u0440\u043e\u043a\u0430\u043c\u0438 URI \u0438 \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043f\u043e <a href=\"https:\/\/pkg.go.dev\/github.com\/a1emax\/youngine@v0.3.0\/asset#Kind\" rel=\"noopener noreferrer nofollow\">\u0442\u0438\u043f\u0430\u043c<\/a>, <a href=\"https:\/\/pkg.go.dev\/github.com\/a1emax\/youngine@v0.3.0\/asset#Mapper\" rel=\"noopener noreferrer nofollow\">\u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u043c<\/a> \u0441 <a href=\"https:\/\/pkg.go.dev\/github.com\/a1emax\/youngine@v0.3.0\/asset#Provider\" rel=\"noopener noreferrer nofollow\">\u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430\u043c\u0438<\/a>. \u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u044b, \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0432 \u0433\u0440\u0443\u043f\u043f\u0435 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 <a href=\"https:\/\/pkg.go.dev\/github.com\/a1emax\/youngine@v0.3.0\/asset\/format\" rel=\"noopener noreferrer nofollow\">format<\/a>, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0430\u0441\u0441\u0435\u0442\u043e\u0432, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0432\u043d\u0435\u0448\u043d\u0438\u0439 <a href=\"https:\/\/pkg.go.dev\/github.com\/a1emax\/youngine@v0.3.0\/asset#Fetcher\" rel=\"noopener noreferrer nofollow\">\u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c<\/a> \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445. \u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u0432 \u043f\u0430\u043a\u0435\u0442\u0430\u0445 \u0433\u0440\u0443\u043f\u043f\u044b <a href=\"https:\/\/pkg.go.dev\/github.com\/a1emax\/youngine@v0.3.0\/asset\/host\" rel=\"noopener noreferrer nofollow\">host<\/a> \u2014 \u043f\u043e\u043a\u0430 \u0442\u0430\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0444\u0430\u0439\u043b\u043e\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0432 \u0441\u0432\u043e\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445, \u043d\u043e \u044f \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u044e \u0440\u0430\u0441\u0448\u0438\u0440\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u043d\u0430\u0431\u043e\u0440 \u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0435\u0433\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u0432 (URI \u0432\u0438\u0434\u0430 <code>local:path\/to\/asset<\/code>), \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0435\u0439 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u044c\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430\u043c\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430.<\/p>\n<p><a href=\"https:\/\/pkg.go.dev\/github.com\/a1emax\/youngine@v0.3.0\/asset#Loader\" rel=\"noopener noreferrer nofollow\">\u0417\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a<\/a> \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043a\u0430\u043a \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u0430\u0441\u0441\u0435\u0442\u044b, \u0442\u0430\u043a \u0438 \u0432\u044b\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u0438\u0445. \u0412 \u043d\u0451\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u0441\u0447\u0451\u0442 \u0441\u0441\u044b\u043b\u043e\u043a \u2014 \u0437\u0430\u043f\u0440\u043e\u0441 \u0430\u0441\u0441\u0435\u0442\u0430 \u0443 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 \u0438 \u0435\u0433\u043e \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u0435\u0433\u043e \u043f\u0435\u0440\u0432\u043e\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435, \u0430 \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441 \u043d\u0438\u043c \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u0438 \u0435\u0433\u043e \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0438\u0437 \u043a\u044d\u0448\u0430 \u2014 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u0435\u0433\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0435. \u0417\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a \u2014 \u043f\u0435\u0440\u0432\u044b\u0439 \u0438\u0437 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u044b\u0445 \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u043e\u0432, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0449\u0438\u0439 \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0442\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f (\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u044b \u0442\u043e\u0436\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0435\u0433\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c) \u2014 \u0437\u0430\u043f\u0440\u043e\u0441 \u0430\u0441\u0441\u0435\u0442\u0430 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441 \u043d\u0438\u043c \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438, \u0438 \u0432\u0441\u0435 \u043e\u043d\u0438 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0441 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u0435\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u0430.<\/p>\n<p>\u041f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0430\u0441\u0441\u0435\u0442\u0430\u043c\u0438 \u043c\u043e\u0436\u0435\u0442 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u043f\u0430\u043a\u0435\u0442 <a href=\"https:\/\/pkg.go.dev\/github.com\/a1emax\/youngine@v0.3.0\/x\/scope\" rel=\"noopener noreferrer nofollow\">x\/scope<\/a>, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0449\u0438\u0439 \u0447\u0442\u043e-\u0442\u043e \u0432\u0440\u043e\u0434\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 <code>defer<\/code>, \u043d\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0434\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439.<\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u0434\u0430 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0430<\/summary>\n<div class=\"spoiler__content\">\n<p><a href=\"https:\/\/github.com\/a1emax\/dragon\/blob\/v0.1.0\/pkg\/global\/tools\/asset.go\" rel=\"noopener noreferrer nofollow\">dragon\/pkg\/global\/tools\/asset.go<\/a><\/p>\n<pre><code class=\"go\">package tools  import ( \"github.com\/a1emax\/youngine\/asset\" \"github.com\/a1emax\/youngine\/asset\/format\/image\" \"github.com\/a1emax\/youngine\/asset\/format\/kage\" \"github.com\/a1emax\/youngine\/asset\/format\/mp3\" \"github.com\/a1emax\/youngine\/asset\/format\/rgba\" \"github.com\/a1emax\/youngine\/asset\/format\/sfnt\" \"github.com\/a1emax\/youngine\/asset\/format\/text\" \"github.com\/a1emax\/youngine\/asset\/format\/wav\" \"github.com\/a1emax\/youngine\/asset\/host\/filesystem\" \"github.com\/a1emax\/youngine\/x\/scope\"  \"dragon\/res\" )  var AssetMapper asset.Mapper  var AssetLoader asset.Loader  func initAsset(lc scope.Lifecycle) { mapper := asset.NewMapper() loader := asset.NewLoader(mapper)  fetcher := filesystem.NewFetcher(res.FS)  asset.Map[image.Asset](mapper, image.NewProvider(fetcher)) asset.Map[kage.Asset](mapper, kage.NewProvider(fetcher)) asset.Map[mp3.Asset](mapper, mp3.NewProvider(fetcher, 0)) asset.Map[rgba.Asset](mapper, rgba.NewProvider(fetcher)) asset.Map[sfnt.Asset](mapper, sfnt.NewProvider(fetcher)) asset.Map[sfnt.FaceAsset](mapper, sfnt.NewFaceProvider(fetcher, loader)) \/\/ \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0430\u0441\u0441\u0435\u0442\u044b \u0442\u0438\u043f\u0430 sfnt.Asset asset.Map[text.Asset](mapper, text.NewProvider(fetcher)) asset.Map[wav.Asset](mapper, wav.NewProvider(fetcher, 0))  AssetMapper = mapper AssetLoader = loader }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u041f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u0434\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043d\u0430\u0447\u0435\u0440\u0442\u0430\u043d\u0438\u0439 \u0448\u0440\u0438\u0444\u0442\u0430<\/summary>\n<div class=\"spoiler__content\">\n<p><a href=\"https:\/\/github.com\/a1emax\/dragon\/blob\/v0.1.0\/pkg\/global\/assets\/fontfaces.go\" rel=\"noopener noreferrer nofollow\">dragon\/pkg\/global\/assets\/fontfaces.go<\/a><\/p>\n<pre><code class=\"go\">package assets  import ( \"github.com\/a1emax\/youngine\/asset\/format\/sfnt\" \"github.com\/a1emax\/youngine\/x\/scope\" )  var FontFaces struct { DebugInfoText      sfnt.FaceAsset \/\/ \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0430\u0441\u0441\u0435\u0442 fonts\/open-sans-regular.ttf GameOverButtonText sfnt.FaceAsset \/\/ \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0430\u0441\u0441\u0435\u0442 fonts\/seymour-one-regular.ttf MainMenuButtonText sfnt.FaceAsset \/\/ \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0430\u0441\u0441\u0435\u0442 fonts\/seymour-one-regular.ttf }  func initFontFaces(lc scope.Lifecycle) { FontFaces.DebugInfoText = load[sfnt.FaceAsset](lc, \"font-faces\/debug-info-text.sff\") FontFaces.GameOverButtonText = load[sfnt.FaceAsset](lc, \"font-faces\/game-over-button-text.sff\") FontFaces.MainMenuButtonText = load[sfnt.FaceAsset](lc, \"font-faces\/main-menu-button-text.sff\") }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p><strong>\u0414\u043e\u043b\u0433\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 (\u043f\u0430\u043a\u0435\u0442 store)<\/strong><\/p>\n<p>\u041f\u0430\u043a\u0435\u0442 <a href=\"https:\/\/pkg.go.dev\/github.com\/a1emax\/youngine@v0.3.0\/store\" rel=\"noopener noreferrer nofollow\">store<\/a> \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0449\u0438\u0439 \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0442\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439, \u043f\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u043c\u0443 \u0441\u0447\u0451\u0442\u0443, \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0434\u0438 \u043d\u0435\u0433\u043e \u2014 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u0438 \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441\u0430 \u0438\u0433\u0440\u044b) \u043c\u0435\u0436\u0434\u0443 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043c\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u042d\u0442\u043e \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u2014 \u043d\u0435 \u0441\u0442\u043e\u0438\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e, \u0441\u043a\u0430\u0436\u0435\u043c, \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043c\u0435\u0433\u0430\u0431\u0430\u0439\u0442\u043e\u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0433\u043e \u043c\u0438\u0440\u0430.<\/p>\n<p>\u0414\u0430\u043d\u043d\u044b\u0435 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043b\u044e\u0431\u043e\u0439 <a href=\"https:\/\/pkg.go.dev\/github.com\/a1emax\/youngine@v0.3.0\/store#IsCompatibleType\" rel=\"noopener noreferrer nofollow\">\u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439<\/a> \u2014 \u0442\u0430\u043a\u043e\u0439, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u0447\u0435\u0440\u0435\u0437 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u043d\u0438\u0435. \u041e\u0434\u0438\u043d \u0438\u0437 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043e\u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0432 <a href=\"https:\/\/pkg.go.dev\/github.com\/a1emax\/youngine@v0.3.0\/store#Locker\" rel=\"noopener noreferrer nofollow\">\u043b\u043e\u043a\u0435\u0440\u0435<\/a>, \u0430 \u0434\u0432\u0430 \u0434\u0440\u0443\u0433\u0438\u0445 \u2014 \u0432 <a href=\"https:\/\/pkg.go.dev\/github.com\/a1emax\/youngine@v0.3.0\/store#Buffer\" rel=\"noopener noreferrer nofollow\">\u0431\u0443\u0444\u0435\u0440\u0435<\/a> \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u043d\u0435\u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0442\u043d\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u0438 <a href=\"https:\/\/pkg.go.dev\/github.com\/a1emax\/youngine@v0.3.0\/store#Syncer\" rel=\"noopener noreferrer nofollow\">\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0442\u043e\u0440\u0435<\/a> \u0434\u043b\u044f \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0442\u043d\u043e\u0433\u043e \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u043c\u0435\u0441\u0442\u043e\u043c \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0444\u0430\u0439\u043b\u043e\u043c). \u0412 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435, \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c \u0431\u0435\u0437 \u0431\u0443\u0444\u0435\u0440\u0430, \u0440\u0430\u0431\u043e\u0442\u0430\u044f \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0441 \u043b\u043e\u043a\u0435\u0440\u043e\u043c, \u043d\u043e \u0442\u043e\u0433\u0434\u0430 \u043a\u0430\u0436\u0434\u0430\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043f\u0443\u0441\u0442\u044c \u043a\u043e\u0440\u043e\u0442\u043a\u0443\u044e, \u043d\u043e \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0435\u0433\u0430\u0442\u0438\u0432\u043d\u043e \u0441\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043d\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u2014 \u0431\u0443\u0444\u0435\u0440 \u0436\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0447\u0442\u0435\u043d\u0438\u044e \u0432\u043e\u0432\u0441\u0435 \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0435\u0442\u044c \u043e\u0442 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043e\u043a, \u0430 \u0437\u0430\u043f\u0438\u0441\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0445\u043e\u0442\u044c \u0438 \u0441 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0430\u043c\u0438, \u043d\u043e \u043f\u0430\u043a\u0435\u0442\u043d\u043e \u0438 \u0432 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442.<\/p>\n<p>\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u044b \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u043c\u0435\u0441\u0442\u0443 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u0432 \u0433\u0440\u0443\u043f\u043f\u0435 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 <a href=\"https:\/\/pkg.go.dev\/github.com\/a1emax\/youngine\/store\/host\" rel=\"noopener noreferrer nofollow\">host<\/a> \u2013 \u0441\u0435\u0439\u0447\u0430\u0441 \u0442\u0430\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 YAML-\u0444\u0430\u0439\u043b, \u0438 \u0443 \u043c\u0435\u043d\u044f \u043d\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u0438\u0434\u0435\u0439 \u043f\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044e \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 (\u0440\u0430\u0437\u0432\u0435 \u0447\u0442\u043e \u0441\u0435\u0442\u044c, \u043d\u043e \u044f \u043d\u0435 \u0443\u0432\u0435\u0440\u0435\u043d, \u0447\u0442\u043e \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b).<\/p>\n<p>\u0412\u0441\u044f \u044d\u0442\u0430 \u043a\u0443\u0445\u043d\u044f \u043d\u0443\u0436\u043d\u0430, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0447\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0432\u043d\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430. \u0414\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u043f\u043e \u043a\u043d\u043e\u043f\u043a\u0435, \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0442\u0430\u043a\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0446\u0438\u043a\u043b\u0435 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448\u0435\u0439 \u0438\u0434\u0435\u0435\u0439, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u0444\u0440\u0438\u0437\u0438\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441. \u0410 \u0435\u0441\u0442\u044c \u0438 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u043b\u0443\u0447\u0430\u0438 \u2014 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0443\u0445\u043e\u0434 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432 \u0444\u043e\u043d \u043d\u0430 Android, \u043f\u043e\u0441\u043b\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043e\u043d\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0432\u044b\u0433\u0440\u0443\u0436\u0435\u043d\u043e \u0431\u0435\u0437 \u0432\u043e\u0437\u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b.<\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u0434\u0430 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430<\/summary>\n<div class=\"spoiler__content\">\n<p><a href=\"https:\/\/github.com\/a1emax\/dragon\/blob\/v0.1.0\/pkg\/global\/tools\/store.go\" rel=\"noopener noreferrer nofollow\">dragon\/pkg\/global\/tools\/store.go<\/a><\/p>\n<pre><code class=\"go\">package tools  import ( \"context\" \"fmt\" \"path\" \"time\"  \"github.com\/a1emax\/youngine\/store\" \"github.com\/a1emax\/youngine\/store\/host\/file\" \"github.com\/a1emax\/youngine\/x\/scope\"  \"dragon\/pkg\/global\/vars\" )  const storeFileName = \"dragon.yml\"  type StoreData struct { MuteAudio bool `yaml:\"mute_audio\"` }  var StoreBuffer store.Buffer[StoreData]  var StoreSyncer store.Syncer[StoreData]  func initStore(lc scope.Lifecycle) { locker := store.NewLocker[StoreData]()  filePath := path.Join(vars.Extern.FilesDir, storeFileName) accessor := file.NewAccessor[StoreData](filePath) Logger.Debug(\"store file: \" + filePath)  syncer := store.NewSyncer(locker, accessor)  err := syncer.Load(context.Background()) if err != nil { Logger.Error(fmt.Sprintf(\"%+v\", err)) }  buffer := store.NewBuffer(locker)  buffer.Pull()  stop := make(chan struct{}) done := make(chan struct{}) go func() { defer close(done)  t := time.NewTicker(10 * time.Second) defer t.Stop()  select { case &lt;-t.C: err := syncer.Save(context.Background()) if err != nil { Logger.Error(fmt.Sprintf(\"%+v\", err)) } else { Logger.Debug(\"store file is updated in background\") } case &lt;-stop: return } }()  lc.Defer(func() { close(stop) &lt;-done  err := syncer.Save(context.Background()) if err != nil { Logger.Error(fmt.Sprintf(\"%+v\", err)) } else { Logger.Debug(\"store file is updated on exit\") } })  StoreBuffer = buffer StoreSyncer = syncer }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<h2>\u0428\u0430\u0431\u043b\u043e\u043d \u043f\u0440\u043e\u0435\u043a\u0442\u0430<\/h2>\n<p>\u0427\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u043e \u0443\u0434\u043e\u0431\u043d\u0435\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 Youngine, \u044f \u043e\u043f\u0438\u0448\u0443 \u0448\u0430\u0431\u043b\u043e\u043d \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043d\u0430 \u0435\u0433\u043e \u043e\u0441\u043d\u043e\u0432\u0435. \u0412\u043e\u0441\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0439\u0442\u0435 \u0435\u0433\u043e \u043a\u0430\u043a \u043d\u0435\u043a\u0443\u044e \u043e\u0442\u043f\u0440\u0430\u0432\u043d\u0443\u044e \u0442\u043e\u0447\u043a\u0443 \u2014 \u043f\u043e \u0445\u043e\u0434\u0443 \u0440\u0430\u0431\u043e\u0442\u044b \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u0438 \u0434\u043e\u043b\u0436\u0435\u043d \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f. \u0423\u0434\u043e\u0431\u043d\u043e \u043d\u0430\u0447\u0430\u0442\u044c \u0441 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439, \u043d\u043e \u043a\u043e\u0433\u0434\u0430 \u043a\u043e\u043d\u0442\u0443\u0440\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0431\u0443\u0434\u0443\u0442 \u043e\u0447\u0435\u0440\u0447\u0435\u043d\u044b \u0438 \u0441\u0442\u0430\u043d\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u043a\u0430\u043a \u043e\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043b\u0443\u0447\u0448\u0435 \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u0438\u043d\u044a\u0435\u043a\u0446\u0438\u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439. \u0427\u0430\u0441\u0442\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0441\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u044b \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0438 \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u044b \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430\u0445. \u041d\u043e\u0432\u044b\u0435 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0438\u043a\u0430\u043a \u043f\u043e\u043a\u0430 \u043d\u0435 \u043e\u0445\u0432\u0430\u0447\u0435\u043d\u043d\u0430\u044f \u043c\u043d\u043e\u0439 iOS) \u043d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u043d\u043e\u0432\u044b\u0445 \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u0432 \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432. \u0412 \u043e\u0431\u0449\u0435\u043c, \u044f \u043b\u0438\u0448\u044c \u043d\u0430\u0440\u0438\u0441\u0443\u044e \u043f\u0430\u0440\u0443 \u043a\u0440\u0443\u0433\u043e\u0432 \u043d\u0430 \u043f\u0443\u0441\u0442\u043e\u043c \u043b\u0438\u0441\u0442\u0435 \u2014 \u0430 \u0441\u043e\u0432\u0443 \u0434\u043e\u0440\u0438\u0441\u0443\u0439\u0442\u0435 (<a href=\"https:\/\/github.com\/a1emax\/dragon\" rel=\"noopener noreferrer nofollow\">\u043f\u0440\u0438\u043c\u0435\u0440 \u0433\u043e\u0442\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430<\/a>).<\/p>\n<p><strong>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430<\/strong><\/p>\n<p>\u041f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u043e\u0442\u0440\u0430\u0436\u0430\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438 \u2014 \u043d\u0438\u0436\u043d\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u044b \u043c\u043e\u0433\u0443\u0442 \u0437\u0430\u0432\u0438\u0441\u0435\u0442\u044c \u043e\u0442 \u0432\u0435\u0440\u0445\u043d\u0438\u0445, \u043d\u043e \u043d\u0435 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442.<\/p>\n<ul>\n<li>\n<p><strong>res <\/strong>\u2014 \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u0430\u044f \u0447\u0435\u0440\u0435\u0437 <code>go:embed<\/code>\u0444\u0430\u0439\u043b\u043e\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0441 \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c\u0438 (\u0430\u0441\u0441\u0435\u0442\u0430\u043c\u0438, \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f\u043c\u0438 \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435).<\/p>\n<\/li>\n<li>\n<p><strong>pkg<\/strong> \u2014 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b.<\/p>\n<ul>\n<li>\n<p><strong>domain<\/strong> \u2014 \u0434\u043e\u043c\u0435\u043d\u043d\u0430\u044f \u043b\u043e\u0433\u0438\u043a\u0430.<\/p>\n<\/li>\n<li>\n<p><strong>global<\/strong> \u2014 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438.<\/p>\n<ul>\n<li>\n<p><strong>vars<\/strong> \u2014 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435.<\/p>\n<ul>\n<li>\n<p><code>Extern.FilesDir<\/code> \u2014 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0438 \u0437\u0430\u043f\u0438\u0441\u0438. \u041d\u0430 Android \u044d\u0442\u043e \u043d\u0435 \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u0447\u0442\u043e \u0440\u0430\u0431\u043e\u0447\u0430\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f.<\/p>\n<\/li>\n<li>\n<p><code>Kernel.IsTerminated<\/code> \u2014 \u0444\u043b\u0430\u0433 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u0415\u0441\u043b\u0438 \u043e\u043d \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u0435\u043d, \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f.<\/p>\n<\/li>\n<li>\n<p><code>Window.Page<\/code> \u2014 \u0430\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043e\u043a\u043d\u0430 (\u0441\u043c. <a href=\"https:\/\/pkg.go.dev\/github.com\/a1emax\/youngine@v0.3.0\/scene\/element\/pageset#State\" rel=\"noopener noreferrer nofollow\">youngine\/scene\/element\/pageset<\/a>).<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong>tools<\/strong> \u2014 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b Youngine, \u043b\u043e\u0433\u0433\u0435\u0440, \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u0447\u0438\u0441\u0435\u043b \u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435.<\/p>\n<\/li>\n<li>\n<p><strong>assets<\/strong> \u2014 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0430\u0441\u0441\u0435\u0442\u044b.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong>window<\/strong> \u2014 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.<\/p>\n<\/li>\n<li>\n<p><strong>kernel<\/strong> \u2014 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u0435 \u044f\u0434\u0440\u043e.<\/p>\n<ul>\n<li>\n<p><code>EbitenGame<\/code> \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u0438\u043d\u0433\u043b\u0442\u043e\u043d <code>ebiten.Game<\/code>, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0449\u0438\u0439 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0446\u0438\u043a\u043b, \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0432 <code>ebiten.RunGame<\/code> (desktop) \u043b\u0438\u0431\u043e <code>mobile.SetGame<\/code> (android_intern).<\/p>\n<\/li>\n<li>\n<p><code>Activate<\/code> \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442 \u0432\u043d\u0435\u0448\u043d\u044e\u044e \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e. \u0414\u043e \u0432\u044b\u0437\u043e\u0432\u0430 \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0446\u0438\u043a\u043b \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u0430\u0438\u0432\u0430\u0442\u044c. \u041f\u043e\u0441\u043b\u0435 \u0435\u0451 \u0432\u044b\u0437\u043e\u0432\u0430 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u0433\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u044f\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430\u0447\u043d\u0451\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f.<\/p>\n<\/li>\n<li>\n<p><code>Close<\/code> \u0444\u0438\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u044f \u0440\u0435\u0441\u0443\u0440\u0441\u044b, \u0435\u0441\u043b\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e.<\/p>\n<\/li>\n<li>\n<p><code>IfRunning<\/code> \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0438 \u043d\u0435 \u0444\u0438\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043e. \u0424\u043b\u0430\u0433 <code>Kernel.IsTerminated<\/code> \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0435 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u2014 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u044b\u0437\u043e\u0432\u044b <code>Activate<\/code> \u0438 <code>Close<\/code>.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong>cmd<\/strong> \u2014 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c\u044b\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u043d\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b (\u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u0435\u0441\u0442\u044c).<\/p>\n<\/li>\n<li>\n<p><strong>app<\/strong> \u2014 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c\u044b\u0435 \u043f\u0440\u0438\u043a\u043b\u0430\u0434\u043d\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b.<\/p>\n<ul>\n<li>\n<p><strong>desktop<\/strong> \u2014 main \u0434\u043b\u044f Windows, Linux \u0438 macOS.<\/p>\n<\/li>\n<li>\n<p><strong>android_intern<\/strong> \u2014 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0434\u043b\u044f Android (\u0438\u0437 \u043d\u0435\u0451 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f AAR).<\/p>\n<ul>\n<li>\n<p><code>SetFilesDir<\/code> \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u043e \u0432\u0440\u0435\u043c\u044f <code>MainActivity.onCreate<\/code> \u0438 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e <code>Extern.FilesDir<\/code>.<\/p>\n<\/li>\n<li>\n<p><code>Activate<\/code> \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u043a\u043e\u043d\u0446\u0435 <code>MainActivity.onCreate<\/code> \u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 <code>kernel.Activate<\/code>.<\/p>\n<\/li>\n<li>\n<p><code>Suspend<\/code> \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u043e \u0432\u0440\u0435\u043c\u044f <code>MainActivity.onPause<\/code>. \u042d\u0442\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0434\u043b\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u043e\u043b\u0433\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<\/li>\n<li>\n<p><code>Resume<\/code> \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u043e \u0432\u0440\u0435\u043c\u044f <code>MainActivity.onResume<\/code>.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong>android<\/strong> \u2014 \u043f\u0440\u043e\u0435\u043a\u0442 Android Studio.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><strong>\u0417\u0430\u043f\u0443\u0441\u043a \u043d\u0430 Android<\/strong><\/p>\n<p>\u0414\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 \u0431\u0430\u0437\u0435 Youngine \u043d\u0430 Android \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u0432 Android Studio. \u0415\u0441\u043b\u0438 \u0432\u044b \u0441 \u043d\u0435\u0439 \u0445\u043e\u0440\u043e\u0448\u043e \u0437\u043d\u0430\u043a\u043e\u043c\u044b, \u0432\u0430\u043c \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 <code>android_intern<\/code>, \u0430 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u043c\u0435\u043b\u043e \u0447\u0438\u0442\u0430\u0442\u044c \u043d\u0430\u0438\u0441\u043a\u043e\u0441\u043e\u043a. \u0415\u0441\u043b\u0438 \u0436\u0435 \u0432\u044b \u0441\u043e \u0441\u0442\u0443\u0434\u0438\u0435\u0439 \u0440\u0430\u043d\u044c\u0448\u0435 \u0434\u0435\u043b\u0430 \u043d\u0435 \u0438\u043c\u0435\u043b\u0438, \u0442\u043e \u043d\u0438\u0436\u0435 \u043f\u043e \u0448\u0430\u0433\u0430\u043c \u043e\u043f\u0438\u0441\u0430\u043d\u043e \u0432\u0441\u0451, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441 \u0441\u0443\u0445\u043e\u0433\u043e \u0441\u0442\u0430\u0440\u0442\u0430 \u0434\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435.<\/p>\n<details class=\"spoiler\">\n<summary>\u0421\u0440\u0430\u0437\u0443 \u0443\u043f\u043e\u043c\u044f\u043d\u0443, \u043f\u043e\u0447\u0435\u043c\u0443 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u044b\u0439 AAR, \u0430 \u043d\u0435 \u0441\u0440\u0430\u0437\u0443 \u0433\u043e\u0442\u043e\u0432\u044b\u0439 APK<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u0441\u0442\u0443\u0434\u0438\u044f \u0432 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u0434\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 SDK. \u0412\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u043e\u043d\u0430 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0430 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u043e\u0434 Android \u0438 \u0434\u0435\u043b\u0430\u0435\u0442 \u043c\u043d\u043e\u0433\u0438\u0435 \u0432\u0435\u0449\u0438 \u043f\u0440\u043e\u0449\u0435 \u2014 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443, \u043e\u0442\u043b\u0430\u0434\u043a\u0443, \u044d\u043c\u0443\u043b\u044f\u0446\u0438\u044e, \u0437\u0430\u043f\u0443\u0441\u043a \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0445, \u0441\u0431\u043e\u0440\u043a\u0443, \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044e \u0438 \u043f\u0440\u043e\u0447\u0435\u0435. \u0412-\u0442\u0440\u0435\u0442\u044c\u0438\u0445, \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0438\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0432\u0441\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u044b Android.<\/p>\n<\/div>\n<\/details>\n<p><strong><em>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 SDK<\/em><\/strong><\/p>\n<p>\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435 \u0441\u0442\u0443\u0434\u0438\u044e, \u043f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u0432 \u0440\u0430\u0437\u0434\u0435\u043b Customize \u0438 \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 All settings. \u0412 \u043e\u0442\u043a\u0440\u044b\u0432\u0448\u0435\u043c\u0441\u044f \u043e\u043a\u043d\u0435 \u0432\u043e \u0432\u043a\u043b\u0430\u0434\u043a\u0435 SDK Platforms \u043e\u0442\u043c\u0435\u0442\u044c\u0442\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0438\u0435 \u0432\u0430\u0441 \u0432\u0435\u0440\u0441\u0438\u0438 Android (\u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u0430\u043c\u043e\u0439 \u0441\u0432\u0435\u0436\u0435\u0439), \u0430 \u0432\u043e \u0432\u043a\u043b\u0430\u0434\u043a\u0435 SDK Tools \u2013 NDK. \u041f\u043e\u0441\u043b\u0435 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e \u0442\u043e, \u0447\u0442\u043e \u0432\u044b \u043e\u0442\u043c\u0435\u0442\u0438\u043b\u0438.<\/p>\n<p><strong><em>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430<\/em><\/strong><\/p>\n<p>\u041f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u0432 \u0440\u0430\u0437\u0434\u0435\u043b Projects \u0438 \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 New Project. \u0412 \u043e\u0442\u043a\u0440\u044b\u0432\u0448\u0435\u043c\u0441\u044f \u043e\u043a\u043d\u0435 \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 Phone and Tablet, No Activity \u0438 \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u043f\u043e\u043b\u044f \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435:<\/p>\n<ul>\n<li>\n<p>Name \u2014 project (\u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0432\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430)<\/p>\n<\/li>\n<li>\n<p>Package name \u2014 com.github.username.project (\u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0439 \u043f\u0430\u043a\u0435\u0442 Java)<\/p>\n<\/li>\n<li>\n<p>Save location \u2014 \/path\/to\/youngine\/project\/app\/android<\/p>\n<\/li>\n<li>\n<p>Language \u2014 Java (\u0441 Kotlin \u044f \u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b, \u043d\u043e \u0442\u043e\u0436\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c)<\/p>\n<\/li>\n<li>\n<p>Minimum SDK \u2014 API 24 (\u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043b\u0435\u0434\u0443\u0439\u0442\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u044f\u043c \u0441\u0442\u0443\u0434\u0438\u0438)<\/p>\n<\/li>\n<li>\n<p>Build configuration language \u2014 Kotlin DSL<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u043e\u0441\u043b\u0435 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0435\u043a\u0442 \u0431\u0443\u0434\u0435\u0442 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u0438 \u043e\u0442\u043a\u0440\u044b\u0442. \u041f\u043e\u043a\u0430, \u0447\u0442\u043e\u0431\u044b \u0432\u0438\u0434\u0435\u0442\u044c \u0435\u0433\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u0443\u044e \u0444\u0430\u0439\u043b\u043e\u0432\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 (\u044f \u0431\u0443\u0434\u0443 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043f\u0443\u0442\u0438 \u043e\u0442 \u043a\u043e\u0440\u043d\u044f), \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u0441\u044c \u0432 \u0440\u0435\u0436\u0438\u043c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f Project (\u0441\u043b\u0435\u0432\u0430 \u0432\u0432\u0435\u0440\u0445\u0443, \u0433\u0434\u0435 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u043d \u0440\u0435\u0436\u0438\u043c Android).<\/p>\n<p><strong><em>\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 android_intern<\/em><\/strong><\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e <code>intern<\/code>. \u0417\u0430\u0442\u0435\u043c \u043e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b \u0438, \u043d\u0430\u0445\u043e\u0434\u044f\u0441\u044c \u0432 \u043a\u043e\u0440\u043d\u0435 <em>\u043f\u0440\u043e\u0435\u043a\u0442\u0430 Youngine<\/em>, \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b:<\/p>\n<pre><code class=\"bash\"># \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043f\u0435\u0440\u0432\u044b\u0439 \u0440\u0430\u0437 go install \"github.com\/hajimehoshi\/ebiten\/v2\/cmd\/ebitenmobile@v2.8.6\"  # \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u044d\u0442\u0443 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u0432 .gitignore mkdir -p \".local\"  ebitenmobile bind \\     -target \"android\" \\     -androidapi 24 \\ # \u0442\u043e, \u0447\u0442\u043e \u0432\u044b \u0443\u043a\u0430\u0437\u0430\u043b\u0438 \u043a\u0430\u043a Minimum SDK \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430     -javapkg \"com.github.username.project.go\" \\ # \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 go \u0432 \u043a\u043e\u043d\u0446\u0435     -o \".local\/project-android-intern.aar\" \\     \"project\/app\/android_intern\" # project - \u0438\u043c\u044f \u043c\u043e\u0434\u0443\u043b\u044f Go  cp \".local\/project-android-intern.aar\" \"app\/android\/intern\/default.aar\"<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u0444\u0430\u0439\u043b <code>intern\/build.gradle.kts<\/code>:<\/p>\n<pre><code class=\"kotlin\">configurations.maybeCreate(\"default\") artifacts.add(\"default\", file(\"default.aar\"))<\/code><\/pre>\n<p>\u0430 \u0442\u0430\u043a\u0436\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u0435 \u0444\u0430\u0439\u043b <code>settings.gradle.kts<\/code>:<\/p>\n<pre><code class=\"kotlin\">include(\":app\") include(\":intern\") \/\/ +<\/code><\/pre>\n<p>\u0438 \u0444\u0430\u0439\u043b <code>app\/build.gradle.kts<\/code>:<\/p>\n<pre><code class=\"kotlin\">implementation(project(\":intern\")) \/\/ + implementation(libs.appcompat)<\/code><\/pre>\n<p>\u0421\u0442\u0443\u0434\u0438\u044f \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044e \u0441 \u0444\u0430\u0439\u043b\u0430\u043c\u0438 Gradle \u2014 \u0441\u0434\u0435\u043b\u0430\u0439\u0442\u0435 \u044d\u0442\u043e.<\/p>\n<p><strong><em>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 MainActivity<\/em><\/strong><\/p>\n<p>\u041e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u043e\u0435 \u043c\u0435\u043d\u044e \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 <code>app<\/code>, \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 New, Activity, Empty Views Activity \u0438 \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u043f\u043e\u043b\u044f \u0432 \u043e\u0442\u043a\u0440\u044b\u0432\u0448\u0435\u043c\u0441\u044f \u043e\u043a\u043d\u0435:<\/p>\n<ul>\n<li>\n<p>Activity Name \u2014 MainActivity<\/p>\n<\/li>\n<li>\n<p>Generate a Layout File \u2014 \u043e\u0442\u043c\u0435\u0447\u0435\u043d\u043e<\/p>\n<\/li>\n<li>\n<p>Layout Name \u2014 activity_main<\/p>\n<\/li>\n<li>\n<p>Launcher Activity \u2014 \u043d\u0435 \u043e\u0442\u043c\u0435\u0447\u0435\u043d\u043e<\/p>\n<\/li>\n<li>\n<p>Package name \u2014 com.github.username.project<\/p>\n<\/li>\n<li>\n<p>Source Language \u2014 Java<\/p>\n<\/li>\n<li>\n<p>Target Source Set \u2014 main<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u043e\u0441\u043b\u0435 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u043a\u043e\u0434. \u0418\u0437\u043c\u0435\u043d\u0438\u0442\u0435 \u0435\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c <code>android_intern<\/code>.<\/p>\n<details class=\"spoiler\">\n<summary>\u0418\u0442\u043e\u0433\u043e\u0432\u043e\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430 app\/src\/main\/res\/layout\/activity_main.xml<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"xml\">&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt; &lt;RelativeLayout xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"     xmlns:app=\"http:\/\/schemas.android.com\/apk\/res-auto\"     xmlns:tools=\"http:\/\/schemas.android.com\/tools\"     android:id=\"@+id\/main\"     android:layout_width=\"match_parent\"     android:layout_height=\"match_parent\"     android:background=\"@color\/black\"     android:keepScreenOn=\"true\"     tools:context=\".MainActivity\"&gt;      &lt;com.github.username.project.go.intern.EbitenView         android:id=\"@+id\/ebitenview\"         android:layout_width=\"match_parent\"         android:layout_height=\"match_parent\"         android:focusable=\"true\" \/&gt; &lt;\/RelativeLayout&gt;<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u0418\u0442\u043e\u0433\u043e\u0432\u043e\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430 app\/src\/main\/java\/com\/github\/username\/project\/MainActivity.java<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"java\">package com.github.username.project;  import android.os.Bundle; import android.util.Log;  import androidx.appcompat.app.AppCompatActivity; import androidx.core.view.WindowCompat; import androidx.core.view.WindowInsetsCompat; import androidx.core.view.WindowInsetsControllerCompat;  import com.github.username.project.go.ebitenmobileview.Ebitenmobileview; import com.github.username.project.go.intern.EbitenView; import com.github.username.project.go.intern.Intern;  import java.util.Objects;  import go.Seq;  public class MainActivity extends AppCompatActivity {      @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);          \/\/ Hide system bars.         WindowInsetsControllerCompat windowInsetsController =                 WindowCompat.getInsetsController(getWindow(), getWindow().getDecorView());         windowInsetsController.setSystemBarsBehavior(                 WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE         );         windowInsetsController.hide(WindowInsetsCompat.Type.systemBars());          \/\/ Get directory with both read and write access.         java.io.File externalFilesDir = getExternalFilesDir(null);         String externalFilesDirPath = Objects.requireNonNull(externalFilesDir).getPath();          try {             Intern.setFilesDir(externalFilesDirPath);             Intern.activate();         } catch (Exception e) {             logGoError(e);         }          Seq.setContext(getApplicationContext());     }      \/\/ EbitenView.suspendGame and EbitenView.resumeGame should be called in onPause and onResume     \/\/ respectively. However, it sometimes leads to a bug that causes the application to restart     \/\/ when resuming, so for now it's enough to call the corresponding Ebitenviewmobile methods.     private EbitenView getEbitenView() {         return (EbitenView) this.findViewById(R.id.ebitenview);     }      @Override     protected void onPause() {         super.onPause();          try {             Intern.suspend();             Ebitenmobileview.suspend();         } catch (final Exception e) {             logGoError(e);         }     }      @Override     protected void onResume() {         super.onResume();          try {             Ebitenmobileview.resume();             Intern.resume();         } catch (final Exception e) {             logGoError(e);         }     }      private void logGoError(Exception e) {         Log.e(\"go\", e.toString());     } }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0441\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0443\u0439\u0442\u0435 MainActivity \u0432 \u0444\u0430\u0439\u043b\u0435 <code>app\/src\/main\/AndroidManifest.xml<\/code>:<\/p>\n<pre><code class=\"xml\">&lt;activity android:name=\".MainActivity\" android:exported=\"true\" android:screenOrientation=\"portrait\"&gt; &lt;!-- \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0432\u0430\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442 --&gt; &lt;intent-filter&gt; &lt;action android:name=\"android.intent.action.MAIN\" \/&gt; &lt;category android:name=\"android.intent.category.LAUNCHER\" \/&gt; &lt;\/intent-filter&gt; &lt;\/activity&gt;<\/code><\/pre>\n<p><strong><em>\u0424\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u0448\u0442\u0440\u0438\u0445\u0438<\/em><\/strong><\/p>\n<p>\u0423\u0431\u0435\u0440\u0438\u0442\u0435 action bar \u0438\u0437 \u0442\u0435\u043c\u044b \u0432 \u0444\u0430\u0439\u043b\u0430\u0445 <code>app\/src\/main\/res\/values(-night)\/themes.xml<\/code>:<\/p>\n<pre><code class=\"xml\">&lt;style name=\"Theme.Project\" parent=\"Theme.MaterialComponents.DayNight.NoActionBar\"&gt;<\/code><\/pre>\n<p>\u0423\u043a\u0430\u0436\u0438\u0442\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u043c\u043e\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432 \u0444\u0430\u0439\u043b\u0435 <code>app\/src\/main\/res\/values\/strings.xml<\/code>:<\/p>\n<pre><code class=\"xml\">&lt;string name=\"app_name\"&gt;Project Title&lt;\/string&gt;<\/code><\/pre>\n<p>\u0414\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0438\u043a\u043e\u043d\u043a\u0443 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043e\u0442\u043a\u0440\u044b\u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u043e\u0435 \u043c\u0435\u043d\u044e \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 <code>app<\/code> \u0438 \u0432\u044b\u0431\u0440\u0430\u0432 New, Image Asset.<\/p>\n<p><strong><em>\u0417\u0430\u043f\u0443\u0441\u043a \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435<\/em><\/strong><\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0432\u0441\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u0432\u044b\u0448\u0435 \u0448\u0430\u0433\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u044b, \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0433\u043e\u0442\u043e\u0432\u043e \u043a \u0437\u0430\u043f\u0443\u0441\u043a\u0443. \u041f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c \u0438\u0445, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u0432\u043d\u043e\u0441\u0438\u0442\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u043a\u043e\u0434 Go, \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u2014 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0438\u0437 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f <code>android_intern<\/code>.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u0441 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435, \u043d\u0443\u0436\u043d\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438 \u0435\u0433\u043e \u0432 \u0440\u0435\u0436\u0438\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0438 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u043d\u0451\u043c \u043e\u0442\u043b\u0430\u0434\u043a\u0443 \u043f\u043e USB. \u042f \u043e\u043f\u0438\u0448\u0443 \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0434\u043b\u044f \u043e\u0431\u043e\u043b\u043e\u0447\u043a\u0438 MIUI \u043c\u043e\u0435\u0433\u043e \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430 \u2014 \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u0438\u0445 \u043e\u0431\u043e\u043b\u043e\u0447\u0435\u043a \u0438 \u0447\u0438\u0441\u0442\u043e\u0433\u043e Android \u043e\u043d \u043c\u0430\u043b\u043e \u0447\u0435\u043c \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f. \u0412 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u043f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u0432 \u0440\u0430\u0437\u0434\u0435\u043b \u00ab\u041e \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0435\u00bb \u0438 7 \u0440\u0430\u0437 \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u043d\u0430 \u043f\u0443\u043d\u043a\u0442 \u00ab\u0412\u0435\u0440\u0441\u0438\u044f MIUI\u00bb \u2014 \u0435\u0441\u043b\u0438 \u0432\u0441\u0451 \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e, \u0432\u044b \u0443\u0432\u0438\u0434\u0438\u0442\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u00ab\u0412\u044b \u0441\u0442\u0430\u043b\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u043c!\u00bb (\u0430 \u0432\u044b \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u0435, \u043a\u0443\u0440\u0441\u044b). \u0417\u0430\u0442\u0435\u043c \u043f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u0432 \u0440\u0430\u0437\u0434\u0435\u043b \u00ab\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438\u00bb \u0438 \u0432 \u043f\u043e\u044f\u0432\u0438\u0432\u0448\u0435\u043c\u0441\u044f \u0442\u0430\u043c \u043f\u043e\u0434\u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u00ab\u0414\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432\u00bb \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0443\u0439\u0442\u0435 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u0438 \u00ab\u041e\u0442\u043b\u0430\u0434\u043a\u0430 \u043f\u043e USB\u00bb \u0438 \u00ab\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0447\u0435\u0440\u0435\u0437 USB\u00bb. \u042f, \u043a\u043e\u0433\u0434\u0430 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u044e \u043e\u0442\u043b\u0430\u0434\u043a\u0443, \u043e\u0431\u044b\u0447\u043d\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u044e \u0440\u0435\u0436\u0438\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0432\u043e \u0438\u0437\u0431\u0435\u0436\u0430\u043d\u0438\u0435 \u2014 \u043d\u043e \u044d\u0442\u043e \u0443\u0436\u0435 \u043d\u0430 \u0432\u0430\u0448\u0435 \u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u0435.<\/p>\n<p> \u041a\u043e\u0433\u0434\u0430 \u0432\u0441\u0451 \u0441\u0434\u0435\u043b\u0430\u043d\u043e, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0439\u0442\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043a \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0443 \u2014 \u0438 \u043d\u0430\u0436\u0438\u043c\u0430\u0439\u0442\u0435 Run.<\/p>\n<h2>\u041d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043b\u043e\u0432 \u0432 \u043a\u043e\u043d\u0446\u0435<\/h2>\n<p>\u0420\u0430\u0431\u043e\u0442\u044b \u0435\u0449\u0451 \u043d\u0435\u043f\u0430\u0445\u0430\u043d\u043e\u0435 \u043f\u043e\u043b\u0435. \u042f \u0445\u043e\u0447\u0443 \u0434\u043e\u0432\u0435\u0441\u0442\u0438 \u0434\u043e \u0443\u043c\u0430 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0443\u044e \u0438\u0433\u0440\u0443 \u2014 \u0440\u0435\u0448\u0438\u0442\u044c \u043f\u0435\u0440\u043c\u0430\u043d\u0435\u043d\u0442\u043d\u0443\u044e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0441 \u043f\u043e\u0438\u0441\u043a\u043e\u043c \u0433\u0440\u0430\u0444\u0438\u043a\u0438, \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0443\u0440\u043e\u0432\u043d\u0438, \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441 \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u0443\u0436 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0441\u0451 \u0434\u043e \u043a\u043e\u043d\u0446\u0430. \u0415\u0449\u0451 \u043d\u0443\u0436\u043d\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0432\u0438\u0434\u0436\u0435\u0442\u044b \u0434\u043b\u044f Youngine \u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0435\u0433\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435. \u042f \u0440\u0435\u0448\u0438\u043b \u043f\u043e\u043a\u0430 \u043d\u0435\u043d\u0430\u0434\u043e\u043b\u0433\u043e \u043e\u0441\u0442\u0430\u0442\u044c\u0441\u044f \u0432 \u043d\u0443\u043b\u0435\u0432\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445, \u0447\u0442\u043e\u0431\u044b \u0434\u043e \u043f\u0435\u0440\u0432\u043e\u0439 \u0440\u0435\u043b\u0438\u0437\u043d\u043e\u0439 \u0438 \u0441\u0430\u043c\u043e\u043c\u0443 \u0441\u0435\u0431\u0435 \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0434\u043b\u044f \u043c\u0430\u043d\u0451\u0432\u0440\u0430, \u0438 \u0432\u0430\u0448\u0443 \u043e\u0431\u0440\u0430\u0442\u043d\u0443\u044e \u0441\u0432\u044f\u0437\u044c \u0443\u0447\u0435\u0441\u0442\u044c \u2014 \u0434\u0435\u043b\u0438\u0442\u0435\u0441\u044c \u0435\u0439 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445, \u043e\u043d\u0430 \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u0435 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f.<\/p>\n<p>\u0427\u0442\u043e \u0434\u043e \u0438\u0433\u0440 \u2014 \u0442\u043e \u0431\u0443\u0434\u0443 \u0438\u0445 \u0434\u0435\u043b\u0430\u0442\u044c. \u0421\u0430\u043c\u043e\u0435 \u0433\u043b\u0430\u0432\u043d\u043e\u0435, \u0447\u0442\u043e \u044f \u0432\u044b\u043d\u0435\u0441 \u0438\u0437 \u0443\u0436\u0435 \u043f\u0440\u043e\u0434\u0435\u043b\u0430\u043d\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b, \u044d\u0442\u043e \u0442\u043e, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0438\u0445 \u043d\u0430 Go \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043d\u043e \u0438 \u0443\u0434\u043e\u0431\u043d\u043e. \u041c\u043d\u0435 \u0431\u044b \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c, \u0447\u0442\u043e\u0431\u044b \u044f\u0437\u044b\u043a \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u043b\u0441\u044f \u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u043f\u0440\u0438\u043a\u043b\u0430\u0434\u043d\u043e\u0439 \u043d\u0438\u0448\u0438, \u0438 \u044f \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u044e\u0441\u044c \u0432\u043d\u0435\u0441\u0442\u0438 \u0432 \u044d\u0442\u043e \u0441\u0432\u043e\u0439 \u0432\u043a\u043b\u0430\u0434.<\/p>\n<p>\u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u0432\u0430\u0448\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435!<\/p>\n<p>P.S. \u0410 \u0442\u0435\u043b\u0435\u0433\u0440\u0430\u043c-\u043a\u0430\u043d\u0430\u043b\u0430 \u0443 \u043c\u0435\u043d\u044f \u043d\u0435\u0442 \u00af\\_(\u30c4)_\/\u00af<\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/874264\/\"> https:\/\/habr.com\/ru\/articles\/874264\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0418\u0434\u0435\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0438\u0433\u0440\u0443 \u043f\u043e\u0434 Android \u043d\u0430 Go \u0431\u044b\u043b\u0430 \u043d\u0435\u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e\u0439, \u043d\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0439. \u042f \u043b\u0435\u0433\u043a\u043e \u043c\u043e\u0433 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c Go \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u043e\u0439 \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u0439 \u043d\u0438\u0448\u0435, \u043d\u043e \u0438 \u0432 \u043f\u0440\u0438\u043a\u043b\u0430\u0434\u043d\u043e\u0439 \u2014 \u0435\u0433\u043e \u043a\u0440\u043e\u0441\u0441-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0438 \u0431\u043b\u0438\u0437\u043e\u0441\u0442\u044c \u043a \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u043c\u0443 \u0443\u0440\u043e\u0432\u043d\u044e \u0432 \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u0438 \u0441 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u043e\u0439 \u043f\u0440\u0438\u0448\u043b\u0438\u0441\u044c \u0431\u044b \u0442\u0430\u043c \u043e\u0447\u0435\u043d\u044c \u043a\u0441\u0442\u0430\u0442\u0438. \u0418 \u0432\u043e\u0442 \u043c\u044b \u0437\u0434\u0435\u0441\u044c \u2014 \u0438\u0433\u0440\u0443 \u043c\u0435\u0447\u0442\u044b \u044f \u043f\u043e\u043a\u0430 \u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u043b, \u043d\u043e \u043f\u0430\u0440\u0443 \u0438\u0433\u0440 \u043f\u043e\u043f\u0440\u043e\u0449\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0443\u0434\u0430\u043b\u043e\u0441\u044c.<\/p>\n<p>\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0445\u043e\u0447\u0443 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u0431 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0445, \u043f\u043e\u044f\u0432\u0438\u0432\u0448\u0438\u0445\u0441\u044f \u043f\u043e \u0445\u043e\u0434\u0443 \u0440\u0430\u0431\u043e\u0442\u044b. \u0421\u0430\u043c\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u044f \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u043b \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 <a href=\"https:\/\/github.com\/a1emax\/youngine\" rel=\"noopener noreferrer nofollow\">Youngine<\/a> \u0438 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043b \u043d\u0430 GitHub. \u0422\u0430\u043c \u0436\u0435 \u044f \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043b <a href=\"https:\/\/github.com\/a1emax\/dragon\" rel=\"noopener noreferrer nofollow\">\u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0438\u0433\u0440\u0443<\/a> \u0434\u0440\u0430\u043a\u043e\u043d\u043e\u0432\u043e-\u0437\u043c\u0435\u0438\u043d\u043e\u0439 \u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0438 \u043f\u043e \u043d\u043e\u0432\u043e\u0433\u043e\u0434\u043d\u0435\u043c\u0443 \u0441\u043b\u0443\u0447\u0430\u044e \u043a\u0430\u043a \u043f\u0440\u0438\u043c\u0435\u0440 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043d\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430.<\/p>\n<h2>Youngine<\/h2>\n<p>\u041e\u0431\u0440\u0430\u0442\u043d\u044b\u0439 Node.js \u0432 \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u0435 Go \u043e\u043b\u0438\u0446\u0435\u0442\u0432\u043e\u0440\u044f\u0435\u0442 \u043d\u0435 \u0442\u0430\u043a \u0443\u0436 \u043c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432. \u0414\u043b\u044f \u043c\u043e\u0435\u0439 \u0436\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u0432\u044b\u0431\u043e\u0440 \u0447\u0443\u0442\u044c \u043b\u0438 \u043d\u0435 \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e \u0441\u0432\u0451\u043b\u0441\u044f \u043a <a href=\"https:\/\/github.com\/hajimehoshi\/ebiten\" rel=\"noopener noreferrer nofollow\">Ebitengine<\/a>. \u0415\u0441\u0442\u044c \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u044f\u044e\u0449\u0438\u0435 \u0448\u0442\u0443\u043a\u0438 \u0432\u0440\u043e\u0434\u0435 <a href=\"https:\/\/github.com\/fyne-io\/fyne\" rel=\"noopener noreferrer nofollow\">Fyne<\/a>, <a href=\"https:\/\/github.com\/gioui\/gio\" rel=\"noopener noreferrer nofollow\">Gio<\/a>, <a href=\"https:\/\/github.com\/AllenDang\/giu\" rel=\"noopener noreferrer nofollow\">giu<\/a>, <a href=\"https:\/\/github.com\/go-flutter-desktop\/go-flutter\" rel=\"noopener noreferrer nofollow\">go-flutter<\/a> \u2013 \u043d\u043e \u044f \u0432 \u0438\u0442\u043e\u0433\u0435 \u043d\u0435 \u0441\u0442\u0430\u043b \u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e \u0440\u0430\u0437\u043d\u044b\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c: \u044f\u0432\u043d\u0430\u044f \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c (\u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0441 \u0443\u0447\u0451\u0442\u043e\u043c \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0438 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0439), \u0434\u043b\u044f \u0438\u0433\u0440 (\u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0441 \u0443\u0447\u0451\u0442\u043e\u043c \u0441\u043b\u043e\u0436\u043d\u043e\u0439 \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u0438 \u0448\u044d\u0439\u0434\u0435\u0440\u043e\u0432), \u043e\u0431\u0438\u043b\u0438\u0435 Cgo \u0438 \u043f\u0440\u043e\u0447\u0435\u0435 \u0441\u0443\u0431\u044a\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0435.<\/p>\n<p>\u0427\u0442\u043e \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f Ebitengine, \u0442\u043e \u043f\u0440\u043e dead simple \u2013 \u044d\u0442\u043e \u043d\u0435 \u0448\u0443\u0442\u043a\u0430. \u0421 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u0442\u0430\u043c \u0435\u0441\u0442\u044c \u0430\u0436 \u0446\u0435\u043b\u044b\u0439 Go-\u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0439 \u044f\u0437\u044b\u043a \u0448\u0435\u0439\u0434\u0435\u0440\u043e\u0432, \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0443\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0430\u0442\u043b\u0430\u0441\u044b, \u0435\u0441\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0448\u0440\u0438\u0444\u0442\u043e\u0432 \u0438 \u0430\u0443\u0434\u0438\u043e, \u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0434\u043b\u044f Android \u0438 iOS (\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0439 <a href=\"https:\/\/github.com\/golang\/mobile\" rel=\"noopener noreferrer nofollow\">gomobile<\/a>). \u0421 \u0434\u0440\u0443\u0433\u043e\u0439 \u0436\u0435 \u2014 \u044d\u0442\u043e \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u043e\u043a\u043d\u0430: \u0446\u0438\u043a\u043b \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f\/\u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u0441\u044b\u0440\u043e\u0439 \u0432\u0432\u043e\u0434 \u2014 \u0438 \u0432\u0441\u0451, \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0442\u0435\u0431\u0435 \u0430\u0441\u0441\u0435\u0442\u043e\u0432, \u0432\u0438\u0434\u0436\u0435\u0442\u043e\u0432, \u0444\u0438\u0437\u0438\u043a\u0438 \u0438 \u043f\u0440\u043e\u0447\u0435\u0439 \u043b\u0438\u0440\u0438\u043a\u0438. \u0415\u0441\u0442\u044c \u043d\u0430\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430, \u043d\u043e \u0438\u0445 \u043d\u0435 \u0442\u043e \u0447\u0442\u043e\u0431\u044b \u043c\u043d\u043e\u0433\u043e.<\/p>\n<p>\u041a\u043e\u0440\u043e\u0447\u0435 \u0433\u043e\u0432\u043e\u0440\u044f, \u0443 \u043c\u0435\u043d\u044f \u043d\u0430 \u0440\u0443\u043a\u0430\u0445 \u0431\u044b\u043b \u043c\u043e\u0449\u043d\u044b\u0439 \u0434\u0440\u0430\u0439\u0432\u0435\u0440, \u043d\u043e \u043a\u0430\u0440\u043a\u0430\u0441 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u043e\u0432\u0435\u0440\u0445 \u043d\u0435\u0433\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u043e\u044f\u043b\u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e.<\/p>\n<details class=\"spoiler\">\n<summary>\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043e\u0448\u0438\u0431\u043e\u043a (\u043f\u0430\u043a\u0435\u0442 fault)<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0412 \u0438\u043d\u043e\u043c \u044f\u0437\u044b\u043a\u0435 \u043f\u0430\u043a\u0435\u0442\u0430 <a href=\"https:\/\/pkg.go.dev\/github.com\/a1emax\/youngine@v0.3.0\/fault\" rel=\"noopener noreferrer nofollow\">fault<\/a> \u043d\u0435 \u0431\u044b\u043b\u043e \u0431\u044b \u0432\u043e\u0432\u0441\u0435, \u043a\u0430\u043a \u0438 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0441 \u043d\u0438\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0430 \u0441\u0442\u0430\u0442\u044c\u0438. \u041d\u043e \u0432 Go \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043b\u0438\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043e\u0442\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435 \u0438 \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u0442\u044c \u043f\u0440\u0438\u043d\u0446\u0438\u043f, \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u044f \u0440\u0435\u0448\u0438\u043b \u043f\u0440\u0438\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u044d\u0442\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u2014 \u044d\u0442\u043e \u043d\u0435 \u0441\u043d\u0438\u043c\u0435\u0442 \u0432\u043e\u043f\u0440\u043e\u0441\u044b, \u043d\u043e \u0445\u043e\u0442\u044f \u0431\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u0442 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f.<\/p>\n<p>\u0418\u0442\u0430\u043a, \u0435\u0441\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0438 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0438 \u043e\u0448\u0438\u0431\u043a\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430.<\/p>\n<p>\u041a \u043f\u0435\u0440\u0432\u043e\u043c\u0443 \u0442\u0438\u043f\u0443 \u043e\u0442\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0438 \u0434\u0435\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439, \u0441\u0435\u0442\u0435\u0432\u044b\u043c \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435\u043c, \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f\u043c\u0438 \u043a \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435, \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435\u043c \u0437\u0432\u0443\u043a\u0430 \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435. \u0422\u0430\u043a\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u0430 error, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0438\u0445 \u043d\u0430 \u043c\u0435\u0441\u0442\u0435 \u2014 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e \u0447\u0435\u0440\u0435\u0437 \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u0432\u0440\u0435\u043c\u044f, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0438\u043b\u0438 \u0434\u0430\u0436\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u043e\u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441 \u0437\u0430\u043f\u0438\u0441\u044c\u044e \u0432 \u043b\u043e\u0433.<\/p>\n<p>\u041a\u043e \u0432\u0442\u043e\u0440\u043e\u043c\u0443 \u0442\u0438\u043f\u0443 \u043e\u0442\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u043a\u043e\u0434\u043e\u043c \u2014 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 nil \u0442\u0430\u043c, \u0433\u0434\u0435 \u044d\u0442\u043e \u043d\u0435 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043e (\u0438 \u0432 \u0442\u0435\u043e\u0440\u0438\u0438 \u043c\u043e\u0433\u043b\u043e \u0431\u044b \u0431\u044b\u0442\u044c \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u0442\u0438\u043f\u043e\u0432). \u0414\u043b\u044f \u0442\u0430\u043a\u0438\u0445 \u043e\u0448\u0438\u0431\u043e\u043a \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0430\u043d\u0438\u043a\u0430 \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u0442\u0438\u043f\u0430 error, \u0441\u043e\u043f\u0440\u043e\u0432\u043e\u0436\u0434\u0430\u0435\u043c\u044b\u043c <a href=\"https:\/\/pkg.go.dev\/github.com\/a1emax\/youngine@v0.3.0\/fault#Trace\" rel=\"noopener noreferrer nofollow\">\u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u043e\u0439 \u0441\u0442\u044d\u043a\u0430<\/a> \u2014 \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u0430\u0434\u0435\u043a\u0432\u0430\u0442\u043d\u043e\u0433\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0438\u0445 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043d\u0430 \u043c\u0435\u0441\u0442\u0435 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442, \u043c\u043e\u0436\u043d\u043e \u043b\u0438\u0448\u044c \u0441\u043e\u043e\u0431\u0449\u0438\u0442\u044c \u043e \u043d\u0438\u0445 \u0438 \u0430\u0432\u0430\u0440\u0438\u0439\u043d\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u043d\u0435\u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u0443\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443. \u0412 \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0439 \u0436\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u043e\u043d\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c \u043d\u0435 \u043c\u043e\u0433\u0443\u0442, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u0431\u0435\u0441\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u044b\u043c\u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043f\u043e \u0432\u0441\u0435\u043c\u0443 \u0441\u0442\u044d\u043a\u0443, \u043a\u0430\u043a \u0434\u043b\u044f \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0442\u0438\u043f\u0430.<\/p>\n<p>\u041a\u043e \u0432\u0442\u043e\u0440\u043e\u043c\u0443 \u0436\u0435 \u0442\u0438\u043f\u0443 \u043e\u0442\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u0438 \u043f\u0430\u043d\u0438\u043a\u0438, \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0435 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u043e\u043c. \u041f\u043e\u0432\u043b\u0438\u044f\u0442\u044c \u043d\u0430 \u044d\u0442\u043e\u0442 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043d\u0435\u043b\u044c\u0437\u044f, \u043d\u043e \u0442\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u0441 \u043d\u0438\u043c \u0441\u043e\u0433\u043b\u0430\u0441\u0443\u0435\u0442\u0441\u044f.<\/p>\n<p>\u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0432\u0435\u0440\u0445\u043d\u0435\u043c \u0443\u0440\u043e\u0432\u043d\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 <a href=\"https:\/\/pkg.go.dev\/github.com\/a1emax\/youngine@v0.3.0\/fault#Recover\" rel=\"noopener noreferrer nofollow\">\u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0438\u0437 \u043f\u0430\u043d\u0438\u043a\u0438<\/a>, \u0435\u0441\u043b\u0438 \u043e\u043d\u0430 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430, \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0442 \u043e\u0448\u0438\u0431\u043a\u0438 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 <code>ebiten.Game.Update<\/code>) \u043b\u0438\u0431\u043e \u0435\u0451 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 main). \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0430\u0432\u0430\u0440\u0438\u0439\u043d\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442\u0441\u044f.<\/p>\n<\/div>\n<\/details>\n<p><strong>\u041b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0432\u0440\u0435\u043c\u044f (\u043f\u0430\u043a\u0435\u0442 clock)<\/strong><\/p>\n<p>\u0410\u043d\u0438\u043c\u0430\u0446\u0438\u0438, \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0440\u0430\u0441\u0447\u0451\u0442\u044b, \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0432\u0432\u043e\u0434\u0430, \u0438\u0433\u0440\u043e\u0432\u044b\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u2014 \u0432\u0441\u0451 \u044d\u0442\u043e \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043e \u043d\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u0412\u0441\u0435\u0433\u0434\u0430 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u043f\u043b\u0430\u0432\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435, \u043d\u043e \u0432 \u0442\u043e \u0436\u0435 \u0432\u0440\u0435\u043c\u044f \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0441\u0442\u044c \u0432\u0441\u0435\u0445 \u0447\u0430\u0441\u0442\u0435\u0439 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u043f\u043e\u043b\u0430\u0433\u0430\u0442\u044c\u0441\u044f \u043b\u0438\u0448\u044c \u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u0447\u0430\u0441\u044b, \u043d\u0438\u043a\u0430\u043a \u0438\u0445 \u043d\u0435 \u0430\u0431\u0441\u0442\u0440\u0430\u0433\u0438\u0440\u0443\u044f, \u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0437-\u0437\u0430 \u043f\u0440\u0438\u0440\u043e\u0434\u044b \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043d\u044b\u0445 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 \u0432\u0441\u0435 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0431\u0443\u0434\u0443\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f (\u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c\u0441\u044f) \u043a\u0430\u0436\u0434\u044b\u0439 \u0432 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u043c\u043e\u043c\u0435\u043d\u0442\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0435\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0442\u044c \u0442\u043e \u043b\u0438 \u00ab\u0422\u0435\u0440\u043c\u0438\u043d\u0430\u0442\u043e\u0440: \u0413\u0435\u043d\u0435\u0437\u0438\u0441\u00bb, \u0442\u043e \u043b\u0438 \u00ab\u0428\u043e\u0443 \u0411\u0435\u043d\u043d\u0438 \u0425\u0438\u043b\u043b\u0430\u00bb \u2014 \u0432\u043e \u0432\u0441\u044f\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043e\u0448\u0438\u0431\u043e\u043a. \u0414\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043f\u0435\u0440\u0435\u0434 \u043d\u0430\u0447\u0430\u043b\u043e\u043c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u2014 \u0442\u043e\u0433\u0434\u0430 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0434\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c\u0443 \u0442\u0430\u043a\u043e\u043c\u0443 \u043c\u043e\u043c\u0435\u043d\u0442\u0443, \u0430 \u043f\u043e\u0441\u043b\u0435 \u2014 \u0442\u0435\u043a\u0443\u0449\u0435\u043c\u0443, \u0430 \u0432\u0440\u0435\u043c\u044f \u0441\u0442\u0430\u043d\u0435\u0442 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u043c.<\/p>\n<p>\u0415\u0449\u0451 \u043e\u0434\u043d\u0438\u043c \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u043e\u043c \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043d\u043e\u0439 \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e, \u0447\u0442\u043e \u043e\u0434\u043d\u0430 \u0438 \u0442\u0430 \u0436\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0434\u0430\u0436\u0435 \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0435 \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e\u0435 \u0432\u0440\u0435\u043c\u044f, \u0438\u0437-\u0437\u0430 \u0447\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0440\u0430\u0437\u043d\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e. \u041f\u0440\u0438\u0447\u0451\u043c \u0440\u0435\u0447\u044c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0435 \u0442\u043e\u0440\u043c\u043e\u0437\u0430, \u043d\u043e \u0438 \u043f\u0440\u043e \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0432\u044b\u0441\u043e\u043a\u0443\u044e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043d\u0430 \u0431\u043e\u043b\u0435\u0435 \u043c\u043e\u0449\u043d\u044b\u0445 \u043c\u0430\u0448\u0438\u043d\u0430\u0445, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0434\u0435\u043b\u0430\u0435\u0442 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0438\u0447\u0443\u0442\u044c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u043d\u0435\u043f\u0440\u0438\u0433\u043e\u0434\u043d\u044b\u043c \u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e. \u042d\u0442\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438, \u043d\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e Ebitengine \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0448\u0430\u0433, \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u044f \u0441\u0432\u0435\u0440\u0445\u0443 \u0447\u0430\u0441\u0442\u043e\u0442\u0443 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f (\u0442\u043e \u0435\u0441\u0442\u044c \u0432\u044b\u0437\u043e\u0432\u043e\u0432 <code>ebiten.Game.Update<\/code>) \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c TPS (ticks per second), \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0440\u0430\u0432\u043d\u044b\u043c 60.<\/p>\n<p>\u041f\u0430\u043a\u0435\u0442 <a href=\"https:\/\/pkg.go.dev\/github.com\/a1emax\/youngine@v0.3.0\/clock\" rel=\"noopener noreferrer nofollow\">clock<\/a> \u0432\u0432\u043e\u0434\u0438\u0442 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0435 <a href=\"https:\/\/pkg.go.dev\/github.com\/a1emax\/youngine@v0.3.0\/clock#Ticks\" rel=\"noopener noreferrer nofollow\">\u0442\u0438\u043a\u0438<\/a> \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0435\u0434\u0438\u043d\u0438\u0446 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u2014 \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043a\u0430\u043a \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0442\u0430\u043a \u0438 \u043d\u0430\u043d\u043e\u0441\u0435\u043a\u0443\u043d\u0434\u044b, \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 (\u0433\u043b\u0430\u0432\u043d\u043e\u0435, \u0447\u0442\u043e\u0431\u044b \u0432\u0441\u0435\u0433\u0434\u0430 \u0438 \u0432\u0435\u0437\u0434\u0435 \u0432 \u043e\u0434\u043d\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u043e\u043d\u0438 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e). <a href=\"https:\/\/pkg.go.dev\/github.com\/a1emax\/youngine@v0.3.0\/clock#Clock\" rel=\"noopener noreferrer nofollow\">\u0427\u0430\u0441\u044b<\/a> \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0432\u0440\u0435\u043c\u044f, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u0438 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u0441\u044f \u0434\u043e \u0435\u0451 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f.<\/p>\n<p>\u0414\u0440\u0430\u0439\u0432\u0435\u0440 <a href=\"https:\/\/pkg.go.dev\/github.com\/a1emax\/youngine@v0.3.0\/clock\/driver\/ebitenclock\" rel=\"noopener noreferrer nofollow\">ebitenclock<\/a> \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0447\u0430\u0441\u044b, \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u044e\u0449\u0438\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430 \u043e\u0434\u0438\u043d \u0442\u0438\u043a \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438.<\/p>\n<p><strong>\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0432\u0432\u043e\u0434\u0430 (\u043f\u0430\u043a\u0435\u0442 input)<\/strong><\/p>\n<p>\u0421\u0438\u0441\u0442\u0435\u043c\u044b \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432\u0432\u043e\u0434\u0430, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u044f \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u043b\u0441\u044f, \u043c\u043e\u0436\u043d\u043e \u0443\u0441\u043b\u043e\u0432\u043d\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u043d\u0430 \u0434\u0432\u0430 \u043d\u0435\u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u044e\u0449\u0438\u0445\u0441\u044f \u043a\u043b\u0430\u0441\u0441\u0430 \u2014 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u044f\u0445 \u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0435 \u043f\u0440\u044f\u043c\u043e\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0442\u0435\u043a\u0443\u0449\u0435\u043c\u0443 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044e. \u041f\u0435\u0440\u0432\u044b\u0435 \u0443\u0434\u043e\u0431\u043d\u044b \u043f\u0440\u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0438 GUI \u2014 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, key press \u0438\u043b\u0438 mouse move) \u043f\u0440\u0438\u0432\u044f\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043a \u0435\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c \u0438 \u0441\u043a\u0440\u044b\u0432\u0430\u044e\u0442 \u043b\u043e\u0433\u0438\u043a\u0443 \u043e\u0442\u043d\u0435\u0441\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043c\u044b\u0448\u0438, \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0444\u043e\u043a\u0443\u0441\u0430 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044b \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435. \u0412\u0442\u043e\u0440\u044b\u0435 \u0436\u0435 \u0443\u0434\u043e\u0431\u043d\u044b \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u0433\u0440\u043e\u0432\u043e\u0433\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044f \u043d\u0435 \u0440\u0430\u0437\u043c\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0443\u044e \u043b\u043e\u0433\u0438\u043a\u0443 \u043f\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c \u0441\u043e\u0431\u044b\u0442\u0438\u0439 (\u0435\u0441\u043b\u0438 \u043e\u043d\u0430 \u0432\u043e\u043e\u0431\u0449\u0435 \u0432 \u043d\u0438\u0445 \u0432\u043f\u0438\u0448\u0435\u0442\u0441\u044f). \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432 \u0438\u0433\u0440\u0430\u0445 \u0435\u0441\u0442\u044c \u0438 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441, \u0438 \u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435, \u0438\u0433\u0440\u043e\u0432\u044b\u0435 \u0434\u0432\u0438\u0436\u043a\u0438 \u043e\u0431\u044b\u0447\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442 \u043e\u0431\u0430 \u043a\u043b\u0430\u0441\u0441\u0430, \u0442\u0430\u043a \u0438\u043b\u0438 \u0438\u043d\u0430\u0447\u0435 \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u044f \u0438\u0445 \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439.<\/p>\n<p>\u0412 \u043f\u0430\u043a\u0435\u0442\u0435 <a href=\"https:\/\/pkg.go.dev\/github.com\/a1emax\/youngine@v0.3.0\/input\" rel=\"noopener noreferrer nofollow\">input<\/a> \u043e\u043f\u0438\u0441\u0430\u043d <a href=\"https:\/\/pkg.go.dev\/github.com\/a1emax\/youngine@v0.3.0\/input#Input\" rel=\"noopener noreferrer nofollow\">\u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b<\/a>, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c\u044b\u0439 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u043e\u043c <a href=\"https:\/\/pkg.go.dev\/github.com\/a1emax\/youngine@v0.3.0\/input\/driver\/ebiteninput\" rel=\"noopener noreferrer nofollow\">ebiteninput<\/a> \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 Ebitengine. \u042d\u0442\u043e\u0442 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442 \u0444\u0438\u043a\u0441\u0430\u0446\u0438\u044e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0432\u0432\u043e\u0434\u0430 \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f (\u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0447\u0430\u0441\u043e\u0432) \u0438 \u0432 \u0445\u043e\u0434\u0435 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043d\u0435\u043c\u0443 \u0434\u043b\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438. \u0415\u0441\u043b\u0438 \u043d\u0430 \u043a\u0430\u043a\u043e\u043c-\u0442\u043e \u0435\u0451 \u0448\u0430\u0433\u0435 \u0447\u0430\u0441\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f, \u043e\u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043f\u043e\u043c\u0435\u0447\u0435\u043d\u0430 (Mark), \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0431\u044b\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u043d\u0451\u043d\u043d\u043e\u0439 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0448\u0430\u0433\u0430\u0445 \u2014 \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0448\u0430\u0433\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u00ab\u043f\u043e\u0433\u043b\u043e\u0449\u0430\u044e\u0442\u00bb \u0447\u0430\u0441\u0442\u0438 \u0432\u0432\u043e\u0434\u0430.<\/p>\n<details class=\"spoiler\">\n<summary>\u0418\u0441\u0442\u043e\u0440\u0438\u044f \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043c\u043e\u044f \u0434\u043e\u0447\u044c \u043d\u0430\u0448\u043b\u0430 \u0442\u043e \u043b\u0438 \u0431\u0430\u0433, \u0442\u043e \u043b\u0438 \u0444\u0438\u0447\u0443<\/summary>\n<div class=\"spoiler__content\">\n<p>\u041a\u043e\u0433\u0434\u0430 \u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b \u043f\u0435\u0440\u0432\u0443\u044e \u0438\u0433\u0440\u0443 \u0438 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b, \u043c\u043e\u044f \u0434\u043e\u0447\u044c, \u0438\u0433\u0440\u0430\u044f \u0432 \u043d\u0435\u0451 \u043d\u0430 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0435, \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0430\u0441\u044c \u0441 \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439: \u0435\u0441\u043b\u0438 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043a\u043e\u0441\u043d\u0443\u0442\u044c\u0441\u044f \u044d\u043a\u0440\u0430\u043d\u0430 \u0431\u043e\u043b\u044c\u0448\u0435 \u0447\u0435\u043c \u0434\u0432\u0443\u043c\u044f \u043f\u0430\u043b\u044c\u0446\u0430\u043c\u0438, \u0430 \u043f\u043e\u0442\u043e\u043c \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0436\u0435 \u0438\u0445 \u0443\u0431\u0440\u0430\u0442\u044c, \u0442\u043e \u0437\u0430\u043a\u043e\u043d\u0447\u0430\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u0432\u0430 \u0442\u0430\u0447\u0430, \u0430 \u043e\u0431 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442 \u0434\u043e\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c, \u0445\u043e\u0442\u044f \u044d\u043a\u0440\u0430\u043d \u0443\u0436\u0435 \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0442\u0440\u043e\u0433\u0430\u0435\u0442 \u2014 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, \u043e\u043d\u0438 \u0437\u0430\u0432\u0438\u0441\u043d\u0443\u0442, \u0438 \u0447\u0442\u043e\u0431\u044b \u043e\u0442 \u043d\u0438\u0445 \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f, \u043d\u0443\u0436\u043d\u043e \u0442\u0440\u043e\u0433\u0430\u0442\u044c \u044d\u043a\u0440\u0430\u043d \u0445\u0438\u0442\u0440\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442. \u042d\u0442\u0430 \u0431\u0430\u0433\u043e\u0444\u0438\u0447\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0433\u0434\u0435-\u0442\u043e \u043d\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u0435 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 \u0441\u0435\u043d\u0441\u043e\u0440\u043d\u043e\u0433\u043e \u044d\u043a\u0440\u0430\u043d\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0433\u043e Ebitengine, \u0438 \u0434\u043b\u044f \u043d\u0435\u0451 \u0435\u0441\u0442\u044c <s>\u043a\u043e\u0441\u0442\u044b\u043b\u044c<\/s> \u0432\u043d\u0435\u0448\u043d\u044f\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u0432 ebiteninput. \u0415\u0441\u043b\u0438 \u043a\u0442\u043e-\u0442\u043e \u0432 \u043a\u0443\u0440\u0441\u0435, \u0441 \u0447\u0435\u043c \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0442\u0430\u043a\u043e\u0435 \u0441\u0442\u0440\u0430\u043d\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u2014 \u043d\u0430\u043f\u0438\u0448\u0438\u0442\u0435 \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445, \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e.<\/p>\n<\/div>\n<\/details>\n<p>\u041f\u0440\u043e\u0442\u043e\u043a\u043e\u043b (\u0431\u0435\u0437 \u0437\u043d\u0430\u043d\u0438\u044f \u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0435) \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f <a href=\"https:\/\/pkg.go.dev\/github.com\/a1emax\/youngine@v0.3.0\/input#Controller\" rel=\"noopener noreferrer nofollow\">\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430\u043c\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432\u0432\u043e\u0434\u0430<\/a>. \u041d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u043d (Actuate), \u0435\u0441\u043b\u0438 \u043e\u043d \u0433\u043e\u0442\u043e\u0432 \u043a \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0432\u0432\u043e\u0434\u0430, \u043b\u0438\u0431\u043e \u043f\u043e\u0434\u0430\u0432\u043b\u0435\u043d (Inhibit), \u0435\u0441\u043b\u0438 \u043e\u043d \u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0435\u0433\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c. \u041a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044e\u0449\u0438\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f, \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u0432 \u043f\u0430\u043a\u0435\u0442\u0430\u0445 \u0433\u0440\u0443\u043f\u043f\u044b <a href=\"https:\/\/pkg.go.dev\/github.com\/a1emax\/youngine@v0.3.0\/input\/element\" rel=\"noopener noreferrer nofollow\">element<\/a>, \u043d\u043e \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043c\u043e\u0436\u0435\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0441 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0439 \u043b\u043e\u0433\u0438\u043a\u043e\u0439. \u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u044e, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e \u0438\u0445 \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u2014 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u043c\u044b\u0448\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u043d\u0430\u0436\u0430\u0442\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u0430\u044f \u043a\u043b\u0430\u0432\u0438\u0448\u0430 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044b, \u043b\u0438\u0431\u043e \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442 \u2014 \u0440\u0435\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u043d\u044b\u0439 \u0432\u0432\u043e\u0434 \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u043c\u044b\u0448\u044c \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u0433\u0440\u0430\u043d\u0438\u0446\u0430\u0445.<\/p>\n<p>\u041f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 \u0438 \u0438\u0445 \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u044e\/\u043f\u043e\u0434\u0430\u0432\u043b\u0435\u043d\u0438\u0435, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0438\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u0439, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 GUI, \u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u0434\u0430\u043b\u044c\u0448\u0435.<\/p>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b GUI \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0442 \u0441 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430\u043c\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0438\u0445 \u0438\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432\u0432\u043e\u0434\u0430, \u0430 \u0442\u0435, \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0438\u0435 \u0438\u0445 \u0447\u0430\u0441\u0442\u0438 \u0432\u0432\u043e\u0434\u0430 \u043f\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c\u043e\u043c\u0443 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u043e\u043c. \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043b\u0430\u0433\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430, \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 (\u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432 \u0438\u0433\u0440\u0430\u0445 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0435\u0442) \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044f \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043b\u0438\u0431\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432\u0432\u043e\u0434\u0430, \u043b\u0438\u0431\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0442\u0430\u043a \u0436\u0435 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e.<\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u0434\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u043a\u043d\u043e\u043f\u043a\u0438<\/summary>\n<div class=\"spoiler__content\">\n<p><a href=\"https:\/\/github.com\/a1emax\/dragon\/blob\/v0.1.0\/pkg\/window\/common\/button\/controller_desktop.go\" rel=\"noopener noreferrer nofollow\">dragon\/pkg\/window\/common\/button\/controller_desktop.go<\/a><\/p>\n<pre><code class=\"go\">\/\/go:build !android &amp;&amp; !ios  package button  import ( \"github.com\/a1emax\/youngine\/basic\" \"github.com\/a1emax\/youngine\/input\" \"github.com\/a1emax\/youngine\/input\/element\/mousebutton\" \"github.com\/a1emax\/youngine\/input\/element\/mousecursor\" )  func (b *buttonImpl[R]) initController(config Config) { b.controller = mousecursor.NewController(mousecursor.ControllerConfig[basic.None]{ Cursor: config.Input.Mouse().Cursor(),  HitTest: func(position basic.Vec2) bool { return b.region.Rect().Contains(position) },  Slave: mousebutton.NewController(mousebutton.ControllerConfig[mousecursor.Background[basic.None]]{ Button: config.Input.Mouse().Button(input.MouseButtonCodeLeft), Clock:  config.Clock,  OnPress: func(event mousebutton.PressEvent[mousecursor.Background[basic.None]]) { b.isPressed = true  if config.OnPress != nil { config.OnPress(PressEvent{ Duration: event.Duration, }) } }, OnUp: func(event mousebutton.UpEvent[mousecursor.Background[basic.None]]) { b.isPressed = false  if config.OnClick != nil { config.OnClick(ClickEvent{}) } }, OnGone: func(event mousebutton.GoneEvent) { b.isPressed = false }, }), }) }<\/code><\/pre>\n<p><a href=\"https:\/\/github.com\/a1emax\/dragon\/blob\/v0.1.0\/pkg\/window\/common\/button\/controller_mobile.go\" rel=\"noopener noreferrer nofollow\">dragon\/pkg\/window\/common\/button\/controller_mobile.go<\/a><\/p>\n<pre><code class=\"go\">\/\/go:build android ||<\/code><\/pre>\n<\/div>\n<\/details>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-445284","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/445284","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=445284"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/445284\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=445284"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=445284"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=445284"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}