2013-02-22 63 views
1

创建以下面的方式一个PhysicsWorld 1像素的细线的:人丁与AndEngine和Box2D的

this.mPhysicsWorld = new FixedStepPhysicsWorld(30, new Vector2(0, 0), false, 8, 1); 

我创建以下列方式的行:

final Line line = new Line(object.getX(), object.getY(),object.getX()+object.getWidth(), object.getY()+object.getHeight()); 
final FixtureDef lineFixtureDef = PhysicsFactory.createFixtureDef(0, 0, 1f); 
PhysicsFactory.createLineBody(this.mPhysicsWorld, line, lineFixtureDef); 
line.setVisible(true); 
mScene.attachChild(line); 

这应该允许用于单像素条上的碰撞,但不会产生所需的效果。栏下方至少有几个像素,左侧有几个像素,高度和右侧都很好。

我也有一个矩形测试这和我有同样的问题。

+1

嗨用户2080866,请问哪个物体与这条线发生碰撞?例如,如果你有一个带球体和旋转的球体精灵,你可能会发现如果球体的角落与线条相撞,你的球体精灵和线条之间可能会有一定的距离(人体的角落)。我还发现低SPS的碰撞可能是'twitchy'。你有没有尝试过这样说150?即,this.mPhysicsWorld =新FixedStepPhysicsWorld(150,... – Steven 2013-02-22 20:00:43

+0

他是一个玩家精灵已成立mPlayerBody \t \t mPlayerBody = PhysicsFactory.createBoxBody(this.mPhysicsWorld,mplayer的,BodyType.DynamicBody,playerFixtureDef); \t \t this.mPhysicsWorld .registerPhysicsConnector(新PhysicsConnector(mplayer的,mPlayerBody,真,假){ – user2080866 2013-02-23 13:27:01

+0

我尝试150,这是一样的。几个像素的差距 – user2080866 2013-02-23 13:36:40

回答

0

听起来像是你的意思是线呈现在错误的位置。您从Object的位置获取行位置。我的猜测是,你期待这行从“对象”的中心渲染,而是从对象的左上角渲染。这是AndEngine中的预期行为。如果你想从中心渲染,你需要计算对象的中心位置,而不是仅仅考虑X & Y.

相关的,你可能不应该用像素来思考,而是用场景坐标。我假定当你说“像素”时,你用它作为场景坐标的简写,但如果不是,请注意它们不是同一个东西。

+0

新线是从y开始的宽度和高度,或中心必须在功能新线? – user2080866 2013-02-23 13:33:08

+0

如果我把真正的“line.setVisible(true)”放在正确的位置上,但是有几个间隙像素或我的角色不能在底部和左边。 – user2080866 2013-02-23 13:54:13

0

如果你有这些问题,检查以下,

检查你的形象,它有在边缘接入阿尔法像素?

如果一个动画精灵多少差距在你的精灵表精灵列和行之间有没有? - 如果图像被“分割”,则可能会包含这些alpha间隙。

此外,如果您使用的箱体,什么是精灵本身?如果它是一个球形使用的圆形体,或者形状不规则,并且想要更精确的碰撞,请使用多边形体。

很高兴提供帮助。

+0

声音像alpha像素是问题(根据他的评论以上)。 – 2013-02-23 17:16:43