cocos3d динамически создает 3D box - PullRequest
1 голос
/ 28 июля 2011

Я новичок в cocos3d, но я знаю cocos2d. Я хочу динамически создавать 3D-коробки. так что я сделал внутри cc3layer

-(void) initializeControls {

    [self schedule:@selector(create_box:) interval:2 ];

}

-(void)create_box:(id)sender{

    [self unschedule:@selector(mov_cel:)];
    [[testWorld sharedcontescWorld] world_create_box];
}

и в классе cc3world -

static testWorld *_sharedcontescWorld=nil;

+(testWorld *)sharedcontescWorld{
    @synchronized([testWorld class]){
        if (!_sharedcontescWorld)
            [self alloc];
        return _sharedcontescWorld;
    }return nil;
}
+(id)alloc{
    @synchronized([testWorld class])    {
        _sharedcontescWorld = [super alloc];
        return _sharedcontescWorld;
    }return nil;
}

    -(void) world_create_box{

    int minx=-50;
    int maxx=50;
    float posx=(float)(minx+arc4random()%maxx);

    CC3MeshNode* aNode;
    aNode = [CC3BoxNode nodeWithName: @"Simple box"];
    CC3BoundingBox bBox;
    bBox.minimum = cc3v(-10.0, -10.0, -10.0);
    bBox.maximum = cc3v( 10.0,  10.0,  10.0);
    [aNode populateAsSolidBox: bBox];
    [aNode setLocation:cc3v(posx,0,0)];
    aNode.material = [CC3Material material];
    [self addChild:aNode];
    id move3d=[CC3MoveTo actionWithDuration:1 moveTo:cc3v(posx,0,100)];
    id remove=[CCCallFuncND actionWithTarget:self selector:@selector(removeObj:)];
    [aNode runAction:[CCSequence actions:move3d,remove,nil]];

}

но это не работает ...... кто-нибудь может мне помочь?

Ответы [ 3 ]

0 голосов
/ 23 августа 2011

Я не начал с cocos3d, но нашел этот код в stackoverflow, который работает

CC3BoundingBox bounds = makeBounds(9.5, 5.0, 4.0, 0, 0, 0);
CC3MeshNode *cube = [[CC3MeshNode alloc] init];
[cube populateAsSolidBox:bounds];
0 голосов
/ 26 октября 2014

Существует класс CC3BoxNode, который поможет вам сделать это. Например:

        CC3BoxNode      *box        = [CC3BoxNode nodeWithName:@"MyBox"];
        [box populateAsSolidBox:CC3BoxMake(-1, -1, -1, 1, 1, 1)];
        [self addChild:box];

Это создаст коробку 2x2x2 с начальной точкой в ​​ее абсолютном центре. Надеюсь, это поможет.

0 голосов
/ 22 августа 2011

У вас есть камера и свет?

Без информации о камере трудно сказать, но я думаю, что вы, возможно, либо не смотрите на куб (камера отсутствует или нацелена неправильно), либо куб слишком большой, и вы внутри него.

Попробуйте с камерой и подсветкой, а также с некоторыми более скромными размерами.

Вот пример кода, который работал для меня в шаблоне проекта cocos3d XCode:

        // Create the camera, place it back a bit, and add it to the world
        CC3Camera* cam = [CC3Camera nodeWithName: @"Camera"];
        cam.location = cc3v( 0.0, 0.0, 10.0 );
        [self addChild: cam];

        // Create a light, place it back and to the left at a specific
        // position (not just directional lighting), and add it to the world
        CC3Light* lamp = [CC3Light nodeWithName: @"Lamp"];
        lamp.location = cc3v( -2.0, 0.0, 0.0 );
        lamp.isDirectionalOnly = NO;
        [cam addChild: lamp];


        float maxx=5.0;
        float posx=CCRANDOM_MINUS1_1()*maxx;

        CC3BoxNode* aNode;
        aNode = [CC3BoxNode nodeWithName: @"Simple box"];
        CC3BoundingBox bBox;
        bBox.minimum = cc3v(-1.0, -1.0, -1.0);
        bBox.maximum = cc3v( 1.0,  1.0,  1.0);
        [aNode populateAsSolidBox: bBox];
        [aNode setLocation:cc3v(posx,0.0f,-5.0f)];
        aNode.material = [CC3Material material];
        [self addChild:aNode];
        id move3d=[CC3MoveTo actionWithDuration:1.0f moveTo:cc3v(posx*-1.0,0.0f,-5.0f)];
//      id remove=[CCCallFuncND actionWithTarget:self selector:@selector(removeChild:)];
        [aNode runAction:[CCSequence actions:move3d,/*remove,*/nil]];

Примечания:

  • В файле readme cocos3d есть инструкции по установке шаблонов проектов XCode, если вы этого еще не сделали.

  • Я заменил весь объектный код "Hello World" в шаблоне этим материалом (обратите внимание, что это та же камера и световой код / ​​комментарии); Вы можете оставить это, но у вас будет несколько слов перед вашей коробкой.

  • Для ясности изменен CC3MeshNode на CC3BoxNode, но полностью CC3MeshNode тоже работает.

  • Заменил arc4random () вспомогательной функцией cocos2d CCRANDOM_MINUS1_1 () просто для удобства чтения (и поделиться этим cocos2d gem).

  • Закомментировал CCFuncCallND, потому что у меня не было функции removeObj. Надеюсь, что вы делаете. ;)

Надеюсь, это поможет.

...