【问题标题】:matterJS rendering to canvasmatterJS 渲染到画布
【发布时间】:2016-01-24 20:35:03
【问题描述】:

我正在尝试使用 matterJS 并将其渲染到我的布局中的特定画布,但我无法管理它。

这是JS:

window.addEventListener("load",init);
    function init(){

    var canvas = document.getElementById('matterJS');
    var width = 100,
        height = 100;

    canvas.width = width;
    canvas.height = height; 
        // Matter.js - http://brm.io/matter-js/

        // Matter module aliases
        var Engine = Matter.Engine,
            World = Matter.World,
            Body = Matter.Body,
            Composites = Matter.Composites,
            MouseConstraint = Matter.MouseConstraint;

        // create a Matter.js engine
        var engine = Engine.create({
          render: {
            element: document.body,
            canvas: canvas,
            options: {
              width: 100,
              height: 100,                  
              showAngleIndicator: true,
              showVelocity: true,
              wireframes: false
            }
          }
        });

        // add a mouse controlled constraint
        var mouseConstraint = MouseConstraint.create(engine);
        World.add(engine.world, mouseConstraint);

        // add a Newton's Cradle (using the Composites factory method!)
        var cradle = Composites.newtonsCradle(280, 150, 5, 30, 200);
        World.add(engine.world, cradle);

        // offset the first body in the cradle so it will swing
        Body.translate(cradle.bodies[0], { x: -180, y: -100 });

        // run the engine
        Engine.run(engine);
   }

在我的 html 中我这样做:

<canvas class="matterJS"></canvas>

我没有收到任何错误,但也没有呈现任何内容。我认为这应该可以。但为什么没有呢?

我只能在创建这样的引擎时渲染结果:

var engine = Engine.create(document.getElementById('matterJS'),{
                options: {
                  width: 100,
                  height: 100,                  
                  showAngleIndicator: true,
                  showVelocity: true,
                  wireframes: false
              }
            });

【问题讨论】:

  • 您的&lt;canvas&gt; 上有class="matterJS",但您用来检索它的调用是document.getElementById("matterJS")。你的意思可能是&lt;canvas id="matterJS"&gt;。通过确定 getElementById 返回的值是否是对象而不是 null 来调试它。

标签: javascript html canvas game-physics matter.js


【解决方案1】:

现在是这样解决的:

var canvas = document.getElementById('matterJS');
var width = 800,
    height = 800;

canvas.width = width;
canvas.height = height; 
    // Matter.js - http://brm.io/matter-js/

    // Matter module aliases
    var Engine = Matter.Engine,
        World = Matter.World,
        Body = Matter.Body,
        Composites = Matter.Composites,
        MouseConstraint = Matter.MouseConstraint;

    // create a Matter.js engine
    var engine = Engine.create(canvas, {
        options: {
          width: 1000,
          height: 1000,                 
          showAngleIndicator: true,
          showVelocity: true,
          wireframes: false
      }
    });

【讨论】:

  • 我无法让它工作。控制台显示:Matter.js: – "Engine.create: engine.render is deprecated (see docs)"
  • 不需要像这样动态生成画布。由于画布上缺少 id,您的调用失败,但除此之外,使用 document.getElementById(以及该系列函数)查找要传递给 MJS 的画布节点是完全可以的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-15
  • 1970-01-01
  • 2016-02-03
  • 1970-01-01
  • 2012-10-06
  • 2013-02-18
  • 1970-01-01
相关资源
最近更新 更多