Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 倾斜或倾斜时如何碰撞固定装置?_Iphone_Objective C_Cocoa Touch_Cocos2d Iphone_Box2d - Fatal编程技术网

Iphone 倾斜或倾斜时如何碰撞固定装置?

Iphone 倾斜或倾斜时如何碰撞固定装置?,iphone,objective-c,cocoa-touch,cocos2d-iphone,box2d,Iphone,Objective C,Cocoa Touch,Cocos2d Iphone,Box2d,我想碰撞vall和block,但在我命令两行代码时无法碰撞ball和block,但如果我取消注释两行代码,则块将显示水平而不是倾斜或类似坡度 请检查我的coe: for(int i = 0; i < 4; i++) { static int padding=20; self.touchEnabled = YES; // Create block and add it to the layer CCSprit

我想碰撞vall和block,但在我命令两行代码时无法碰撞ball和block,但如果我取消注释两行代码,则块将显示水平而不是倾斜或类似坡度

请检查我的coe:

    for(int i = 0; i < 4; i++) {



        static int padding=20;


        self.touchEnabled = YES;

        // Create block and add it to the layer
        CCSprite *block = [CCSprite spriteWithFile:@"block.png"];
        int xOffset = padding+block.contentSize.width/2 +  ((block.contentSize.width+padding)*i);
        block.position = ccp(xOffset, 250);
        block.tag = 2;
        [self addChild:block];

        // Create block body
        b2BodyDef blockBodyDef;
        blockBodyDef.type = b2_dynamicBody;   //b2_dynamicBody  ,b2_staticBody
        blockBodyDef.position.Set(xOffset/PTM_RATIO, 250/PTM_RATIO);
        blockBodyDef.userData = block;
        b2Body *blockBody = _world->CreateBody(&blockBodyDef);



        // Create block shape

任何想法或建议都非常受欢迎。

我不确定您的确切问题是什么,但我确实发现您的代码存在一些问题:

  • 您未正确设置主体的角度。你需要用弧度来做,而不是度。您需要在body变换上设置它:

    //我不相信这行得通。。。 //blockBodyDef.angle=CC_度到_弧度(45)

    //float32 angle2=blockBody->GetAngle(); 块体->CreateFixture(&blockShapeDef); //我修改过的线路 块体->设置变换(块体->GetPosition(),CC_度到_弧度(40))

  • 我使用了您的SetAsBox(…)方法,但考虑了精灵的比例因子:

    block.scale=0.25f;//我添加这个用于测试

    b2PolygonShape块状; blockShape.SetAsBox(block.scale*block.contentSize.width/PTM_RATIO/2, 块。比例*块。内容大小。高度/PTM_比率/2)

  • 当我做这一切的时候,我有四个盒子开始在屏幕中间(旋转40度),然后落到地上滚动。这就是你想做的吗

         //   b2PolygonShape blockShape;
        //    blockShape.SetAsBox(block.contentSize.width/PTM_RATIO/2,      block.contentSize.height/PTM_RATIO/2);
    
    
    
    
          //////////////////////////////  If I comment the these lines and uncomment above two line the block will show horizontally and ball can hit the block. But I want this code to show my block slope like. This is must. I want block will show slope and ball can hit the block.
    
            b2PolygonShape blockShape;
            int num = 3;
            b2Vec2 verts[] = {
                b2Vec2(27.5f / PTM_RATIO, 296.6f / PTM_RATIO),
                b2Vec2(14.3f / PTM_RATIO, 127.2f / PTM_RATIO),
                b2Vec2(187.0f / PTM_RATIO, 288.4f / PTM_RATIO),
                b2Vec2(400.0f / PTM_RATIO, 288.4f / PTM_RATIO)
            };
            blockShape.Set(verts, num);
        ///////////////////////////////////////////////////////////////////
    
    
    
    
    
    
    
            // Create shape definition and add to body
            b2FixtureDef blockShapeDef;
            blockShapeDef.shape = &blockShape;
            blockShapeDef.density = 10.0;
            blockShapeDef.friction = 0.0;
            blockShapeDef.restitution = 0.1f;
            blockBodyDef.angle = 45/PTM_RATIO;
             //blockShapeDef.angle = angle * 4.1;
            //blockShapeDef->angle = angle * 0.0174533f;
            //blockBody->SetTransform(b2Vec2(2, 45));
            //blockBodyDef->angle = Math.PI / 180 * 30;//30°
            //float32 angle2 = blockBody->GetAngle();
            blockBody->CreateFixture(&blockShapeDef);
    
    
    
    
    
    
    
    
    
        }