Aktuelle Zeit: 13.05.2025, 00:07

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 20 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Autor Nachricht
 Betreff des Beitrags: Re: Ein Fehler
BeitragVerfasst: 20.11.2007, 18:28 
Offline
Moderator

Registriert: 25.02.2007, 14:35
Beiträge: 323
Wohnort: Münster
faas hat geschrieben:
Ich versuche jetzt aber in der zeit bis marsupial wieder da ist den code zu verbessern...


Ich fühl mich ja geehrt :) , aber wie thephoenix schon sagte, ist die frage, was node und was mesh denn darstellen soll? Was soll "mesh->getMesh(0)" deiner Meinung nach bewirken?


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Ein Fehler
BeitragVerfasst: 20.11.2007, 18:47 
Offline

Registriert: 11.05.2007, 16:35
Beiträge: 31
Neben der reinen 'gestaltbeschreibung' (Imesh) brauch der selector näheres zum knoten, die lage, sichtbarkeit. Ich kann mich auch irren. Mein vorgehen war sehr intuitiv und ich weiß auch garnicht wie ich mich erklären soll.
In diesem teil soll einfach die gravitation und die kollision eingesetzt werden. Wenn das so nicht stimmt (was ja nach meinem 3 tägigen arbeiten mit der irrlicht engine sehr wahrscheinlich ist), bitte ich um eine korrektur.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Ein Fehler
BeitragVerfasst: 20.11.2007, 20:38 
Offline
Moderator

Registriert: 25.02.2007, 14:35
Beiträge: 323
Wohnort: Münster
Ich verstehe was du erreichen möchtest, aber du hast das Mesh ja noch nicht mal geladen... Die Variable "mesh" enthält ja noch nichts. Woher soll das Programm denn die Daten zum mesh bekommen?

Du musst also erst das Mesh laden (mesh = smgr->getMesh("Dateipfad")) und dann noch ein SceneNode mit dem Mes herstellen (node = smgr->addMeshSceneNode(mesh)).


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Ein Fehler
BeitragVerfasst: 20.11.2007, 21:16 
Offline

Registriert: 11.05.2007, 16:35
Beiträge: 31
Es bestehen immer noch die gleichen fehler
bei // edit ist der neue code
Code:
#include <irrlicht.h>
#include <audiere.h>  // audiere kümmert sich um den sound

using namespace irr;
using namespace video;
using namespace scene;
using namespace core;

int modellife;
int mylife; // leben 0-9999
int life;
int i;
int rcounter=0;
float frames;
int x = 0;
int y = 75;
int z = 100;

bool shot=false;
char otherplayer[100];

IrrlichtDevice *device=0;

class MyEventReceiver : public IEventReceiver
{
public:
   virtual bool OnEvent(SEvent event)
   {
       if(mylife<0)
         return true;
       if(event.EventType==EET_MOUSE_INPUT_EVENT){
          if(event.MouseInput.Event==EMIE_LMOUSE_PRESSED_DOWN){
            shot=true;
           }
        }       
        if(device && device->getSceneManager()->getActiveCamera())
           device->getSceneManager()->getActiveCamera()->OnEvent(event);
        return true;
    }
};

void iamhit(){  // bei einem treffer wird die funktion aufgerufen
    printf("Du wurdest getroffen! Status:%d %",mylife);

    if(mylife<0){
      printf("Du hast verloren\n");
      modellife=9999;
    }   
    return;
}

int main()
{


   MyEventReceiver receiver;

        // deviceType, windowSize, bits, fullscreen(16/32), stencilbuffer, vsync, eventReceiver
        // 1280x1024,
        device=createDevice(EDT_OPENGL,dimension2d<s32>(800, 600),16,true,false,true,&receiver);

   IVideoDriver* driver=device->getVideoDriver();
   ISceneManager* smgr=device->getSceneManager();

   IAnimatedMesh* mapmesh=smgr->getMesh("map1.x");  // läd die map
   ISceneNode* map = 0;
   
   map=smgr->addOctTreeSceneNode(mapmesh->getMesh(0));

   IAnimatedMesh* modelmesh=smgr->getMesh("feind.md2"); // läd den Feind
   IAnimatedMeshSceneNode* model=smgr->addAnimatedMeshSceneNode(modelmesh);
   
// edit
mesh = smgr->getMesh("feind2.md2"); // load mesh
node = smgr->addMeshSceneNode(mesh); // SceneNode herstellen
// edit end

   model->setMaterialTexture( 0, driver->getTexture("tex.pcx") );
   model->setPosition(vector3df(0,150,100));
   model->setScale(vector3df(3,3,3));
   model->setMD2Animation(EMAT_RUN);

   

   // setzt dynamische Lichtquellen
   smgr->addLightSceneNode(0,vector3d<f32>(-480,100,970),SColorf(0.1,0.7,0.3),300);
   smgr->addLightSceneNode(0,vector3d<f32>(480,100,700),SColorf(0.1,0.7,0.3),300);
   smgr->addLightSceneNode(0,vector3d<f32>(0,400,0),SColorf(1,1,1),500);
   ILightSceneNode* floater=smgr->addLightSceneNode(0,vector3d<f32>(251,300,766),SColorf(1,0.1,0.2),400);
   ISceneNodeAnimator* floateranim=smgr->createFlyCircleAnimator(vector3d<f32>(251,400,-766),100,0.01);
   floater->addAnimator(floateranim);

   ICameraSceneNode* camera=smgr->addCameraSceneNodeFPS();
   camera->setPosition(vector3df(0,150,20));

///////////////////////////////////
   camera->setPosition(core::vector3df(0,150,0));
   ITriangleSelector* selector = smgr->createOctTreeTriangleSelector(mesh->getMesh(0),node, 128);
   node->setTriangleSelector(selector);
   selector->drop();
   ISceneNodeAnimator* anim=smgr->createCollisionResponseAnimator(selector,camera,vector3df(30,50,30));
   camera->addAnimator(anim);
   anim->drop();
////////////////////////////////////
   IMetaTriangleSelector* metaselector;
   metaselector=smgr->createMetaTriangleSelector();

   ITriangleSelector* mapselector=smgr->createOctTreeTriangleSelector(mapmesh->getMesh(0), map, 128);
   metaselector->addTriangleSelector(mapselector);
   mapselector->drop();

   ITriangleSelector* modelselector=smgr->createTriangleSelector(modelmesh->getMesh(0), model);
   metaselector->addTriangleSelector(modelselector);
   modelselector->drop();

   aabbox3d<f32> box=model->getBoundingBox();

   anim=smgr->createCollisionResponseAnimator(
      metaselector,camera,(box.MaxEdge-box.getCenter())*3);
   camera->addAnimator(anim);
   anim->drop();

   device->getCursorControl()->setVisible(false);

// Sound mit audiere
   audiere::AudioDevicePtr audiodevice(audiere::OpenDevice());     
                                                                  // "name.wav", schleife?
   audiere::OutputStreamPtr sndtrck(audiere::OpenSound(audiodevice, "ddd.wav", true)); // läd den sound
   audiere::OutputStreamPtr aas(audiere::OpenSound(audiodevice, "sss.wav", false));
   // setzt die lautstärke und wiederholung
   aas->setVolume(1);
   sndtrck->setRepeat(true);
   sndtrck->setVolume(0.7);
   sndtrck->play();


//
restart:
   modellife=10;
   mylife=0;

   while(device->run())
   {
      driver->beginScene(true, true, SColor(0,10,10,10));
      smgr->drawAll();
      driver->endScene();
      vector3d<f32> explosion;
     

         if(life==9999){
             mylife=life;
             printf("you win!\n");
             model->setMD2Animation(EMAT_DEATH_FALLBACK);
          }

         if(life<mylife){
             mylife=life;
              aas->play();
             iamhit();
         }   

         int time=(float(rcounter)/frames)*1000;
        rcounter=0;
         ISceneNodeAnimator* runto=smgr->createFlyStraightAnimator(model->getPosition(),vector3df(x,y,z),time,0);
         model->setRotation(vector3df(0,-90,0));
         model->addAnimator(runto);
         runto->drop();


        if(shot && !aas->isPlaying()){
            aas->play();
            vector3d<f32> direction=camera->getTarget()-camera->getPosition();
            direction.normalize();
            line3d<f32> bullet;
            bullet.start=camera->getPosition();
            bullet.end=camera->getPosition()+direction*1500;
           
            triangle3d<f32> dummy;
            vector3d<f32> mapcollision;
            vector3d<f32> modelcollision;
           
            bool gotmap=smgr->getSceneCollisionManager()->getCollisionPoint(bullet,mapselector,mapcollision,dummy);
            bool gotmodel=smgr->getSceneCollisionManager()->getCollisionPoint(bullet,modelselector,modelcollision,dummy);
            float mapdistance=0;
            float modeldistance=0;

            if(gotmap){
               mapdistance=camera->getPosition().getDistanceFromSQ(mapcollision);
            }
            if(gotmodel){
               modeldistance=camera->getPosition().getDistanceFromSQ(modelcollision);
            }
               
            if(gotmodel && gotmap){
                if(modeldistance<=mapdistance){
                    modellife-=1;
                    aas->stop();
                    aas->play();
                    printf("you score!\n");
                    explosion=modelcollision;
                }
                else
                    explosion=mapcollision;                   
            }   
            if(gotmodel && !gotmap){
                modellife-=1;
                aas->stop();
                aas->play();
                printf("you score!\n");
                explosion=modelcollision;
            }
            if(!gotmodel && gotmap){
                explosion=mapcollision;
            }       
        }
        else if(shot)
          shot=false;   
   }

   device->drop();   
   return 0;
}


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Ein Fehler
BeitragVerfasst: 20.11.2007, 21:27 
Offline
Moderator
Benutzeravatar

Registriert: 15.04.2007, 20:20
Beiträge: 505
Wohnort: Reelsen
Nein, es sind andere Fehler*.
Zitat:
mesh = smgr->getMesh("feind2.md2"); // load mesh
node = smgr->addMeshSceneNode(mesh); // SceneNode herstellen

In C++ musst du Variablen deklarieren, bevor du die benutzt.
Code:
IAnimatedMesh *mesh = smgr->getMesh("feind2.md2"); // load mesh
IAnimatedMeshSceneNode *node = smgr->addMeshSceneNode(mesh); // SceneNode herstellen


* Zumindest nach 10s den Code überfliegen.

_________________
Meine Gameengine :)
Bild


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Ein Fehler
BeitragVerfasst: 21.11.2007, 06:15 
Offline

Registriert: 11.05.2007, 16:35
Beiträge: 31
Code:
IAnimatedMeshSceneNode *node = smgr->addMeshSceneNode(mesh); // SceneNode herstellen

Die Zeile bringt auch fehler mit sich.
Zitat:
75 C:\Dev-C++\game\main.cpp no matching function for call to `irr::scene::ISceneManager::addMeshSceneNode(irr::scene::IAnimatedMesh*&)'
note C:\irrlicht-1.3.1\include\ISceneManager.h:385 candidates are: virtual irr::scene::IMeshSceneNode* irr::scene::ISceneManager::addMeshSceneNode(irr::scene::IMesh*, irr::scene::ISceneNode*, irr::s32, const irr::core::vector3df&, const irr::core::vector3df&, const irr::core::vector3df&, bool)


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Ein Fehler
BeitragVerfasst: 21.11.2007, 12:29 
Offline
Moderator
Benutzeravatar

Registriert: 11.03.2007, 20:25
Beiträge: 556
Wohnort: Frankfurt/Main
es muss ja auch wie drei zeilen drüber addAnimatedMeshSceneNode heißen..

_________________
yo. life's so bloody short.
Ihr dachtet Schulfernsehn sei die ultimative Folter? Falsch: Fahrstuhlmusik, extra leise.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Ein Fehler
BeitragVerfasst: 21.11.2007, 12:50 
Offline
Newsposter
Benutzeravatar

Registriert: 12.03.2007, 10:42
Beiträge: 338
Wohnort: Berlin
faas versuch nicht die tutorials einfach abzuarbeiten,
versuch die tutorials zu verstehen.
Deswegen mal jetzt etwas von mir was du dir zu herzen nehmen solltest:
Fang noch einmal von vorne an mit den tutorials und gehe sie durch, verstehe sie und probiere den code der tutorial ein wenig zu verändern um dann zu sehen wie irrlicht funktioniert.
dann wirst du auch merken was du hier falsch machst und du wirst merken wann du was benutzen kannst


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 20 Beiträge ]  Gehe zu Seite Vorherige  1, 2

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 12 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de