//Throwing Object void HelloWorld::shootBoxfunc(const cocos2d::Vec3 &des) { //Vec3 linearVel = des -camera->getPosition3D(); //linearVel.normalize(); //linearVel *= 100.0f; Physics3DRigidBodyDes rbDes; rbDes.originalTransform.translate(car_cabine->getPosition3D()); rbDes.mass = 1.f; rbDes.shape = Physics3DShape::createSphere(0.25); auto sprite = PhysicsSprite3D::create("box.c3t", &rbDes); sprite->setTexture("Gun.png"); auto rigidBody = static_cast<Physics3DRigidBody*>(sprite->getPhysicsObj()); rigidBody->setLinearFactor(Vec3::ONE); rigidBody->setLinearVelocity(des*15); rigidBody->setAngularVelocity(Vec3::ZERO); rigidBody->setCcdMotionThreshold(0.5f); rigidBody->setCcdSweptSphereRadius(0.4f); sprite->setPosition3D(Vec3(car_cabine->getPosition3D().x, car_cabine->getPosition3D().y+4, car_cabine->getPosition3D().z)); sprite->setScale(0.5f); sprite->syncNodeToPhysics(); sprite->setSyncFlag(Physics3DComponent::PhysicsSyncFlag::PHYSICS_TO_NODE); sprite->setCameraMask((unsigned short)CameraFlag::USER2); this->addChild(sprite,1); }
void Physics3DTestDemo::shootBox( const cocos2d::Vec3 &des ) { Physics3DRigidBodyDes rbDes; Vec3 linearVel = des - _camera->getPosition3D(); linearVel.normalize(); linearVel *= 100.0f; rbDes.originalTransform.translate(_camera->getPosition3D()); rbDes.mass = 1.f; rbDes.shape = Physics3DShape::createBox(Vec3(0.5f, 0.5f, 0.5f)); auto sprite = PhysicsSprite3D::create("Sprite3DTest/box.c3t", &rbDes); sprite->setTexture("Images/Icon.png"); auto rigidBody = static_cast<Physics3DRigidBody*>(sprite->getPhysicsObj()); rigidBody->setLinearFactor(Vec3::ONE); rigidBody->setLinearVelocity(linearVel); rigidBody->setAngularVelocity(Vec3::ZERO); rigidBody->setCcdMotionThreshold(0.5f); rigidBody->setCcdSweptSphereRadius(0.4f); this->addChild(sprite); sprite->setPosition3D(_camera->getPosition3D()); sprite->setScale(0.5f); sprite->syncNodeToPhysics(); //optimize, only sync node to physics sprite->setSyncFlag(Physics3DComponent::PhysicsSyncFlag::PHYSICS_TO_NODE); //sync node to physics sprite->setCameraMask((unsigned short)CameraFlag::USER1); }
bool Physics3DKinematicDemo::init() { if (!Physics3DTestDemo::init()) return false; //create floor Physics3DRigidBodyDes rbDes; rbDes.mass = 0.0f; rbDes.shape = Physics3DShape::createBox(Vec3(60.0f, 1.0f, 60.0f)); auto floor = PhysicsSprite3D::create("Sprite3DTest/box.c3t", &rbDes); floor->setTexture("Sprite3DTest/plane.png"); floor->setScaleX(60); floor->setScaleZ(60); floor->setPosition3D(Vec3(0.f, -1.f, 0.f)); this->addChild(floor); floor->setCameraMask((unsigned short)CameraFlag::USER1); floor->syncNodeToPhysics(); //static object sync is not needed floor->setSyncFlag(Physics3DComponent::PhysicsSyncFlag::NONE); //create Kinematics for (unsigned int i = 0; i < 3; ++i) { rbDes.mass = 0.f; //kinematic objects. zero mass so that it can not be affected by other dynamic objects rbDes.shape = Physics3DShape::createBox(Vec3(2.0f, 2.0f, 2.0f)); auto sprite = PhysicsSprite3D::create("Sprite3DTest/box.c3t", &rbDes); sprite->setTexture("Images/CyanSquare.png"); sprite->setCameraMask((unsigned short)CameraFlag::USER1); auto rigidBody = static_cast<Physics3DRigidBody*>(sprite->getPhysicsObj()); rigidBody->setKinematic(true); this->addChild(sprite); sprite->setScale(2.0f); sprite->setPosition3D(Vec3(-15.0f, 0.0f, 15.0f - 15.0f * i)); auto moveby = MoveBy::create(2.0f + i, Vec3(30.0f, 0.0f, 0.0f)); sprite->runAction(RepeatForever::create(Sequence::create(moveby, moveby->reverse(), nullptr))); } //create Dynamic { //create several spheres rbDes.mass = 1.f; rbDes.shape = Physics3DShape::createSphere(0.5f); float start_x = START_POS_X - ARRAY_SIZE_X/2; float start_y = START_POS_Y + 5.0f; float start_z = START_POS_Z - ARRAY_SIZE_Z/2; for (int k=0;k<ARRAY_SIZE_Y;k++) { for (int i=0;i<ARRAY_SIZE_X;i++) { for(int j = 0;j<ARRAY_SIZE_Z;j++) { float x = 1.0*i + start_x; float y = 5.0+1.0*k + start_y; float z = 1.0*j + start_z; rbDes.originalTransform.setIdentity(); rbDes.originalTransform.translate(x, y, z); auto sprite = PhysicsSprite3D::create("Sprite3DTest/sphere.c3b", &rbDes); sprite->setTexture("Sprite3DTest/plane.png"); sprite->setCameraMask((unsigned short)CameraFlag::USER1); sprite->setScale(1.0f / sprite->getContentSize().width); this->addChild(sprite); sprite->setPosition3D(Vec3(x, y, z)); sprite->syncNodeToPhysics(); sprite->setSyncFlag(Physics3DComponent::PhysicsSyncFlag::PHYSICS_TO_NODE); } } } } physicsScene->setPhysics3DDebugCamera(_camera); return true; }