Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用p2旋转约束连接2个移相器精灵,但不施加力_Javascript_Html5 Canvas_Physics_Phaser Framework_P2 - Fatal编程技术网

Javascript 使用p2旋转约束连接2个移相器精灵,但不施加力

Javascript 使用p2旋转约束连接2个移相器精灵,但不施加力,javascript,html5-canvas,physics,phaser-framework,p2,Javascript,Html5 Canvas,Physics,Phaser Framework,P2,所以我想用p2.js的旋转约束连接精灵。我当前的实现在创建约束后立即对精灵应用强制。 如何避免这种行为? 如果无法避免,是否有其他方法将两个精灵水平连接?编辑: var Game = { preload: function() { game.load.image('tree00', './imgs/tree/tree-00.png'); game.load.image('tree01', './imgs/tree/tree-01.png'); game.load.ima

所以我想用p2.js的旋转约束连接精灵。我当前的实现在创建约束后立即对精灵应用强制。
如何避免这种行为?

如果无法避免,是否有其他方法将两个精灵水平连接?

编辑:

var Game = {

preload: function() {
    game.load.image('tree00', './imgs/tree/tree-00.png');
    game.load.image('tree01', './imgs/tree/tree-01.png');
    game.load.image('tree02', './imgs/tree/tree-02.png');
    game.load.image('tree03', './imgs/tree/tree-03.png');
    game.load.image('tree04', './imgs/tree/tree-04.png');
    game.load.image('tree05', './imgs/tree/tree-05.png');

    game.load.spritesheet('present', './imgs/dude.png', 32, 48);
},

create: function() {
    game.physics.startSystem(Phaser.Physics.P2JS);
    game.physics.p2.gravity.y = 300;
    game.physics.startSystem(Phaser.Physics.ARCADE);

    game.stage.backgroundColor = '#aaffee';

    treeCollsionGroup = game.physics.p2.createCollisionGroup();
    presentCollisionGroup = game.physics.p2.createCollisionGroup();

    this.createPresent(game.world.width * 0.21, game.world.height * 0.6);
    this.createTree(6, game.world.width * 0.2, game.world.height * 0.8);

    //presentCollisionGroup.collides(treeCollsionGroup);

    connection[0] = game.physics.p2.createRevoluteConstraint(treeParts[treeParts.length - 1], [(treeParts[treeParts.length - 1].width)/2, treeParts[treeParts.length - 1].height], present, [-present.width/2, treeParts[treeParts.length - 1].height], maxForce);
    connection[1] = game.physics.p2.createRevoluteConstraint(treeParts[treeParts.length - 1], [(treeParts[treeParts.length - 1].width)/2, 0], present, [-present.width/2, 0], maxForce);
}, 

createTree: function(length, xAnchor, yAnchor) {
    var lastSprite;

    for (var i = 0; i < length; i++) {          
        newSprite = game.add.sprite(xAnchor, yAnchor - i*100, 'tree0' + i);
        newSprite.scale.x = game.world.width/1920;
        newSprite.scale.y = game.world.width/1920;

        game.physics.p2.enable(newSprite, true);
        if (i != length-1) {
            newSprite.body.setRectangle(game.world.width * 0.10, newSprite.height * 0.15);
        } else {
            newSprite.body.setRectangle(newSprite.width * 0.8, newSprite.height * 0.8);
        }
        newSprite.body.setCollisionGroup(treeCollsionGroup);

        if(i === 0) {
            newSprite.body.static = true;
        }

        if (lastSprite) {
            switch(i) {
                case 1: constraint = game.physics.p2.createRevoluteConstraint(newSprite, [0, 0], lastSprite, [0, -lastSprite.height * 0.62], maxForce);
                        treeConstraints.push(constraint);
                        break;
                case 2: constraint = game.physics.p2.createRevoluteConstraint(newSprite, [0, 0], lastSprite, [0, -lastSprite.height * 0.285], maxForce);
                        treeConstraints.push(constraint);
                        break;
                case 3: constraint = game.physics.p2.createRevoluteConstraint(newSprite, [0, 0], lastSprite, [0, -lastSprite.height * 0.425], maxForce);
                        treeConstraints.push(constraint);
                        break;
                case 4: constraint = game.physics.p2.createRevoluteConstraint(newSprite, [0, 0], lastSprite, [0, -lastSprite.height * 0.4], maxForce);
                        treeConstraints.push(constraint);
                        break;
                case 5: constraint = game.physics.p2.createRevoluteConstraint(newSprite, [0, 0], lastSprite, [0, -lastSprite.height * 0.55], maxForce);
                        treeConstraints.push(constraint);
                        break;
            }
        }
        lastSprite = newSprite;
        treeParts.push(newSprite);
        newSprite.body.collides(treeCollsionGroup);
    }
},

createPresent: function(xAnchor, yAnchor) {
    present = game.add.sprite(game.world.width * 0.21, game.world.height * 0.6, 'present');
    game.physics.p2.enable(present, true);
    present.scale.x = game.world.width/1920;
    present.scale.y = game.world.width/1920;
    present.body.setRectangle(present.width, present.height);
    present.body.data.gravityScale = 0;
    present.body.setCollisionGroup(presentCollisionGroup);
}
}
var游戏={
预加载:函数(){
game.load.image('tree00','./imgs/tree/tree-00.png');
game.load.image('tree01','./imgs/tree/tree-01.png');
game.load.image('tree02','./imgs/tree/tree-02.png');
game.load.image('tree03','./imgs/tree/tree-03.png');
game.load.image('tree04','./imgs/tree/tree-04.png');
game.load.image('tree05','./imgs/tree/tree-05.png');
game.load.spritesheet('present','。/imgs/dude.png',32,48);
},
创建:函数(){
game.physics.startSystem(Phaser.physics.P2JS);
game.physics.p2.gravity.y=300;
游戏。物理。启动系统(相位器。物理。拱廊);
game.stage.backgroundColor='#aaffee';
TreeCollisionGroup=game.physics.p2.createCollisionGroup();
presentCollisionGroup=game.physics.p2.createCollisionGroup();
this.createPresent(game.world.width*0.21,game.world.height*0.6);
这个.createTree(6,game.world.width*0.2,game.world.height*0.8);
//presentCollisionGroup.Collisions(TreeCollisionGroup);
连接[0]=game.physics.p2.createRevolutionConstraint(treeParts[treeParts.length-1],(treeParts[treeParts.length-1].width)/2,treeParts[treeParts.length-1].height],present,[-present.width/2,treeParts[treeParts.length-1].height],maxForce);
连接[1]=game.physics.p2.createRevolutionConstraint(treeParts[treeParts.length-1],(treeParts[treeParts.length-1].width)/2,0],present,[-present.width/2,0],maxForce);
}, 
createTree:函数(长度、xAnchor、yAnchor){
雪碧;
对于(var i=0;i


我删去了不太重要的代码,这样就不会太多了(它已经是了)
基本上,我所做的是:创建一棵树,并使用旋转约束连接零件,使它们的行为像真实世界中的树(例如在风中)。
然后我创建了一个现在,它基本上是一个精灵,应该水平连接到树的顶部。因此,我使用2个旋转约束,一个用于精灵之间的最顶部点,另一个用于最底部点。(我知道这是一种肮脏的代码)

当我创建了这些约束条件,现在连接到树的顶部后,树开始摇晃和倒塌(就像它应该的那样)。但我不希望出现这种行为。
也许锁约束是我要寻找的,我必须对此进行研究。

编辑2:

在查看锁约束之后,我意识到这就是我要寻找的。但是,即使是锁定约束也会使树崩溃。

我不能真正理解您的问题,但您是否尝试过锁定约束?可以给我们一些代码,甚至代码笔的例子,这样我们可以更好地帮助你

我无法真正理解您的问题,但您是否尝试过或甚至尝试过约束?可以给我们一些代码,甚至代码笔的例子,这样我们可以更好地帮助你

你能再看一次吗?我真的不知道,因为我对约束没什么经验,但也许你必须用弹簧来抵消初始力?检查(汽车示例)是否有帮助,或者其他人是否可以给您提供帮助