gpt4 book ai didi

c++ - Body 对象在 Box2d 中直线抛出

转载 作者:行者123 更新时间:2023-11-28 06:44:10 26 4
gpt4 key购买 nike

我需要将我的 box2d 对象扔到屏幕外。

例如...兔子在丛林小径(道路长度约 500 米)上直线移动。在这两者之间,它获得了一些可以应用的力量,例如 Axe。所以兔子需要把那个物体向前扔到屏幕外。如果中途有任何可弹跳的物体(如墙和树),抛出的物体需要返回,否则它应该离开屏幕并隐藏。

在触摸事件中,我调用了下面的方法来创建主体,并且我使用了 setlinear velocity 来进行运动。如果有任何物体(如墙壁和树),则在中间。 如何反弹(逆行)?

[self createbody];


-(void) createbody
{
freeBodySprite = [CCSprite spriteWithFile:@"blocks.png"];//web_ani_6_1
//freeBodySprite.position = ccp(100, 300);
[self addChild:freeBodySprite z:2 tag:6];

CGPoint startPos = CGPointMake(100, 320/1.25);

b2BodyDef bodyDef;

bodyDef.type = b2_staticBody;
bodyDef.position = [self toMeters:startPos];
bodyDef.userData = freeBodySprite;

b2CircleShape shape;

float radiusInMeters = ((freeBodySprite.contentSize.width * freeBodySprite.scale/PTM_RATIO) * 0.5f);
shape.m_radius = radiusInMeters;

b2FixtureDef fixtureDef;
fixtureDef.shape = &shape;
fixtureDef.density = 0.07f;
fixtureDef.friction = 0.1f;
fixtureDef.restitution = 0.1f;
b2Fixture *stoneFixture;
circularObstacleBody = world->CreateBody(&bodyDef);
stoneFixture = circularObstacleBody->CreateFixture(&fixtureDef);
freeBody = circularObstacleBody;

}
-(b2Vec2) toMeters:(CGPoint)point
{
return b2Vec2(point.x / PTM_RATIO, point.y / PTM_RATIO);
}

我有点懵。如何实现上述要求?

我引用了这个链接:- Box2d object throwing smoother and on same velocity

最佳答案

首先,在您的代码中,您没有显示您的移动代码(您使用线速度的地方)

b2vec2 *move = (30,0);
cart->SetLinearVelocity(move);

上面的代码将在 x 轴上以 30 的速度移动你的 box2d body 。当任何物体出现在道路中间时。你需要用下面的方法处理那些

void LevelContactListener::BeginContact(b2Contact* contact)
void LevelContactListener::EndContact(b2Contact* contact)

你将从上面的方法中得到 Fixtures。基于处理碰撞。(即)你的 box2d body (玩家力量)和那些道路物体发生碰撞。将功率设置为反向(-速度)。

关于c++ - Body 对象在 Box2d 中直线抛出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25338921/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com