Войти
ПрограммированиеФорумФизика

PhysX + Ogre

#0
18:15, 9 мар. 2007

Не могу определить для нужного актера addForce. Т.е. mPhysics определен правильно, т.к. когда добавляю объект, то на него дейстует граитация.
Все что я хочу, чтобы при нажатии на кнопку “T”  к актеру прикладыалась сила : (то есть я создал актера а потом setName(“Player”);

class CameraTrackListener: public ExampleFrameListener
{
protected:
  NxScene *gScene;
  NxActor* actor, * mActor;
public:
    CameraTrackListener(RenderWindow* win, Camera* cam,NxScene *mScene)
        : ExampleFrameListener(win, cam)
    {
    gScene = mScene;
    }
    bool frameStarted(const FrameEvent& evt)
    {
  gScene->simulate(evt.timeSinceLastFrame);
  gScene->flushStream();
  gScene->fetchResults(NX_RIGID_BODY_FINISHED,true);

  int nbActors = gScene->getNbActors();
      NxActor** actors = gScene->getActors();
      while(nbActors--)
      {
          actor = *actors++;
if (actor->getName() == “Player”)
{ mActor = actor}
            if(!actor->isDynamic())continue;
            if(actor->isSleeping())continue;
            if(!actor->userData) continue;
          Ogre::SceneNode *object = static_cast<Ogre::SceneNode *>(actor->userData);
    object->setPosition(toOgre(actor->getGlobalPosition()));
      }
return ExampleFrameListener::frameStarted(evt);
  }

inline Ogre::Vector3 toOgre(const NxVec3 &v) const { return Ogre::Vector3(v.x, v.y, v.z); }

void keyPressed(KeyEvent* e)
{
if (e->getKey() == KC_T)
  {
  NxVec3 forceVec(100,0,100);
  mActor->addForce(forceVec);
  }
}
};

Но ничего не получается ( Где моя ошибка ?????


#1
12:34, 10 мар. 2007

С этой проблемой разобрался.
Теперь у меня такая проблема, если я нажал хотя бы один раз “T”,тем самым задал силу для actor:

actor->addForce(NxVec3(10,10,10));

То теперь к моему актеру всегда прикладывается эта сила, то есть он все время поднимается  ???

bool frameStarted(const FrameEvent& evt)
{
gScene->simulate(evt.timeSinceLastFrame);
  gScene->flushStream();
  gScene->fetchResults(NX_RIGID_BODY_FINISHED,true);

  int nbActors = gScene->getNbActors();
      NxActor** actors = gScene->getActors();
      while(nbActors--)
      {
        actor = *actors++;
    if(!actor->isDynamic())continue;
        if(actor->isSleeping())continue;
        if(!actor->userData) continue;
     
    Ogre::SceneNode *object = static_cast<Ogre::SceneNode*>
  (actor->userData);
    object->setPosition(toOgre(actor->getGlobalPosition()));
    }
  if (mInputDevice->isKeyDown(KC_T))
        {
          actor->addForce(NxVec3(10,10,10));
        }
return true;
}

ПрограммированиеФорумФизика

Тема в архиве.