Rozdíly
Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
Následující verze | Předchozí verze | ||
krouzek:arcade_volleyball [2021/06/23 14:19] – vytvořeno admin | krouzek:arcade_volleyball [2023/11/15 20:54] (aktuální) – upraveno mimo DokuWiki 127.0.0.1 | ||
---|---|---|---|
Řádek 4: | Řádek 4: | ||
* {{ : | * {{ : | ||
+ | ===== Úkoly ===== | ||
+ | === 1) Správně napojit ovládání druhého hráče. === | ||
+ | Proměnné '' | ||
+ | Postup je tedy zkopírovat to, jak je řešena reakce na tyto proměnné hráče A (úplně na konci kódu) a adaptovat aby se to týkalo hráče B. | ||
+ | |||
+ | === 2) Klávesa nahoru výskok, ne let === | ||
+ | Pokud se nemám od čeho odrazit, neměl bych vyskočit. Jedno z možných řešení je v reakci na '' | ||
+ | |||
+ | === 3) Vytvořit strop nebo zvětšit stěny === | ||
+ | Protože by míč mohl vyletět pryč :) | ||
+ | |||
+ | === 4) Zlepšit fyziku === | ||
+ | Experimentujeme s hodnotami '' | ||
+ | < | ||
+ | var ball = Bodies.circle(400, | ||
+ | Composite.add(engine.world, | ||
+ | Matter.Body.setDensity(ball, | ||
+ | ball.restitution = 0.5 | ||
+ | </ | ||
+ | |||
+ | |||
+ | === 5) Detekce kolize === | ||
+ | |||
+ | |||
+ | |||
+ | ----- | ||
+ | Kód s 1-4: | ||
+ | |||
+ | <code html> | ||
+ | < | ||
+ | <html lang=" | ||
+ | |||
+ | < | ||
+ | <meta charset=" | ||
+ | < | ||
+ | |||
+ | < | ||
+ | |||
+ | </ | ||
+ | |||
+ | <script src=" | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | |||
+ | < | ||
+ | /* < | ||
+ | |||
+ | // z https:// | ||
+ | // (modifikovano) | ||
+ | |||
+ | // module aliases | ||
+ | var Engine = Matter.Engine, | ||
+ | Render = Matter.Render, | ||
+ | Runner = Matter.Runner, | ||
+ | Bodies = Matter.Bodies, | ||
+ | Composite = Matter.Composite; | ||
+ | |||
+ | // create an engine | ||
+ | var engine = Engine.create(); | ||
+ | |||
+ | // create a renderer | ||
+ | var render = Render.create({ | ||
+ | element: document.body, | ||
+ | engine: engine, | ||
+ | options: { | ||
+ | background: '# | ||
+ | wireframes: false | ||
+ | } | ||
+ | }); | ||
+ | |||
+ | // Dva hraci | ||
+ | var playerA = Bodies.circle(200, | ||
+ | var playerB = Bodies.circle(600, | ||
+ | Composite.add(engine.world, | ||
+ | |||
+ | // Zeme | ||
+ | var ground = Bodies.rectangle(400, | ||
+ | Composite.add(engine.world, | ||
+ | // Strop | ||
+ | var ceil = Bodies.rectangle(400, | ||
+ | Composite.add(engine.world, | ||
+ | |||
+ | // Zdi vlevo a vpravo | ||
+ | var wallA = Bodies.rectangle(0, | ||
+ | var wallB = Bodies.rectangle(800, | ||
+ | Composite.add(engine.world, | ||
+ | |||
+ | // Sit | ||
+ | var net = Bodies.rectangle(400, | ||
+ | Composite.add(engine.world, | ||
+ | |||
+ | |||
+ | var ball = Bodies.circle(400, | ||
+ | Matter.Body.setDensity(ball, | ||
+ | ball.restitution = 0.5 | ||
+ | Composite.add(engine.world, | ||
+ | |||
+ | // run the renderer | ||
+ | Render.run(render); | ||
+ | |||
+ | // create runner | ||
+ | var runner = Runner.create(); | ||
+ | |||
+ | // run the engine | ||
+ | Runner.run(runner, | ||
+ | |||
+ | /* Klavesy */ | ||
+ | stisknutoVlevoA = false | ||
+ | stisknutoVpravoA = false | ||
+ | stisknutoNahoruA = false | ||
+ | stisknutoVlevoB = false | ||
+ | stisknutoVpravoB = false | ||
+ | stisknutoNahoruB = false | ||
+ | |||
+ | document.onkeydown = function (event) { | ||
+ | if (event.keyCode == 65) { // A | ||
+ | stisknutoVlevoA = true | ||
+ | } else if (event.keyCode == 87) { // W | ||
+ | stisknutoNahoruA = true | ||
+ | } else if (event.keyCode == 68) { // D | ||
+ | stisknutoVpravoA = true | ||
+ | } else if (event.keyCode == 37) { // sipka vlevo | ||
+ | stisknutoVlevoB = true | ||
+ | |||
+ | } else if (event.keyCode == 39) { // sipka vpravo | ||
+ | stisknutoVpravoB = true | ||
+ | } else if (event.keyCode == 38) { // sipka nahoru | ||
+ | stisknutoNahoruB = true | ||
+ | } | ||
+ | } | ||
+ | |||
+ | document.onkeyup = function (event) { | ||
+ | if (event.keyCode == 65) { // A | ||
+ | stisknutoVlevoA = false | ||
+ | } else if (event.keyCode == 87) { // W | ||
+ | stisknutoNahoruA = false | ||
+ | } else if (event.keyCode == 68) { // D | ||
+ | stisknutoVpravoA = false | ||
+ | } else if (event.keyCode == 37) { // sipka vlevo | ||
+ | stisknutoVlevoB = false | ||
+ | |||
+ | } else if (event.keyCode == 39) { // sipka vpravo | ||
+ | stisknutoVpravoB = false | ||
+ | } else if (event.keyCode == 38) { // sipka nahoru | ||
+ | stisknutoNahoruB = false | ||
+ | } | ||
+ | } | ||
+ | |||
+ | setInterval(function () { | ||
+ | if (stisknutoVlevoA) { | ||
+ | Matter.Body.applyForce(playerA, | ||
+ | } | ||
+ | if (stisknutoVpravoA) { | ||
+ | Matter.Body.applyForce(playerA, | ||
+ | } | ||
+ | if (stisknutoNahoruA) { | ||
+ | if(playerA.position.y > 499){ | ||
+ | Matter.Body.applyForce(playerA, | ||
+ | } | ||
+ | } | ||
+ | if (stisknutoVlevoB) { | ||
+ | Matter.Body.applyForce(playerB, | ||
+ | } | ||
+ | if (stisknutoVpravoB) { | ||
+ | Matter.Body.applyForce(playerB, | ||
+ | } | ||
+ | if (stisknutoNahoruB) { | ||
+ | if(playerB.position.y > 499){ | ||
+ | Matter.Body.applyForce(playerB, | ||
+ | } | ||
+ | } | ||
+ | |||
+ | }, 30) | ||
+ | |||
+ | /* ]]> */ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | </ | ||
+ | </ | ||