在不施加力的情况下,使用p2旋转约束连接2个相位器精灵
Connect 2 phaser sprites using p2 revolute constraints without apply force
所以我有一些精灵,我想使用p2.js的revolute约束来连接它们。我当前的实现在创建约束后立即对精灵应用力
如何避免这种行为
如果无法避免,是否有其他方法将两个精灵水平连接
编辑:
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);
}
}
我删掉了不太重要的代码,这样就不会太多了(已经是了)
基本上我所做的是:我创建一棵树,并使用旋转约束连接零件,使它们在现实世界中表现得像一棵树(例如在风中)
然后我创建了一个礼物,它基本上是一个精灵,应该水平连接到树的顶部。因此,我使用2个旋转约束,一个用于精灵之间的最顶部点,另一个用于最底部点。(我知道这是一种肮脏的代码)
在我创建了这些约束并且当前连接到树的顶部之后,树开始摇晃和折叠(就像它应该的那样)。但我不希望这种行为
也许锁定约束是我想要的,我必须对此进行研究
编辑2:
在查看了锁定约束之后,我意识到这就是我想要的。但即使是锁定约束也会使树崩溃。
我真的不能理解你的问题,但你尝试过Prismatic甚至Lock Constraint吗?可以给我们一些代码,甚至代码笔的例子,这样我们可以更好地帮助你吗?
相关文章:
- Node.js如何使用更少的线程来处理多个连接
- Socket.IO和AngularJS创建多个连接,如何停止
- 如何在同一个网页上创建两个连接列表
- 如何存储多个连接的路点
- 防止与我的 Web 应用程序建立多个连接
- Socket.io:第一个客户端在第二个连接时断开连接
- 多个连接/从属滑块与 Dojo
- 如何防止与页面重定向 socket.io 多个连接
- 制作两个连接的选择字段非常丑陋,我做错了什么
- 给定两个连接的可排序 JQuery 列表,我怎么知道元素被放在哪个容器上
- JSP端点多个连接
- 具有节点mongodb本机的多个连接
- node.js中的多个连接
- Javascript:每个客户端有两个连接
- 超过20个连接的NodeJS队列系统
- 用于多个连接的DRY解决方案
- 如何在两个连接之间同步数据
- RethinkDB和Node.js/Express -为并行查询打开多个连接
- Actionscript p2p -聊天如何创建多个连接和发送消息到所有/任何他们
- 生成从Coffeescript编译的多个连接的javascript文件的源映射