0

如何将相机移动到 matter.js 中的特定位置?

我希望相机跟随我的主角。

我试过这个教程:http ://brm.io/matter-js/demo/#views 但说实话,我不明白。

4

4 回答 4

4

我找到了制作方法:http ://codepen.io/vanuatu/pen/VeQMpp

我们需要控制渲染边界,如下所示:

//
hero = bubbleBall

// Follow Hero at X-axis
engine.render.bounds.min.x = centerX + hero.bounds.min.x
engine.render.bounds.max.x = centerX + hero.bounds.min.x + initialEngineBoundsMaxX

// Follow Hero at Y-axis
engine.render.bounds.min.y = centerY + hero.bounds.min.y
engine.render.bounds.max.y = centerY + hero.bounds.min.y + initialEngineBoundsMaxY

// Update Mouse
Mouse.setOffset(mouseConstraint.mouse, engine.render.bounds.min);

我希望这可以帮助某人

于 2016-01-28T14:30:06.040 回答
2

一种更简单的方法:

Render.lookAt(render, player, {
  x: 1080,
  y: 1920
});

x 和 y 是渲染边界的宽度和高度。

于 2019-03-17T04:02:51.293 回答
1

首先,让我们从这个简单的例子开始:




     // module aliases
        var Engine = Matter.Engine,
            Render = Matter.Render,
            World  = Matter.World,
            Runner = Matter.Runner,
            Bodies = Matter.Bodies;

        var engine = Engine.create();
        var runner = Runner.create();

        // create a renderer
        var render = Render.create({
            element: document.body,  
            engine: engine,
            runner: runner,
            options: {
                    width: 1280,
                    height: 720
                }
        });

        var vertices = [{ x :  50, y :   0},
                        { x :  63, y :  38},
                        { x : 100, y :  38},
                        { x :  69, y :  59},
                        { x :  82, y : 100},
                        { x :  50, y :  75},
                        { x :  18, y : 100},
                        { x :  31, y :  59},
                        { x :   0, y :  38},
                        { x :  37, y :  38} ];

        // add a star at center
        var star = Matter.Vertices.create(vertices);
        var starBody = Bodies.fromVertices(640, 360, star, {isStatic: true}, true);

        // add all of the bodies to the world
        World.add(engine.world, [ starBody]);

        Render.run(render); 
        Runner.run(runner, engine);

    

你应该在中心看到一个小星星,如果你想移动相机,你的渲染需要有边界,修改渲染实例如下:

<pre><code>

    var render = Render.create({
        element: document.body,  
        engine: engine,
        runner: runner,
        options: {
                  width: 1280,
                  height: 720,
                   <b>hasBounds : true</b>
                 }
    });

并使用Bounds模块别名:



    var Engine = Matter.Engine,
        Render = Matter.Render,
        World  = Matter.World,
        Runner = Matter.Runner,
        Bodies = Matter.Bodies,
        Bounds = Matter.Bounds;

现在你可以翻译你的渲染边界来移动你的相机:



    let translate = {x : -100, y : -100}
    Bounds.translate(render.bounds, translate);

它实际上是这样的:




    function moveMatterJSCamera(offsetX, offsetY) {
                render.bounds.min.x += offsetX;
                render.bounds.max.x += offsetX;
                render.bounds.min.y += offsetY;
                render.bounds.max.y += offsetY;
            }

于 2018-01-07T06:45:27.300 回答
1

我发现翻译一切也很有效。喜欢 transX=-player.position.x然后 Matter.Body.translate(body,{x:transX,y:0})用你所有的身体做,包括玩家

于 2020-07-15T17:19:18.200 回答