Toon posts:

[C++] 3D vector positie kopieren

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo,

Momenteel ben ik bezig met het onwikkelen van een 3d spel. Alles verliep prima totdat er een gedeelte geprogrammeerd moest worden dat de 'tegenstander' moet verdwijnen als een 'missile' hem raakt. Om dit te laten werken moet ik de positie van de tegenstander en de missile vergelijken.

Het probleem is: dat de vector van de tegenstander en de vector van de missile zijn gedeclareerd en worden bijgehouden in 2 verschillende classen. Ik heb nu geprobeerd om met behulp van een functie de vector door te sturen. Het lezen lukt wel, maar zodra ik het in een 3dvector wil zetten krijg ik het volgende bericht: error

Oponents.cpp:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void Oponents::updateFrames(int numberOfFrames, LPDIRECT3DDEVICE9 device)
{
    for (int i = 0 ; i < numberOfFrames; i++)
    {   
        //move the oponents
        if (oponX > 26.5f || oponX < -11 ) {direction = direction * (-1);}
        oponX += direction;
    }
    oponent->setPosition(D3DXVECTOR3(oponX,oponY,oponZ));
    oponent->render(device);

    ammo->getPosition(oponX,oponY,oponZ); // <<------

}


Ammo.h
C++:
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
#pragma once
#include <d3d9.h>
#include <d3dx9tex.h>

class Model;
class InputManager;
class Oponents;


class Ammo
{
public:
    Ammo();
    ~Ammo();

    bool init(InputManager* input,LPDIRECT3DDEVICE9 device);
    void updateFrames(int numberOfFrames,LPDIRECT3DDEVICE9 device);
    void getPosition(float x, float y, float z);  //<<-----
    int launched;

    float oponX;
    float oponY;
    float oponZ;

private:
    Model* missile1;
    Model* missile2;
    Model* missile3;
    Model* missile4;
    Model* missileIcon1;
    Model* missileIcon2;
    Model* missileIcon3;

    D3DXVECTOR3 position1;
    D3DXVECTOR3 position2;
    D3DXVECTOR3 position3;
    D3DXVECTOR3 positionShip;
    D3DXVECTOR3 positionOpon;
    D3DXVECTOR3 positionTest;    //<<-----

    InputManager* MyInput;
    Oponents* opon;
};


Ammo.ccp
C++:
1
2
3
void Ammo::getPosition(float x, float y, float z) {
positionTest = D3DXVECTOR3(x,y,z);  
}



De onderstaande code werkt wel. Maar daar heb ik niets aan. Als ik deze floats in de vector probeer te zetten krijg ik hetzelfde resultaat.
C++:
1
2
3
4
5
void Ammo::getPosition(float x, float y, float z) {
float posX = x;
float posY = y;
float posZ = z;
}


Zou iemand mij uit de brand kunnen helpen door te vertellen hoe ik dit aan de praat krijg?

Mvr.

Verwijderd

Wanneer je een foutmelding krijgt over het schrijven naar 0xcdcdcdcd betekent dit dat je gebruikt probeert te maken van nog niet geinitialiseerd geheugen.

C++:
1
ammo->getPosition(oponX,oponY,oponZ); // <<------

Waarschrijnlijk dat het ammo object dat je hier gebruikt nog niet is aangemaakt. Je zult dus ergens
C++:
1
ammo = new Ammo;


toe moeten voegen.

Verwijderd

Topicstarter
Reuze bedankt!

Ik zou dat nooit zelf hebben gevonden.

  • H!GHGuY
  • Registratie: December 2002
  • Niet online

H!GHGuY

Try and take over the world...

Je hebt een groot probleem in je klassenmodel voor zover ik weet.

Je moet je eens afvragen wat Ammo is en wat zijn eigenschappen zijn.

Beter zou het ook zijn als je interactie tussen objecten overlaat aan een gespecialiseerd stuk code.
De normale flow in een game is namelijk:
- lees invoer
- bereken alle posities, interacties,...
- teken de nieuwe situatie op het scherm, vul de buffers aan voor het geluid etc etc

Ik zie je zo code schrijven waarin elk ammo object elk oPPonent overloopt om te kijken of er geen collision is. Ik zie ook dat je nooit andere Ammo zal kunnen hebben dan missiles(kan zijn natuurlijk).
Ik zie publieke members in klassen. Ik zie een Ammo object invoer afhandelen ??

Zoals altijd: bezint eer ge begint.
Maak een goed design welke een beetje toekomstgericht is en dan ben je al meer dan halfweg.

ASSUME makes an ASS out of U and ME


Verwijderd

Topicstarter
Bedankt voor de tips, ik zal het zeker proberen.

  • MisterData
  • Registratie: September 2001
  • Laatst online: 11-02 08:33
Als je met 'Oponent' het engelse woord voor tegenstander bedoelt: dat is met twee P's: Opponents ;)

Verwijderd

Topicstarter
hehe, thx. Dat is makkelijk te fixen :)

Verwijderd

Topicstarter
HIGHGuY schreef op vrijdag 25 augustus 2006 @ 19:04:

Ik zie publieke members in klassen. Ik zie een Ammo object invoer afhandelen ??
Ja, dat is gedaan omdat het me niet lukte om de missiles te laten starten op de positie van het schip. Nudat ik weet hoe het zit kan ik dat laten vervallen. Maar hoe dan ook...ik zie nu in dat ik later mezelf tegen zal komen op het gebied van het structuur van de classen.
Daarom ben ik nu bezig met het herschrijven van het spel.

Nogmaals bedankt :)
Pagina: 1