Nieuws:

We zijn er weer.

Na lange tijd van afwezigheid zijn we er weer  :laugh:
We hebben alle wachtwoorden gereset, je oude wachtwoord werkt niet meer.Je moet via het "wachtwoord vergeten"-linkje je wachtwoord resetten. Je krijgt hiervoor een mailtje op het adres dat je bij ons geregistreerd hebt.

De komende tijd zijn we nog druk bezig om de rest van de site op te bouwen, dus het kan zijn dat sommige onderdelen (tijdelijk) niet werken.

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: C++ Return SDL_Rect vanuit class.  (gelezen 717 keer)

Offline JV.com

  • Lid
  • Steunpunt: Nee
C++ Return SDL_Rect vanuit class.
« Gepost op: 2010/06/12, 12:26:59 »
Hallo iedereen.

Ik ben bezig met een SDL project. Nu heb ik een probleempje met een een SDL_Rect. Ik heb namelijk deze Class:

#include <SDL/SDL.h>

class Ball
{
public:
static Ball* GetInstance();
void DeleteInstance();
int InitBall();
SDL_Surface* ReturnBallImage();
SDL_Rect ReturnBallPosition();
void MoveBall(int x,int y);
protected:
private:
SDL_Rect BallPosition;
SDL_Surface* Temp;
SDL_Surface* BallImage;
static Ball* Instance;
Ball();
~Ball(){};
};

En ik heb deze functie in de Ball Class om de SDL_Rect terug te geven:
SDL_Rect Ball::ReturnBallPosition()
{
return this->BallPosition;
}
En in deze functie wil ik graag de SDL_Rect gebruiken:
void Graphics::Draw()
{
this->ObjBall = Ball::GetInstance();
if(this->ObjBall->InitBall() == 0)
{
SDL_BlitSurface(this->ObjBall->ReturnBallImage(),NULL,this->SDLWindow,
this->ObjBall->ReturnBallPosition());
SDL_Flip(this->SDLWindow);
}
else
{
std::cout << "niet gelukt" << std::endl;
}
}

Nu heb ik een SDL tutorial gevolgd en die gaven me de volgende code voor het gebruiken van een SDL_Rect:

SDL_Rect position;
position.x = 0; //were just putting the picture in the top left corner
position.y = 0;// at position 0,0
And finally we place the image in the screens buffer surface and display it.
 
SDL_BlitSurface( compatible_image, NULL, screen, &position ); //put the image on the screen surface
 
SDL_Flip(screen);// send the screen surface to be displayed

Syntax van de Functie SDL_BlitSurface is:
int SDL_BlitSurface(SDL_Surface *src, SDL_Rect *srcrect, SDL_Surface *dst, SDL_Rect *dstrect);

Nu gaat het mij om de 4e parameter in deze functie:

Als ik het goed begrijp moet dit een verwijzing zijn naar het adres van een SDL_Rect. dus wordt er netjes in de code van de tutorial &position gebruikt. maar als ik mijn functie uitvoer krijg ik deze compiler Error:

Graphics.cpp: In member function ‘void Graphics::Draw()’:
Graphics.cpp:59: error: cannot convert ‘SDL_Rect’ to ‘SDL_Rect*’ for argument ‘4’ to ‘int SDL_UpperBlit(SDL_Surface*, SDL_Rect*, SDL_Surface*, SDL_Rect*)

Nu is mijn vraag hoe kan de functie  ReturnBallPosition mijn SDL_Rect laten returnen en laten verwijzen naar het adres van de SDL_Rect uit mijn classe Ball

Ik hoop dat mijn uitleg hierboven een beetje duidelijk genoeg is.

Alvast bedankt voor jullie hulp!.

JV.com
« Laatst bewerkt op: 2010/06/12, 12:28:30 door JV.com »

Offline muksie

  • Lid
  • Steunpunt: Nee
Re: C++ Return SDL_Rect vanuit class.
« Reactie #1 Gepost op: 2010/06/12, 13:54:20 »
Werkt dit niet gewoon:
SDL_BlitSurface( compatible_image, NULL, screen, &this->objBall->ReturnBallPosition() ); //put the image on the screen surface
Eventueel zou je ook je ReturnBallPosition kunnen aanpassen zodat deze meteen een pointer (adres) van de SDL_Rect returned. Iets als
SDL_Rect* Ball::ReturnBallPosition() {
    return &BallPosition;
}

Offline JV.com

  • Lid
  • Steunpunt: Nee
Re: C++ Return SDL_Rect vanuit class.
« Reactie #2 Gepost op: 2010/06/12, 14:19:28 »
Thanks je 2e implementatie werkt!

je 1e implementatie gaf de fout "point to temporary adres".

Thanks!


Offline SeySayux

  • Lid
    • SeySayux.net
  • Steunpunt: Nee
Re: C++ Return SDL_Rect vanuit class.
« Reactie #3 Gepost op: 2010/06/12, 19:13:45 »
Tenzij je een zéér goede reden hebt, zou een accessor altijd const T* of liever const T& moeten returnen.

- Sey
I use a Unix-based system, that means I'll get laid as often as I have to reboot.
LibSylph
SeySayux.net