在box2d中让精灵以一定角度弹跳
Making sprite bounce in an angle in box2d
在我尝试制作的游戏中,我有一个球精灵,由于box2d而弹跳。下面是我当前的代码:
-(id)init
{
ball = [CCSprite spriteWithFile:@"ball.png"];
ball.position = ccp(150, winSize.height * 0.78);
[self addChild:ball];
ball.tag = 2;
b2BodyDef ballBodyDef;
ballBodyDef.type = b2_dynamicBody;
ballBodyDef.position.Set(150/PTM_RATIO, 450/PTM_RATIO);
ballBodyDef.userData = ball;
_body = _world->CreateBody(&ballBodyDef);
b2CircleShape circle;
circle.m_radius = 26.0/PTM_RATIO;
b2FixtureDef ballShapeDef;
ballShapeDef.shape = &circle;
ballShapeDef.density = 0.5f;
ballShapeDef.friction = 1.0f;
ballShapeDef.restitution = 1.0f;
_ballFixture = _body->CreateFixture(&ballShapeDef);
b2Vec2 force = b2Vec2(160, 375);
_body->ApplyLinearImpulse(force, ballBodyDef.position);}
- (void)update:(ccTime) dt {
if(_isPaused == FALSE)
{
_world->Step(dt, 10, 10);
for(b2Body *b = _world->GetBodyList(); b; b=b->GetNext()) {
if (b->GetUserData() != NULL) {
CCSprite *sprite = (CCSprite *)b->GetUserData();
if(sprite.tag == 2)
{
sprite.position = ccp(b->GetPosition().x * PTM_RATIO,
b->GetPosition().y * PTM_RATIO);
sprite.rotation = -1 * CC_RADIANS_TO_DEGREES(b->GetAngle());
}
}
}}
弹跳本身很好,我的问题是有些情况下,球会在直线上弹跳,可以这么说,垂直或水平连续,我试图避免。所以我的问题是,我如何让我的球精灵以一个角度而不是直线反弹,这样它就不会在同一个方向无限反弹了?
你可以"随机"或以相同的间隔对物体或世界施加微小的力或重力变化。
相关文章:
- OpenGL 着色器不绘制任何东西 - 糟糕的精灵类
- 从精灵表在 sfml 中为精灵制作动画
- Box2D World.GetBodyList() 返回 NULL,但 World 显然正在更新对象
- AABB 碰撞使实际精灵的大小翻倍
- 如何在精灵表上的两个不同部分之间来回切换,同时用户仍使用 SFML 持有密钥
- 使用 vcpkg 安装 box2d
- 我的精灵使用名为 ASGE 的C++框架卡在屏幕边缘
- 如何在Cmake中正确查找头路径,以便在我的项目中构建Box2D
- Box2D Contact Listener碰撞仅间歇性工作
- 如何为精灵编写复制构造函数
- 绘制精灵会导致分割错误
- 精灵动画查看器应该使用哪些Qt小部件
- Eclipse构建但不会启动精灵
- OpenGL 2D游戏只绘制第二个精灵纹理而不是第一个
- 打开 gl 精灵类不起作用
- 有没有办法在链接时设置精灵需要字段?
- 精灵没有动画
- 在box2d中为精灵创建b2body
- 在box2d中让精灵以一定角度弹跳
- 在box2d中为精灵设定恒定和递增的速度