Funktionsproblem wegen unbekannter Variable



  • hier mal der code mit der problembeschreibung

    #include "stdafx.h"
    #include "test.h"
    #include <xors3d.h>
    #include <iostream>
    #include "defs.h"
    //#include "movement.h"
    
    int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
    {
       xGraphics3D(1366, 768, 32, false, true);
       xHidePointer();
       int camera = xCreateCamera();  
       xPositionEntity(camera, 70, 60, 80);
       int light = xCreateLight();
       xPositionEntity(light, 50, 60, 60);
       xRotateEntity(light, 45, 45, 45);
       int terrain = xLoadMesh("media/terrain.b3d");
       xPositionEntity(terrain, 0, 0, 0);
       int hud_left = xLoadImage("media/hud-left.png");
    
       while(!xKeyDown(KEY_ESCAPE))
       {
    
    	  if(xKeyDown(KEY_W)) xMoveEntity(camera, 0, 0, 1);
    	  if(xKeyDown(KEY_S)) xMoveEntity(camera, 0, 0, -1);
    	  if(xKeyDown(KEY_A)) xMoveEntity(camera, -1, 0, 0);
    	  if(xKeyDown(KEY_D)) xMoveEntity(camera, 1, 0, 0);
    
          xRenderWorld();
    	  xDrawImage(hud_left, -25, 575);
          xFlip();
       }
       return 0;
    }
    

    funktioniert aber ich will den block...

    if(xKeyDown(KEY_W)) xMoveEntity(camera, 0, 0, 1);
    	  if(xKeyDown(KEY_S)) xMoveEntity(camera, 0, 0, -1);
    	  if(xKeyDown(KEY_A)) xMoveEntity(camera, -1, 0, 0);
    	  if(xKeyDown(KEY_D)) xMoveEntity(camera, 1, 0, 0);
    

    in einer seperaten movement.h datei haben....
    so hier solls dann in der movement.h aussehen und ich will das dann mit move();
    in der main aufrufen können.
    leider kommt dann der fehler weil "camera" nicht bekannt ist...

    int move()
    {
    	  if(xKeyDown(KEY_W)) xMoveEntity(camera, 0, 0, 1);
    	  if(xKeyDown(KEY_S)) xMoveEntity(camera, 0, 0, -1);
    	  if(xKeyDown(KEY_A)) xMoveEntity(camera, -1, 0, 0);
    	  if(xKeyDown(KEY_D)) xMoveEntity(camera, 1, 0, 0);
    }
    

    Such schon ne Weile nach einer Lösung und hab nur gehört man könnte das mit einer Klasse und Singleton lösen, aber so fit bin ich noch nicht.
    Man muss das doch aber auch einfacher hinbekommen...

    Wenn irgendjemand einen Rat weiß.....möchte doch nur die Bewegungssteuerung extra haben und nur in der Hauptschleife aufrufen müssen.



  • Warum nicht mittels Parameterübergabe?

    int move(int camera)
    ...
    

    Nachtrag: Und falls dir Parameterübergaben gar nicht in den Sinn kamen, oder gar unbekannt sind, solltest du dich definitiv erst mit einem Grundlagenbuch beschäftigen...



  • int move(int camera);
    


  • so hier ging es nicht

    #include "stdafx.h"
    #include "test.h"
    #include <xors3d.h>
    #include <iostream>
    #include "defs.h"
    #include "movement.h"
    
    int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
    {
      xGraphics3D(1366, 768, 32, false, true);
       xHidePointer();
       int camera = xCreateCamera();  
       xPositionEntity(camera, 70, 60, 80);
       int light = xCreateLight();
       xPositionEntity(light, 50, 60, 60);
       xRotateEntity(light, 45, 45, 45);
       int terrain = xLoadMesh("media/terrain.b3d");
       xPositionEntity(terrain, 0, 0, 0);
       int hud_left = xLoadImage("media/hud-left.png");
       while(!xKeyDown(KEY_ESCAPE))
       {
          move(camera);
          xRenderWorld();
    	  xDrawImage(hud_left, -25, 575);
          xFlip();
       }
       return 0;
    }
    

    movement.h

    int move(int cam)
    {
    
    	  if(xKeyDown(KEY_W)) xMoveEntity(camera, 0, 0, 1);
    	  if(xKeyDown(KEY_S)) xMoveEntity(camera, 0, 0, -1);
    	  if(xKeyDown(KEY_A)) xMoveEntity(camera, -1, 0, 0);
    	  if(xKeyDown(KEY_D)) xMoveEntity(camera, 1, 0, 0);
    	  return 0;
    }
    


  • itmagic schrieb:

    so hier ging es nicht

    "Geht nicht" ist KEINE ausreichende Fehlerbeschreibung.

    Lies bitte auch den Post hier intensiv durch, speziell den Teil zu präzisen Fehlermeldungen.



  • itmagic schrieb:

    int move(int [b]cam[/b])
    {
    
    	  if(xKeyDown(KEY_W)) xMoveEntity([b]camera[/b], 0, 0, 1);
    	  if(xKeyDown(KEY_S)) xMoveEntity(camera, 0, 0, -1);
    	  if(xKeyDown(KEY_A)) xMoveEntity(camera, -1, 0, 0);
    	  if(xKeyDown(KEY_D)) xMoveEntity(camera, 1, 0, 0);
    	  return 0;
    }
    

    Ich empfehle, die Basics der Sprache zu lernen, bevor man versucht, mit einer 3D-Engine zu arbeiten.



  • habs schon...übergabeparameter aus camera nach cam ändern...schusselfehler..
    hab die engine vorher mit ner anderen sprache genutzt....und steige erst in c++ ein...


Anmelden zum Antworten