just2d - рдПрдХ "рд╕рдВрдкреВрд░реНрдг" рдЧреЗрдо рдЗрдВрдЬрди рдмрдирд╛рдПрдВред рдЪрд░рдг 1

рд╕реБрдкреНрд░рднрд╛рдд, Habrред
рдЕрд╡рдХрд╛рд╢ рдХреЗ рд╕рдордп, рдореИрдВ рдПрдХ рдирдП 2d рдЧреЗрдо рдЗрдВрдЬрди рдХреЗ рд╡рд┐рдХрд╛рд╕ рд╕реЗ рдкреНрд░реЗрд░рд┐рдд рдерд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдХ рдЕрдиреВрдареА рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рдеред рдореИрдВ рд╡рд┐рднрд┐рдиреНрди рд╕реНрддрд░реЛрдВ рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
рдЗрд╕реЗ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдП?
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо "рдЖрджрд░реНрд╢" рдЗрдВрдЬрди рдкрд░ 2-3 рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЦреЗрд▓ рд▓рд┐рдЦреЗрдВрдЧреЗ, рдпрд╛рдиреА рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрд╡рдпрдВ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рдЗрдВрдЬрди рдЙрд╕рдХреЗ рдХреЛрдб рдХреЗ рддрд╣рдд рд▓рд┐рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред



рдкрд╣рд▓рд╛ рдЧреЗрдо рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдорд░ рд╣реЛрдЧрд╛, рдЬрд┐рд╕реЗ рдЯреЗрд╕реНрдЯ рдирд╛рдо рдЯреЗрд░рд░рд┐рд╕реНрдЯ рд╡рд┐рди рдкреНрд░рд╛рдкреНрдд рд╣реБрдЖред
рд╡рд┐рд╡рд░рдг:
рднреАрдбрд╝ рдХреЛ рдорд╛рд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдиреЛрдВ рдХреЗ рдЖрд╕рдкрд╛рд╕ рднрд╛рдЧреЛ, рдмрд┐рдЫрд╛рдиреЗ рдФрд░ рдмрдо рд╡рд┐рд╕реНрдлреЛрдЯред


рджреВрд╕рд░рд╛ рдЧреЗрдо рдореИрдЪ 3 рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ


рдореИрдВ рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрджрд░реНрд╢ рдХреЛрдб рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ

рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкреНрд▓реЗрдпрд░ рдХреЗ рд▓рд┐рдП "рдЖрджрд░реНрд╢" рдХреЛрдб рдХреЗ рдкрд╣рд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред

start.js:
window.onload = init function init(){ //      Engine.setResurs({ 'block' : 'resurs/sprite/block.jpg', 'bomb' : 'resurs/sprite/bombs.png', 'cop' : 'resurs/sprite/cops.png', 'mob' : 'resurs/sprite/mobs.png', 'player' : 'resurs/sprite/player.png', 'mask' : 'resurs/sprite/mask.png', '_palm' : 'resurs/sprite/_palm.png', '_lavk' : 'resurs/sprite/_lavk.png', 'fire' : 'resurs/sprite/fires.png' }) /*     width -  () canvas height -  () canvas separator - id html  canvas size -    (        zoom) */ Engine.init({ width : 800, height : 512, separator : 'game_canvas', size : 32, }) /*   ""     (1-0 :   0 - , 1 - ) */ var map = new Array( new Array(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1), new Array(1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1), new Array(1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1), new Array(1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1), new Array(1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1), new Array(1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1), new Array(1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1), new Array(1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1), new Array(1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1), new Array(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1) ) /*  : Engine.Task.AddScene('map') -     map     // GameObject -    ,    //  GameObject  box,   Vec2    1 var block = new GameObject('box', new Vec2(x, y), 1, 1) //   block.gravitati = false; //    ,    scene.ObjectAdd(false, block) */ var scene = new SceneControl('scene1', map[0].length, map.length) for(var y = 0; y < map.length; y++){ for(var x = 0; x < map[0].length; x++){ var sprite = new SpriteControl('block', new Vec2(x, y), Setting.set('size'), Setting.set('size') var block = new GameObject('box', new Vec2(x, y), 1, 1) block.sprite = sprite; block.gravitati = false; scene.ObjectAdd(false, block) } } /*     Player   Vec2     */ var player = new PlayerObject(new Vec2(5, 5)) scene.ObjectAdd('player', player) Engine.Task.AddScene('scene1', scene) /*    scene1*/ Engine.Task.PlayScene('scene1') //   Engine.Play(); } 


рдЦреИрд░, рдЦрд┐рд▓рд╛рдбрд╝реА .js рдХреЛрдб
 function PlayerObject(vec2){ // parrent -   this.parrent = new GameObject('box', vec2, 1, 1 ) //  events  parrent this.eventKeyUp = function(){ //   this.parrent.vec2 = this.parrent.vec2.summ(new Vec2(-2, 0)) } this.eventKeyLeft = function(){ //  this.parrent.vec2 = this.parrent.vec2.summ(new Vec2(0, -1)) } this.eventKeyRight = function(){ //  this.parrent.vec2 = this.parrent.vec2.summ(new Vec2(0, 1)) } this.eventKeyE = function(){ //  E //     var scene = Engine.Task.returnScene('map') // Bomb -          var bomb = new Bomb(new Vec2(this.parrent.vec2.x, this.parrent.vec2.y)) scene.ObjectAdd(false, bomb) } this.eventKeySpace = function(){ //  // bomb Detonation } this.collision = function(){ //   //    "" if(this.collisionFlagBottom){ //     this.parrent.vec2.y = 0 //    } } } 


рдЯреЗрдХ рдореИрдВ рдЖрдкрдХреЗ "рдЖрджрд░реНрд╢" рдЦреЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг рджреЗрдЦрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рдЖрдк рдХреИрд╕реЗ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдЫрджреНрдо рдЖрджрд░реНрд╢ рдХреЛрдб рдХрд╛ рдкрд╣рд▓рд╛ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ)
рдореИрдВ рдЖрдкрдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ, рдиреЛрдЯреНрд╕ рдФрд░ рд╕реБрдЭрд╛рд╡реЛрдВ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рдЕрдЧрд▓реЗ рдУрдХреЗ рдкрд░:

github github.com/DrNemo/just2d рдкрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛрдб
рдЬрдм рддрдХ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдХреЛрдб рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╡рд┐рдХрд╕рд┐рдд рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддрдм рддрдХ рдореИрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреЛрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ред рдЖрдк рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ рдЕрднреА рдХреЗ рд▓рд┐рдП just2d.v.0.0.1 рд╕реНрдХреЗрдЪ рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ)
рд╡рд┐рдЪрд╛рд░ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХрд▓ рд░рд╛рдд рджрд┐рдорд╛рдЧ рдореЗрдВ рдЖрдпрд╛, рдЬреЛрд░ рд╕реЗ рдордд рдорд╛рд░реЛ)

UP1:
рдореЗрд░реА рдпреЛрдЬрдирд╛ рд╕рд░рд▓ рд╕реЗ рдЬрдЯрд┐рд▓ рддрдХ рдЬрд╛рдиреЗ рдХреА рд╣реИ, рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рд╕рдВрд╕реНрдХрд░рдг рддрдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдФрд░ рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреА

рдиреНрдпреВрдирддрдо рдШреЛрд╖рд┐рдд:
рджреГрд╢реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ - рдЦрд┐рдбрд╝рдХреА рд╕реЗ рдмрд╛рд╣рд░ рдХрдЯреМрддреА, рдЖрдк рдЕрдкрдиреЗ рдЖрдХрд╛рд░ рдФрд░ рдмрджрд▓рд╛рд╡ рджреЛрдиреЛрдВ рдХреЛ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

рджреГрд╢реНрдп рд╡рд╕реНрддреБрдПрдВ - рджреГрд╢реНрдп рдХреЗ рдмрдЪреНрдЪреЗ, рдпреЗ рдЦреЗрд▓ рд╡рд╕реНрддреБрдПрдВ рд╣реИрдВ рдЬреЛ рд╕реНрд╡рдпрдВ, рдкрд░реЗрдВрдЯ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдордирдорд╛рдиреА рд╣реЛ рд╕рдХрддреА рд╣реИрдВ
рдШрдЯрдирд╛ рд╕рдВрдЪрд╛рд▓рдХреЛрдВ рдХреЗ рдкреБрдирд░реНрдореВрд▓реНрдпрд╛рдВрдХрди рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛

рдШрдЯрдирд╛рдУрдВ:
рдХрд╛рд░реНрдп рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░
eventClick, eventDblClick, eventHover, eventKeyX - рд╕реНрдкрд╖реНрдЯ
EventCollision - рдПрдХ рд╣реА рдореБрдЦреМрдЯрд╛ рдХреА рдПрдХ рд╡рд╕реНрддреБ рдХреЗ рд╕рд╛рде рдЯрдХрд░рд╛рд╡

collisionFlagBottom, collisionFlagLeft - рдЖрджрд┐ред рд╕рд╛рдЗрдб рдЯрдХреНрдХрд░ рдЭрдВрдбреЗ

рд╕рд░рд▓ рднреМрддрд┐рдХреА
рдпрджрд┐ рдЕрдХреНрд╖рдо рд╣реИ рддреЛ gravitati = рдирдпрд╛ Vec2 (1, 0) рдпрд╛ рдЧрд▓рдд рд╣реИ

рдпрджрд┐ рдЖрдк рдИрд╡реЗрдВрдЯ рдкреБрди: рдЕрд╕рд╛рдЗрди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдИрд╡реЗрдВрдЯ рдЯреНрд░рд┐рдЧрд░ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ

рдЧреБрдг рднреА
рд╕рдХреНрд╖рдо, рджреГрд╢реНрдпрдорд╛рди

UP2:
рд╡рд┐рд╖рдп рдХреЛ рдЕрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЕрдкрдиреЗ рдмреНрд▓реЙрдЧ рд╢реИрд▓реА рдореЗрдВ рдЬрд╛рд░реА рд░рдЦреВрдВрдЧрд╛ 4web.ru/category/just2d

Source: https://habr.com/ru/post/In163581/


All Articles