Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Fred

Supermoderator

Beiträge: 2 121

Beruf: Softwareentwickler

  • Private Nachricht senden

21

14.02.2007, 20:09

bzw. Welchen Typ hat SPF? Denn aus den Timer-Werten lässt sich kein float Wert berechnen

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

22

14.02.2007, 22:38

SPF ist einfach ein float Wert.

Warum sollte ITimer* Time1 = device->getTimer(); nicht gehen? Oder was geht daran nicht?
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Fred

Supermoderator

Beiträge: 2 121

Beruf: Softwareentwickler

  • Private Nachricht senden

23

14.02.2007, 22:47

Na ja es berechnet zwar einen Wert, aber ich bring es nicht fertig daraus einen float wert zu brechnen(der scheint null zu sein):

C-/C++-Quelltext

1
2
3
4
Time1=device->getTimer();
// bla bla was da halt steht von wegen Kamera und co

Time2 = device->getTimer();
fTime = (float)(Time2 - Time1)/ 1000.0f;


Solässt sich die Kamera nicht bewegen, da fTime 0 zu sein scheint, damit ergibt Change=0 und es bewegtsich nichts

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

24

14.02.2007, 22:51

Schonmal den Debugger bemüht?
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Fred

Supermoderator

Beiträge: 2 121

Beruf: Softwareentwickler

  • Private Nachricht senden

25

14.02.2007, 22:55

Ja egtl. schon fTime ist immer 0.

Fred

Supermoderator

Beiträge: 2 121

Beruf: Softwareentwickler

  • Private Nachricht senden

26

14.02.2007, 22:57

Ich poste einfach mal den Code:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#include    <irrlicht.h>
#include <ITimer.h> 
#include    <windows.h>
//#pragma comment(lib, "Irrlicht.lib")

using namespace irr;
using namespace core;
using namespace scene;
using namespace io;
using namespace video;
using namespace gui;

float fTime;
float fTime1;
float fTime2;
ITimer* Time1;
ITimer* Time2;

IAnimatedMesh* mHouse;
IAnimatedMeshSceneNode* nHouse;
IAnimatedMesh* mPlayer;
IAnimatedMeshSceneNode* nPlayer;

vector3df PlayerPos = vector3df(100,0,0);
vector3df CamPos    = vector3df(0,500,0);
vector3df CamLook   = vector3df(0,30,0);
vector3df Move;


IVideoDriver* driver;
ISceneManager* smgr;
IGUIEnvironment* guienv;

class MyEventReceiver : public IEventReceiver
{
public:
    virtual bool OnEvent(SEvent event)
    {

        if (nPlayer != 0 && event.EventType == irr::EET_KEY_INPUT_EVENT)
        {
            switch(event.KeyInput.Key)
            {
            case KEY_KEY_W:
                {
                    Move.X += event.KeyInput.PressedDown ? 1.0f : 0.0f;
                    break;
                }
            case KEY_KEY_S:
                {   
                    Move.X -= event.KeyInput.PressedDown ? 1.0f : 0.0f;
                    break;
                }
            case KEY_KEY_A:
                {
                    Move.Z += event.KeyInput.PressedDown ? 1.0f : 0.0f;
                    break;
                }
            case KEY_KEY_D:
                {   
                    Move.Z -= event.KeyInput.PressedDown ? 1.0f : 0.0f;
                    break;
                }

                return true;
            }
        }
        return false;
    }
};

int main()
{
    MyEventReceiver receiver;
    // Device erstellen

    IrrlichtDevice* device = createDevice(EDT_OPENGL,dimension2d<s32>(1024,768),32, false, false, false, &receiver);
    // Name für das Fenster

    device->setWindowCaption(L"Shooter");
    // Zeiger für Video, SceneManager, GUIEnviroment

    guienv = device->getGUIEnvironment();   
    smgr   = device->getSceneManager();
    driver = device->getVideoDriver();
    
    // Modell eines Hauses

    mHouse = smgr->getMesh("Data\\Haus.3ds");
    nHouse = smgr->addAnimatedMeshSceneNode(mHouse, 0, -1, vector3df(0,0,0));

    // DasSpieler Modell

    mPlayer = smgr->getMesh("Data\\Kopp.3ds");
    nPlayer = smgr->addAnimatedMeshSceneNode(mPlayer, 0, -1, PlayerPos + Move);

    // Licht aus

    nHouse->setMaterialFlag(EMF_LIGHTING, false);
    nPlayer->setMaterialFlag(EMF_LIGHTING, false);

    // Die Kamera

    ICameraSceneNode*   Kamera = smgr->addCameraSceneNode(0, CamPos ,vector3df(0,0,0));
        

    while(device->run())
    {
        Time1=device->getTimer();
        driver->beginScene(true, true, SColor(255,0,0,140));
        smgr->drawAll();
        guienv->drawAll();
        driver->endScene();
        vector3df CamTarget = Kamera->getTarget();
        vector3df CamPos    = Kamera->getPosition();
        vector3df CamDir    = CamPos - CamTarget;
        vector3df Change    = Move * (500.0f * fTime);
        Move.X              = 0;
        Move.Z              = 0;
        CamTarget           = CamTarget + Change * 0.2f;

        CamPos.X = CamTarget.X + CamDir.X;
        CamPos.Z = CamTarget.Z + CamDir.Z; 


        Kamera->setPosition(CamPos);
        Kamera->setTarget(CamTarget);
        Kamera->updateAbsolutePosition();
        Time2 = device->getTimer();
        fTime = (float)(Time2 - Time1)/ 1000.0f;
    
    }

    
    device->drop();
    
    return 0;
}

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

27

15.02.2007, 00:35

device->getTimer()->start();

Das mal vor der run() schleife eingesetzt.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Fred

Supermoderator

Beiträge: 2 121

Beruf: Softwareentwickler

  • Private Nachricht senden

28

15.02.2007, 13:44

Hm Time1 = 0x00373e38
Time2 = 0x00373e38
fTime = 0

nur wieso haben Time1 u. Time2 die gleichen Werte?

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

29

15.02.2007, 14:25

Weil du 2 Zeiger voneinander abziehst und keine Zeiten :lol:
Mein Fehler, versuch es lieber mal mit getTime

[EDIT:]

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
    while(device->run()) 
    { 
        fTime1=device->getTimer()->getTime(); 
        driver->beginScene(true, true, SColor(255,0,0,140)); 
        smgr->drawAll(); 
        guienv->drawAll(); 
        driver->endScene(); 
        vector3df CamTarget = Kamera->getTarget(); 
        vector3df CamPos    = Kamera->getPosition(); 
        vector3df CamDir    = CamPos - CamTarget; 
        vector3df Change    = Move * (500.0f * fTime); 
        Move.X                = 0; 
        Move.Z                = 0; 
        CamTarget            = CamTarget + Change * 0.2f; 

        CamPos.X = CamTarget.X + CamDir.X; 
        CamPos.Z = CamTarget.Z + CamDir.Z; 


        Kamera->setPosition(CamPos); 
        Kamera->setTarget(CamTarget); 
        Kamera->updateAbsolutePosition(); 
        fTime2 = device->getTimer()->getTime(); 
        fTime = (float)(fTime2 - fTime1)/ 1000.0f; 
    
    }
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Fred

Supermoderator

Beiträge: 2 121

Beruf: Softwareentwickler

  • Private Nachricht senden

30

15.02.2007, 16:48

Das gibt es doch nicht! Das klappt auch nicht!
Besondere Includes etc. braucht man nicht?
Irgendwas was ich noch häte beachten müssen?

Das kann doch gar nicht sein

Werbeanzeige