рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ, рд╣рдордиреЗ рдЖрдкрдХреЗ рд╕рд╛рде рдПрдХ рдмреНрд▓реИрдВрдХ рдмрдирд╛рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдмреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬрд┐рд╕ рдЖрдзрд╛рд░ рдкрд░ рд╣рдорд╛рд░рд╛ рдмреНрд░рд╣реНрдорд╛рдВрдб рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдХрдВрд╕реЛрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдЕрдЪреНрдЫрд╛ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд╛рда рд╡рд░реНрдг рдЙрдмрд╛рдК рд╣реИрдВ рдФрд░ рдмрд╣реБрдд рд╕реБрдВрджрд░ рдирд╣реАрдВ рд╣реИрдВ, рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╣рдо рдЕрдкрдиреА рдЯрд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд▓реНрдкрдирд╛ рдХрд░рдиреЗ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реЗрдВрдЧреЗ Phaser.jsрдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ, рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреА :
рдЕрдм рд╣рдо рд╡реЗрдм рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ Node.js рдФрд░ npm рд╕реНрдерд╛рдкрд┐рдд рд╣реИ, рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рддрддреНрдХрд╛рд▓ рдЗрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред рдФрд░ рдЗрд╕рд▓рд┐рдП рд╣рдо рдЯрд░реНрдорд┐рдирд▓ рдЦреЛрд▓рддреЗ рд╣реИрдВ рдФрд░ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ:$ npm install phaser@3.22.0
рдЯреАрдо рдХреЗ рд╕рдлрд▓ рд╕рдорд╛рдкрди рдкрд░, рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:+ phaser@3.22.0
added 15 packages from 48 contributors and audited 20 packages in 4.38s
рддреЛ рдареАрдХ рд╣реИ, рдореЙрдбреНрдпреВрд▓ рджрд┐рдЦрд╛рдИ рджрд┐рдП, рдЕрдм рд╣рдо рдЕрдкрдиреЗ рдЧреНрд░рд╛рд╣рдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдирд╛рдПрдВрдЧреЗ
ред рд╕рд╛рдордЧреНрд░реА рдореЗрдВ рд╣рдо рдЦреЗрд▓ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░реЗрдВрдЧреЗ, рдЕрд░реНрдерд╛рддред рд╣рдорд╛рд░рд╛ рдкреНрд░реЗрддред рд╣рдо рд░реВрдЯ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА (рдЬрд╣рд╛рдБ main.go file рд╕реНрдерд┐рдд рд╣реИ) рдореЗрдВ рджреЛ рдлрд╛рдЗрд▓ game.js рдФрд░ MainScene.js рднреА рдмрдирд╛рдпреЗрдВрдЧреЗ, index.htmlgame.js рдмрдирд╛рдПрдБ - рдЧреЗрдо рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рддрд╛ рд╣реИMainScene.js - рдореЗрдВ рдореБрдЦреНрдп рдЧреЗрдо рд╕реАрдиindex.html рдХрд╛ рд╡рд░реНрдЧ рд╣реЛрдЧрд╛ред - рд╡рд╣ рдкреГрд╖реНрда рдЬрд╣рд╛рдБ рджреГрд╢реНрдп рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛,рддреБрд░рдВрдд рд╣рдорд╛рд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рдХреЛ index.html рд╕реЗ рдЬреЛрдбрд╝реЗрдВрдЧреЗ рдФрд░ рд╣рдо рдЕрдм рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдкрд░ рдирд╣реАрдВ рд▓реМрдЯреЗрдВрдЧреЗ: <script src="node_modules/phaser/dist/phaser.js" type="module"></script>
<script src="Client/game.js" type="module"></script>
MainScene.js рдореЗрдВ рд╣рдо рдЕрдкрдиреЗ рднрд╡рд┐рд╖реНрдп рдХреЗ рджреГрд╢реНрдп рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯрд╛ рд╡рд░реНрдЧ рдЯреЗрдореНрдкрд▓реЗрдЯ рдмрдирд╛рдПрдВрдЧреЗ:export {MainScene}
class MainScene extends Phaser.Scene{
constructor() {
super({key: 'MainScene'})
}
preload() {
}
create() {
}
update() {
}
}
Game.js рдореЗрдВ рдЕрдкрдиреА рдкрд╕рдВрдж рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдЬреЛрдбрд╝реЗрдВ, рдпрд╣рд╛рдБ рдореЗрд░рд╛ рд╣реИрдВ:import {MainScene} from "./MainScene.js";
let config = {
type: Phaser.AUTO,
width: 800,
height: 600,
disableContextMenu: true,
background: 'black',
physics: {
default: 'arcade',
arcadePhysics: {
overlapBias: 1
}
},
scene:[MainScene],
pixelArt: true,
roundPixels: true,
antialias: true
}
let game = new Phaser.Game(config);
рдЕрдм рд╣рдореЗрдВ рдПрдХ HTTP рд╕рд░реНрд╡рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╡реЗрдВ рдкрд░ рдпрд╣ рдХреБрдЫ рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред Main.go рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдПрдХ рд╕рд░реНрд╡рд░ рдмрдирд╛рдПрдВ:package main
import (
"fmt"
"html/template"
"net/http"
)
func main() {
http.HandleFunc("/", indexHandler)
http.Handle("/node_modules/phaser/dist/", http.StripPrefix("/node_modules/phaser/dist/", http.FileServer(http.Dir("./node_modules/phaser/dist/"))))
http.Handle("/Client/", http.StripPrefix("/Client/", http.FileServer(http.Dir("./Client/"))))
http.Handle("/Client/Content/", http.StripPrefix("/Client/Content/", http.FileServer(http.Dir("./Client/Content/"))))
err := http.ListenAndServe(":8080", nil)
if err != nil {
fmt.Println(err.Error())
}
}
func indexHandler(w http.ResponseWriter, r *http.Request) {
fmt.Println("indexAction")
t, _ := template.ParseFiles("index.html")
err := t.Execute(w, "index")
if err != nil {
fmt.Println(err.Error())
}
}
рдЦреИрд░, рд╣рдорд╛рд░рд╛ рдЕрдкрдирд╛ рд╡реЗрдм рд╕рд░реНрд╡рд░ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рд╣реИ! рдЪрд▓реЛ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдУ! рдХрдВрд╕реЛрд▓ рдЦреЛрд▓реЗрдВ:$ go run main.go
рд╣рдо рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЦреЛрд▓рддреЗ рд╣реИрдВ рдФрд░ рд╣рдорд╛рд░реЗ рд╕рд░реНрд╡рд░ рд╕реЗ рдЬреБрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВрд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ: 8080
рдпрджрд┐ рдЖрдкрдиреЗ рдПрдХ рдХрд╛рд▓реА рд╕реНрдХреНрд░реАрди рджреЗрдЦреА, рддреЛ рдЖрдкрдиреЗ рд╕рдм рдХреБрдЫ рдареАрдХ рдХрд┐рдпрд╛редрдФрд░ рдЗрд╕рд▓рд┐рдП, рдЪрд▓рд┐рдП рдПрдХ рдФрд░ рд╣реИрдВрдбрд▓рд░ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╣рдо junk рдлреЙрд░реНрдореЗрдЯ рдореЗрдВ рдЕрдкрдирд╛ рд╣рд┐рд╕реНрд╕рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗред рдПрдХ рдЕрд▓рдЧ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕реЗ рдЧреЗрдордХрдВрдЯреНрд░реЛрд▓рд░ рдХрд╣реЗрдВ, рдпрд╣рд╛рдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЧреЗрдо рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рд╣реИрдВрдбрд▓рд░ рд╣реЛрдВрдЧреЗ, рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдВ Map_Controller.goрдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╣рдореЗрдВ рдПрдХ рд╕реБрдзрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИChunk.gopackage Chunk
import (
"exampleMMO/PerlinNoise"
"fmt"
)
var TILE_SIZE = 16
var CHUNK_SIZE = 16 * 16
var PERLIN_SEED float32 = 160
type Chunk struct {
ChunkID [2]int `json:"chunkID"`
Map map[Coordinate]Tile `json:"map"`
}
type Tile struct {
Key string `json:"key"`
X int `json:"x"`
Y int `json:"y"`
}
type Coordinate struct {
X int `json:"x"`
Y int `json:"y"`
}
func NewChunk(idChunk Coordinate) Chunk {
fmt.Println("New Chank", idChunk)
chunk := Chunk{ChunkID: [2]int{idChunk.X, idChunk.Y}}
var chunkXMax, chunkYMax int
var chunkMap map[Coordinate]Tile
chunkMap = make(map[Coordinate]Tile)
chunkXMax = idChunk.X * CHUNK_SIZE
chunkYMax = idChunk.Y * CHUNK_SIZE
switch {
case chunkXMax < 0 && chunkYMax < 0:
{
for x := chunkXMax + CHUNK_SIZE; x > chunkXMax; x -= TILE_SIZE {
for y := chunkYMax + CHUNK_SIZE; y > chunkYMax; y -= TILE_SIZE {
posX := float32(x - (TILE_SIZE / 2))
posY := float32(y + (TILE_SIZE / 2))
tile := Tile{}
tile.X = int(posX)
tile.Y = int(posY)
perlinValue := PerlinNoise.Noise(posX/PERLIN_SEED, posY/PERLIN_SEED)
switch {
case perlinValue < -0.01:
tile.Key = "Water"
case perlinValue >= -0.01 && perlinValue < 0:
tile.Key = "Sand"
case perlinValue >= 0 && perlinValue <= 0.5:
tile.Key = "Ground"
case perlinValue > 0.5:
tile.Key = "Mount"
}
chunkMap[Coordinate{X: tile.X, Y: tile.Y}] = tile
}
}
}
case chunkXMax < 0:
{
for x := chunkXMax + CHUNK_SIZE; x > chunkXMax; x -= TILE_SIZE {
for y := chunkYMax - CHUNK_SIZE; y < chunkYMax; y += TILE_SIZE {
posX := float32(x - (TILE_SIZE / 2))
posY := float32(y + (TILE_SIZE / 2))
tile := Tile{}
tile.X = int(posX)
tile.Y = int(posY)
perlinValue := PerlinNoise.Noise(posX/PERLIN_SEED, posY/PERLIN_SEED)
switch {
case perlinValue < -0.12:
tile.Key = "Water"
case perlinValue >= -0.12 && perlinValue <= 0.5:
tile.Key = "Ground"
case perlinValue > 0.5:
tile.Key = "Mount"
}
chunkMap[Coordinate{X: tile.X, Y: tile.Y}] = tile
}
}
}
case chunkYMax < 0:
{
for x := chunkXMax - CHUNK_SIZE; x < chunkXMax; x += TILE_SIZE {
for y := chunkYMax + CHUNK_SIZE; y > chunkYMax; y -= TILE_SIZE {
posX := float32(x + (TILE_SIZE / 2))
posY := float32(y - (TILE_SIZE / 2))
tile := Tile{}
tile.X = int(posX)
tile.Y = int(posY)
perlinValue := PerlinNoise.Noise(posX/PERLIN_SEED, posY/PERLIN_SEED)
switch {
case perlinValue < -0.12:
tile.Key = "Water"
case perlinValue >= -0.12 && perlinValue <= 0.5:
tile.Key = "Ground"
case perlinValue > 0.5:
tile.Key = "Mount"
}
chunkMap[Coordinate{X: tile.X, Y: tile.Y}] = tile
}
}
}
default:
{
for x := chunkXMax - CHUNK_SIZE; x < chunkXMax; x += TILE_SIZE {
for y := chunkYMax - CHUNK_SIZE; y < chunkYMax; y += TILE_SIZE {
posX := float32(x + (TILE_SIZE / 2))
posY := float32(y + (TILE_SIZE / 2))
tile := Tile{}
tile.X = int(posX)
tile.Y = int(posY)
perlinValue := PerlinNoise.Noise(posX/PERLIN_SEED, posY/PERLIN_SEED)
switch {
case perlinValue < -0.12:
tile.Key = "Water"
case perlinValue >= -0.12 && perlinValue <= 0.5:
tile.Key = "Ground"
case perlinValue > 0.5:
tile.Key = "Mount"
}
chunkMap[Coordinate{X: tile.X, Y: tile.Y}] = tile
}
}
}
}
chunk.Map = chunkMap
return chunk
}
рд╣рдордиреЗ рдЕрдкрдиреА рд╕рдВрд░рдЪрдирд╛рдУрдВ рдореЗрдВ рд╕рд┐рд░реНрдл json рдХреБрдВрдЬрд┐рдпрд╛рдБрдЬреЛрдбрд╝реАрдВ рдФрд░ рдЪрдВрдХ рд╕реГрдЬрди рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛ред рд╣рдо Map_Controller рдкрд░ рд▓реМрдЯ рдЖрдП,package GameController
import (
"encoding/json"
"exampleMMO/Chunk"
"fmt"
"net/http"
)
func Map_Handler(w http.ResponseWriter, r *http.Request) {
c:= Chunk.NewChunk(Chunk.Coordinate{1,1})
js, e :=json.Marshal(c)
if e!= nil {
fmt.Println(e.Error())
}
fmt.Println(string(js))
}
рдФрд░ main.go рдореЗрдВ рдПрдХ рдкрдВрдХреНрддрд┐ рдЬреЛрдбрд╝реЗрдВ http.HandleFunc("/map", GameController.Map_Handler)
рдЖрдЗрдП рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рдХрд░рдиреЗ рдФрд░ рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ рдЬрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ: 8080 / рдореИрдкредрдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ:New Chank {1 1}
json: unsupported type: map[Chunk.Coordinate]Chunk.Tile
рд╣рд╛рдВ, рд╣рдо рднреВрд▓ рдЧрдП рдХрд┐ рдЧреЛрд▓рдВрдЧ рдореЗрдВ, рдЬрдм рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдирдХреНрд╢реЗ рдХреА рдЪрд╛рдмрд┐рдпрд╛рдБ рдПрдХ рддрд╛рд░ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдХреНрд░рдорд╛рдВрдХрди рдХреЗ рд▓рд┐рдП, рдЧреЛ рдЬрд╛рдБрдЪ рдХрд░реЗрдВ рдХрд┐ рдХреНрдпрд╛ рдкреНрд░рдХрд╛рд░ TextMarshaler рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ MarsTText () рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рд╣рдореЗрдВ рдмрд╕ рд╣рдорд╛рд░реЗ Coordinate рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП MarshalText () рд╡рд┐рдзрд┐ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдоChunk .go рдкрд░ рд╡рд╛рдкрд╕ рдЖрддреЗ рд╣реИрдВ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:func (t Coordinate) MarshalText() ([]byte, error) {
return []byte("[" + strconv.Itoa(t.X) + "," + strconv.Itoa(t.Y) + "]"), nil
}
рдЖрдк рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рдзрд┐ рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реМрдЯрд╛рддреА рд╣реИред рд╣рдо рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рд╡рд┐рдЦрдВрдбреВ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдЖрдЗрдП рдЕрдм рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рд╣рдорд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рдХ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд╕рд░реНрд╡рд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ рдФрд░ рдХрдВрд╕реЛрд▓ рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рджреЗрдЦреЗрдВред
рд╣рд╛рдВ, рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ, рдЪрд▓реЛ рдЕрдм рд╕реНрдЯреНрд░реАрдо рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд╖реНрдХрд░реНрд╖ рдмрдирд╛рддреЗ рд╣реИрдВ, рд╣рдорд╛рд░реЗ рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рдЕрдВрдд рдореЗрдВ рджреЛ рд▓рд╛рдЗрдиреЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред
w.Header().Set("Content-Type", "application/json")
w.Write(js)
рдЕрднреА рдХреЗ рд▓рд┐рдП, рдЧреЛрд▓рдВрдЧ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рдХрд░реЗрдВ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░реЗрдВред рд╣рдореЗрдВ рддреАрди рд╢реАрд░реНрд╖рдХреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЙрдирдореЗрдВ рд╕реЗ 4 рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрднреА рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рддреАрди рдпрд╛ рджреЛ рд╣реИрдВред

рд╣рдорд╛рд░реА рдЯрд╛рдЗрд▓реЗрдВ рд╕рд╛рдордЧреНрд░реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ рдФрд░ MainScene.js рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ, рдкрд╣рд▓реЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдХреБрдЫ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:class MainScene extends Phaser.Scene{
constructor() {
super({key: 'MainScene'})
}
preload() {
this.load.image("Ground", "Client/Content/sprGrass.png")
this.load.image("Water", "Client/Content/sprWater1.png")
this.load.image("Sand", "Client/Content/sprGrass.png")
}
create() {
this.getGameMap()
}
update() {
}
async getGameMap() {
let res = await fetch("/map")
let result = await res.json()
this.drawChunk(result.map)
}
drawChunk(map) {
for (let chunkKey in map) {
this.add.image(map[chunkKey].x,map[chunkKey].y, map[chunkKey].key)
}
}
}
рд╕рд░реНрд╡рд░ рд╣рдорд╛рд░реЗ рдЪрдВрдХ рдХреЛ рдПрдХ рдЬреЛрдВрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдЖрдк рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдЗрд╕рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:
рдФрд░ рдЗрд╕рд▓рд┐рдП рдлреЗрдЬрд░ рдиреЗ рдЗрд╕реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛:
рд╣рдордиреЗ рд╕рд░реНрд╡рд░ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдмреАрдЪ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдХрд╛рдо рдХреА рдЬрд╛рдВрдЪ рдХреА, рдЕрдЧрд▓реЗ рдореЗрдВ рд╣рдо рддреБрд░рдВрдд 9 рдЪрдВрдХреНрд╕ рдЦреАрдВрдЪреЗрдВрдЧреЗ рдФрд░ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░реЗрдВрдЧреЗ рджреБрдирд┐рдпрд╛ рдХреЗ рд▓рд┐рдПред рдпрд╣рд╛рдВ рд▓реЗрдЦ рд╕реЗ рд╕рднреА рдХреЛрдб рдФрд░ рд╕рдВрд╕рд╛рдзрди рджреЗрдЦреЗрдВ ред