Javascript 使用p2旋转约束连接2个移相器精灵,但不施加力
所以我想用p2.js的旋转约束连接精灵。我当前的实现在创建约束后立即对精灵应用强制。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
如何避免这种行为?
如果无法避免,是否有其他方法将两个精灵水平连接?
编辑:
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:
在查看锁约束之后,我意识到这就是我要寻找的。但是,即使是锁定约束也会使树崩溃。我不能真正理解您的问题,但您是否尝试过锁定约束?可以给我们一些代码,甚至代码笔的例子,这样我们可以更好地帮助你 我无法真正理解您的问题,但您是否尝试过或甚至尝试过约束?可以给我们一些代码,甚至代码笔的例子,这样我们可以更好地帮助你 你能再看一次吗?我真的不知道,因为我对约束没什么经验,但也许你必须用弹簧来抵消初始力?检查(汽车示例)是否有帮助,或者其他人是否可以给您提供帮助