lufy's legend

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 8949|回复: 2
打印 上一主题 下一主题

Box2D的滑轮关节(setPulleyJoint)参数(Anchor)的疑问

[复制链接]

1

主题

0

好友

13

积分

士兵

Rank: 1

跳转到指定楼层
楼主
发表于 2016-10-11 12:54:13 |只看该作者 |倒序浏览
在HTML5 canvas游戏开发实战这本书里面,在使用Box2D和lufylegend来添加各种关节的章节(9.5.3)中,里面的滑轮关节的方法为setPulleyJoint ( b2BodyDefA  b2BodyDefB  anchorA  anchorB  ratio ) ,其中的anchorA的参数是这么解释的,“表示物体A相关的控制参数数组,这个数组的内容是:[x,y,length],使用setPulleyJoint建立滑轮关节的时候,会自动以物体本身的中心作为描点,anchorA数组的前两个元素,决定了关节被建立时物体相对于这个描点的位置,anchorA数组的最后一个元素,决定了左侧绳子的长度”。
111.jpg
我有疑问的是最后这个length参数,书配套demo提供的方法为:LGlobal.box2d.setPulleyJoint(box01.box2dBody, box02.box2dBody,[0,50,300],[0,100,300],1.0)。按照我的理解,修改[0,50,300]最后的300为1000,那么左侧绳子的长度就应该会变得更长一点,或者说,我用鼠标能拉动左侧物体的距离会更长一点,但实际效果是没有变化。然后我找了相关的源代码来看,看不太懂……不过大概看出来如果我想让左侧绳子长度发生变化,并不只是修改这里的300的值,而是还需要修改anchorA数组的锚点的坐标配合。所以想问问这到底是什么个关系?
比如我想就现在的demo,单纯的想把左侧绳子变长一点,其他坐标值什么都不变,应该怎么修改参数?

我把这两个球以及滑轮关节的代码贴出来,以免还要麻烦你去翻书看章节代码:
        box01 = new LSprite();
        box01.x = 200;
        box01.y = 100;
        backLayer.addChild(box01);
        box01.addBodyCircle(20,0,0,1,1,0.5,0.6);
        box01.setBodyMouseJoint(true);
       
        box02 = new LSprite();
        box02.x = 300;
        box02.y = 100;
        backLayer.addChild(box02);
        box02.addBodyCircle(20,0,0,1,1,0.4,0.2);
        box02.setBodyMouseJoint(true);
       
        LGlobal.box2d.setPulleyJoint(box01.box2dBody, box02.box2dBody,[0,50,300],[0,100,300],1.0);


回复

使用道具 举报

37

主题

8

好友

9322

积分

诸侯王

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

沙发
发表于 2016-10-11 15:08:35 |只看该作者
首先,两个球box01和box02决定了两者之间的绳子的长短,anchorA的前两个元素是相对于box01这个描点的位置,最后一个元素的解释应该说是绳子的可拉伸的最大长度才合适,不好意思,语文不过关。
而无论绳子的长短是多少,最终都会根据两个物体的质量自己去平衡的
所以,你想把绳子的长短改变的话,就需要把两个物体的距离变大,然后再调整anchorA里的参数,设定关节的支点
setPulleyJoint其实只是引擎对box2d的一个接口,只是根据设定的这几个参数来调用一下box2d的函数而已,并不一定适合每一个应用或游戏,如果做一些复杂的应用的时候,可能这个接口并不能满足一些复杂的要求,这就需要对box2d有相对充足的认识,然后自己创建和修改接口了,lufylegend调用box2d的所有接口都在下面的类中,如果想深入了解的话,可以阅读一下这个类的代码,当然要想更深入的话,就得详细研究一下box2d这个引擎的使用方法了
https://github.com/lufylegend/lu ... lib/LBox2d-0.4.0.js
不回答与技术和引擎不相关的问题
回复

使用道具 举报

1

主题

0

好友

13

积分

士兵

Rank: 1

板凳
发表于 2016-10-12 11:19:54 |只看该作者
本帖最后由 limars 于 2016-10-12 11:27 编辑

谢谢lufy大大的解释,明白了,我如果想单纯的把绳子变长,那就修改两个box的x和y,把间距拉大,然后再用锚点计算坐标让支点的坐标不变,就可以了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

防止垃圾广告,请填写任意字符

Archiver|lufy's legend

GMT+8, 2024-5-29 20:02 , Processed in 0.050938 second(s), 23 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部