Rozdíly
Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
Obě strany předchozí revize Předchozí verze Následující verze | Předchozí verze | ||
krouzek:arcade_volleyball [2021/06/23 14:39] – admin | krouzek:arcade_volleyball [2023/11/15 20:54] (aktuální) – upraveno mimo DokuWiki 127.0.0.1 | ||
---|---|---|---|
Řádek 9: | Řádek 9: | ||
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. | 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) Zlepšit fyziku === | + | === 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 '' | Experimentujeme s hodnotami '' | ||
< | < | ||
var ball = Bodies.circle(400, | var ball = Bodies.circle(400, | ||
Composite.add(engine.world, | Composite.add(engine.world, | ||
- | | + | |
- | ball.density | + | ball.restitution |
</ | </ | ||
- | === 3) 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 '' | ||
- | === 4) Detekce kolize === | + | === 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) | ||
+ | |||
+ | /* ]]> */ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | </ | ||
+ | </ | ||