bool Coin::init(){ if(!Node::init()){ return false; } //缓存池 auto frameCache = SpriteFrameCache::getInstance(); frameCache->addSpriteFramesWithFile("parkour.plist","parkour.png"); auto sprite = Sprite::createWithSpriteFrameName("coin0.png"); //绑定 setSprite(sprite); //执行动作 getSprite()->runAction(createAnimate(frameCache)); //绑定刚体 initBody(); return true; }
//--- NGF events ---------------------------------------------------------------- OneWay::OneWay(Ogre::Vector3 pos, Ogre::Quaternion rot, NGF::ID id, NGF::PropertyList properties, Ogre::String name) : NGF::GameObject(pos, rot, id , properties, name) { addFlag("OneWay"); //Python init event. NGF_PY_CALL_EVENT(init); //Create the Ogre stuff. if (mProperties.getValue("brushMeshFile", 0, "n") == "n") { mEntity = GlbVar.ogreSmgr->createEntity(mOgreName, "OneWay.mesh"); BtOgre::StaticMeshToShapeConverter converter(mEntity); mShape = converter.createBox(); } else { mEntity = createBrushEntity(); BtOgre::StaticMeshToShapeConverter converter(mEntity); mShape = converter.createTrimesh(); mShape->setMargin(0); } mEntity->setMaterialName("Objects/OneWay"); mNode = GlbVar.ogreSmgr->getRootSceneNode()->createChildSceneNode(mOgreName, pos, rot); mNode->attachObject(mEntity); //Create the Physics stuff. BtOgre::RigidBodyState *state = new BtOgre::RigidBodyState(mNode); mBody = new btRigidBody(0, state, mShape, btVector3(0,0,0)); initBody( DimensionManager::NO_DIM_CHECK | DimensionManager::NO_CRATE_CHECK | DimensionManager::NO_MOVING_CHECK | DimensionManager::NO_BULLET_HIT ); mBody->setCollisionFlags(mBody->getCollisionFlags() | btCollisionObject::CF_NO_CONTACT_RESPONSE); }
bool Runner::init(){ //加载图片到缓存池 auto frameCache = SpriteFrameCache::getInstance(); frameCache->addSpriteFramesWithFile("parkour.plist","parkour.png"); m_runner = Sprite::createWithSpriteFrameName("runner0.png"); run_jumpSize = m_runner->getContentSize(); crouchSize = Sprite::createWithSpriteFrameName("runnerCrouch0.png")->getContentSize(); this->addChild(m_runner); initActionSet(frameCache);//初始化动作集合 //m_state = running; initBody(); this->scheduleUpdate(); //设置主角为1,为碰撞做准备 this->setTag(1); return true; }
//--- NGF events ---------------------------------------------------------------- Crate::Crate(Ogre::Vector3 pos, Ogre::Quaternion rot, NGF::ID id, NGF::PropertyList properties, Ogre::String name) : NGF::GameObject(pos, rot, id , properties, name), mMoving(false), mExploded(false) { addFlag("Crate"); addFlag("Switcher"); Ogre::String script = mProperties.getValue("script", 0, ""); //Python init event. NGF_PY_CALL_EVENT(init); //Read properties. Ogre::Real heightDef = Ogre::StringConverter::parseReal(mProperties.getValue("heightDeficiency", 0, "0")); if(!(mProperties.getValue("NGF_SERIALISED", 0, "no") == "yes")) pos.y -= heightDef * 0.5; //If deficient in height, move down by half the deficiency because midpoint is local origin. //Create the Ogre stuff. mEntity = GlbVar.ogreSmgr->createEntity(mOgreName, "Crate.mesh"); mNode = GlbVar.ogreSmgr->getRootSceneNode()->createChildSceneNode(mOgreName, pos, rot); mNode->attachObject(mEntity); //Create the Physics stuff. The mesh is a normal box, except in the bottom it's bevelled. Ogre::Entity *colMesh = GlbVar.ogreSmgr->createEntity(mOgreName + "_Collision", "Collision_Crate.mesh"); BtOgre::StaticMeshToShapeConverter converter(colMesh); mShape = converter.createConvex(); GlbVar.ogreSmgr->destroyEntity(colMesh); mShape->setMargin(0); btScalar mass = 7; btVector3 inertia; mShape->calculateLocalInertia(mass, inertia); BtOgre::RigidBodyState *state = new BtOgre::RigidBodyState(mNode); btRigidBody::btRigidBodyConstructionInfo info(mass, state, mShape, inertia); mBody = new btRigidBody(info); mBody->setActivationState(DISABLE_DEACTIVATION); initBody( DimensionManager::LIFTABLE ); //To allow Gravity, but still constraint on XZ plane, we use slider. mCastShape = new btBoxShape(btVector3(0.475,0.65,0.475)); btDefaultMotionState *fixedState = new btDefaultMotionState(btTransform(BtOgre::Convert::toBullet(rot), BtOgre::Convert::toBullet(pos + Ogre::Vector3(0,20,0)))); mFixedBody = new btRigidBody(0, fixedState, mCastShape); mFixedBody->setCollisionFlags(mBody->getCollisionFlags() | btCollisionObject::CF_KINEMATIC_OBJECT | btCollisionObject::CF_NO_CONTACT_RESPONSE); mFixedBody->setActivationState(DISABLE_DEACTIVATION); GlbVar.phyWorld->addRigidBody(mFixedBody, mDimensions | DimensionManager::NO_DIM_CHECK | DimensionManager::NO_MOVING_CHECK | DimensionManager::NO_BULLET_HIT | DimensionManager::NO_CRATE_CHECK | DimensionManager::INVISIBLE , mDimensions); mConstraint = new btSliderConstraint(*mBody, *mFixedBody, btTransform(btQuaternion(btVector3(0,0,1),Ogre::Math::PI/2.0)), btTransform(btQuaternion(btVector3(0,0,1),Ogre::Math::PI/2.0)), false); mConstraint->setLowerLinLimit(1); //Free linear. mConstraint->setUpperLinLimit(0); mConstraint->setLowerAngLimit(0); //Locked angular. mConstraint->setUpperAngLimit(0); //mConstraint->setRestitutionOrthoLin(3); mBody->setAngularFactor(btVector3(0,0,0)); mBody->setLinearFactor(btVector3(0,1,0)); //GlbVar.phyWorld->addConstraint(mConstraint, true); //Height deficiency, for some variety in Crates. mHeight = 1.5 - heightDef; if (heightDef != 0) { Ogre::Real scale = mHeight / 1.5; mNode->setScale(Ogre::Vector3(1,scale,1)); mShape->setLocalScaling(btVector3(1,scale,1)); mCastShape->setLocalScaling(btVector3(1,scale,1)); } //Crate materials, again for variety. int n = Ogre::Math::Floor(Ogre::Math::RangeRandom(1, MAX_CRATE_MATERIALS + 0.99)); mEntity->setMaterialName("Objects/Crate" + Ogre::StringConverter::toString(n)); //Sound. mSound = GlbVar.soundMgr->createSound(mOgreName + "_Sound", "CrateMove.ogg", true, false); mNode->attachObject(mSound); mSound->setReferenceDistance(1.2); mSound->setGain(2.1); }
void Runner::Run(){ m_state = running; initBody(); doAction("running"); this->setPosition(runner_posX,ground_hight+getRunJumpSize().height/2); }
void ExplisonScreen::setBody( float dt ) { initBody(); }
void Level13::restart(){ BaseLevel::restart(); #define MOVE_BY_X 192 auto r1 = Ring::create(); r1->setPosition(E::originX, E::originY + 128); r1->setScale(0.2); r1->initBody(); this->addChild(r1); r1->runAction(RepeatForever::create(Sequence::create(MoveBy::create(0.5f, Vec2(MOVE_BY_X, 0)), DelayTime::create(1.0f), MoveBy::create(0.5f, Vec2(-MOVE_BY_X, 0)), nullptr))); auto r2 = Ring::create(); r2->setPosition(E::originX + DESIGNED_WIDTH, E::originY + 128); r2->setScale(0.2); r2->initBody(); this->addChild(r2); r2->runAction(RepeatForever::create(Sequence::create(MoveBy::create(0.5f, Vec2(-MOVE_BY_X, 0)), DelayTime::create(1.0f),MoveBy::create(0.5f, Vec2(MOVE_BY_X, 0)), nullptr))); auto t1 = Target::create(); t1->setPosition(E::originX + DESIGNED_WIDTH / 2, E::originY + 400); t1->initBody(); t1->playAnim(1); this->addChild(t1); t1->initProtector(); /* auto b_l = Brick::create(E::originX + 96, 32); b_l->setPosition(0, E::originY + 32); b_l->setRotation(30); b_l->initBody(); this->addChild(b_l); auto b_r = Brick::create(E::originX + 96, 32); b_r->setPosition(E::originX + DESIGNED_WIDTH - 96, E::originY + 32); b_r->setRotation(-30); b_r->initBody(); this->addChild(b_r); */ ring1 = Ring::create(); ring1->setPosition(E::originX + DESIGNED_WIDTH / 2 - 80, E::originY + 400); ring1->setScale(0.1); ring1->initBody(); this->addChild(ring1); ring2 = Ring::create(); ring2->setPosition(E::originX + DESIGNED_WIDTH / 2 + 80, E::originY + 400); ring2->setScale(0.1); ring2->initBody(); this->addChild(ring2); auto diamond1 = Diamond::create(); diamond1->setScale(0.9f); diamond1->setRotation(30); diamond1->setPosition(E::originX - 128, E::originY + 256 + 64); diamond1->initBody(); this->addChild(diamond1); auto diamond2 = Diamond::create(); diamond2->setScale(0.9f); diamond2->setRotation(-30); diamond2->setPosition(E::originX + DESIGNED_WIDTH + 128, E::originY + 256 + 64); diamond2->initBody(); this->addChild(diamond2); angle = 0; }
void Level20::restart() { BaseLevel::restart(); #define MOVE_BY_X 192 auto r1 = Target::create(); r1->setPosition(E::originX, E::originY + 420); r1->setRotation(45); r1->initBody(); this->addChild(r1); r1->initProtector(192 - 32); r1->runAction(RepeatForever::create(Sequence::create(MoveBy::create(0.5f, Vec2(MOVE_BY_X, 0)), DelayTime::create(1.0f), MoveBy::create(0.5f, Vec2(-MOVE_BY_X, 0)), nullptr))); auto r2 = Target::create(); r2->setPosition(E::originX + DESIGNED_WIDTH, E::originY + 420); r2->setRotation(-45); r2->initBody(); this->addChild(r2); r2->initProtector(192 - 32); r2->runAction(RepeatForever::create(Sequence::create(MoveBy::create(0.5f, Vec2(-MOVE_BY_X, 0)), DelayTime::create(1.0f), MoveBy::create(0.5f, Vec2(MOVE_BY_X, 0)), nullptr))); auto ring1 = Ring::create(); ring1->setPosition(E::originX + DESIGNED_WIDTH / 2 - 80, E::originY + 128 + 64); ring1->setScale(0.15); ring1->initBody(); this->addChild(ring1); auto ring2 = Ring::create(); ring2->setPosition(E::originX + DESIGNED_WIDTH / 2 + 80, E::originY + 128 + 64); ring2->setScale(0.15); ring2->initBody(); this->addChild(ring2); auto b1 = Brick::create(192, 24); b1->setRotation(45); b1->setPosition(E::originX + DESIGNED_WIDTH / 2 - 192 + 32, E::originY + 96 ); b1->initBody(); this->addChild(b1); auto b12 = Brick::create(192, 16, E::P.C800); b12->setRotation(45); b12->setPosition(E::originX + DESIGNED_WIDTH / 2 - 192 + 32 + 16, E::originY + 96 + 8); b12->initBody(); this->addChild(b12); auto b2 = Brick::create(192, 24); b2->setRotation(-45); b2->setPosition(E::originX + DESIGNED_WIDTH / 2 - 192 + 32 + 128, E::originY + 96 ); b2->initBody(); this->addChild(b2); auto b22 = Brick::create(192, 16, E::P.C800); b22->setRotation(-45); b22->setPosition(E::originX + DESIGNED_WIDTH / 2 - 192 + 32 - 16 + 128, E::originY + 96 + 8); b22->initBody(); this->addChild(b22); auto diamond1 = Diamond::create(); diamond1->setScale(0.9f); diamond1->setRotation(30); diamond1->setPosition(E::originX - 128, E::originY + 256 + 64); diamond1->initBody(); this->addChild(diamond1); auto diamond2 = Diamond::create(); diamond2->setScale(0.9f); diamond2->setRotation(-30); diamond2->setPosition(E::originX + DESIGNED_WIDTH + 128, E::originY + 256 + 64); diamond2->initBody(); this->addChild(diamond2); }
//--- NGF events ---------------------------------------------------------------- SlidingBrush::SlidingBrush(Ogre::Vector3 pos, Ogre::Quaternion rot, NGF::ID id, NGF::PropertyList properties, Ogre::String name) : NGF::GameObject(pos, rot, id , properties, name), mCurrentPlace(0.5), mLastPlace(1), mForward(false) { addFlag("SlidingBrush"); //Save the director event. NGF_PY_SAVE_EVENT(point); //Python init event. NGF_PY_CALL_EVENT(init); //Get properties. mEnabled = Ogre::StringConverter::parseBool(mProperties.getValue("enabled", 0, "yes")); mSpeed = Ogre::StringConverter::parseReal(mProperties.getValue("speed", 0, "2")); //Create the Ogre stuff. mEntity = createBrushEntity(); mNode = GlbVar.ogreSmgr->getRootSceneNode()->createChildSceneNode(mOgreName, pos, rot); mNode->attachObject(mEntity); //Create the Physics stuff. BtOgre::StaticMeshToShapeConverter converter(mEntity); mShape = converter.createConvex(); mShape->setMargin(0); //Bad, but we gotta. BtOgre::RigidBodyState *state = new BtOgre::RigidBodyState(mNode); mBody = new btRigidBody(0, state, mShape); mBody->setCollisionFlags(mBody->getCollisionFlags() | btCollisionObject::CF_KINEMATIC_OBJECT); mBody->setActivationState(DISABLE_DEACTIVATION); initBody(); //First point is here. mPoints.push_back(pos); //If we're a simple slider, we just move in one direction till a point and then return. Ogre::String distanceStr = mProperties.getValue("distance", 0, "n"); if(!(distanceStr == "n")) { Ogre::Real distance = Ogre::StringConverter::parseReal(distanceStr); mPoints.push_back(pos + (rot * Ogre::Vector3(0,0,-distance))); } mIgnoreCollisions = Ogre::StringConverter::parseBool(mProperties.getValue("ignoreCollisions", 0, "no")); //mIgnoreCollisions = true; //Make smaller shape for cast. //Get vertices. btAlignedObjectArray<btVector3> offsetVerts; btVector3 *iter = mShape->getUnscaledPoints(); for (int i = 0; i < mShape->getNumPoints(); ++i, ++iter) offsetVerts.push_back(*iter); //Push 'em in by 0.1; btAlignedObjectArray<btVector3> offsetPlanes; btGeometryUtil::getPlaneEquationsFromVertices(offsetVerts, offsetPlanes); int sz = offsetPlanes.size(); for (int i=0 ; i<sz ; ++i) offsetPlanes[i][3] += CAST_SHAPE_SHRINK; offsetVerts.clear(); btGeometryUtil::getVerticesFromPlaneEquations(offsetPlanes, offsetVerts); //Fill the shape with the new points. mCastShape = new btConvexHullShape(); for (int i = 0; i < offsetVerts.size() ; ++i) mCastShape->addPoint(offsetVerts[i]); }