Skip to main content
added 52 characters in body
Source Link
#pragma once

#include "SDL_image.h"
#include "Splav.h"

class Splav;

class Prikazi
{

private: 

    SDL_Window * ekran = NULL;
    SDL_Renderer *renderer;

    SDL_Texture *pozadina;
    SDL_Texture *splav;
    SDL_Texture *loptica;
    

    SDL_Rect rectPozadina;
    

public:

    Splav *sp ;

    const int sirinaEkrana = 1280, visinaEkrana = 720; //screen width and height
    const int sirinaSplavi = 200, visinaSplavi = 10; //paddle width and height
    
    Prikazi();
    ~Prikazi();

    void crtajPocetno();

    SDL_Rect initRect(int x, int y, int sirina, int visina);
};
#pragma once

#include "SDL_image.h"
#include "Splav.h"

class Splav;

class Prikazi
{

private: 

    SDL_Window * ekran = NULL;
    SDL_Renderer *renderer;

    SDL_Texture *pozadina;
    SDL_Texture *splav;
    SDL_Texture *loptica;
    

    SDL_Rect rectPozadina;
    

public:

    Splav *sp ;

    const int sirinaEkrana = 1280, visinaEkrana = 720;
    const int sirinaSplavi = 200, visinaSplavi = 10;
    
    Prikazi();
    ~Prikazi();

    void crtajPocetno();

    SDL_Rect initRect(int x, int y, int sirina, int visina);
};
#pragma once

#include "SDL_image.h"
#include "Splav.h"

class Splav;

class Prikazi
{

private: 

    SDL_Window * ekran = NULL;
    SDL_Renderer *renderer;

    SDL_Texture *pozadina;
    SDL_Texture *splav;
    SDL_Texture *loptica;
    

    SDL_Rect rectPozadina;
    

public:

    Splav *sp ;

    const int sirinaEkrana = 1280, visinaEkrana = 720; //screen width and height
    const int sirinaSplavi = 200, visinaSplavi = 10; //paddle width and height
    
    Prikazi();
    ~Prikazi();

    void crtajPocetno();

    SDL_Rect initRect(int x, int y, int sirina, int visina);
};
Source Link

Read access violation, pointer was nullprt

Im trying to figure out how to use pointers to make a single instance of an object that in this example will just change direction on x-axis.

Splav.h (eng. Paddle.h)

#pragma once
#include "SDL.h"
#include "Prikazi.h"

class Prikazi;

class Splav 
{
private:
    int splavTrenutniX = 0, splavTrenutniY = 0; //current x and y axis position of the paddle
    int splavPocetniX, splavPocetniY; //starting position of paddle
    
public:
    
    Prikazi *pr; //pointer to the Prikazi (eng. Draw) class
    
    SDL_Rect rectSplav; //Rect used to store texture of paddle
    
    Splav(); //default constructor, used to initialize paddle for 1st load or reset
    Splav(int trenutniX, int trenutniY); //overload constructor where current x and y points on axis become points on paddle movement

    void gibanjeSplavi(); //move the paddle


};

Splav.cpp (eng. Paddle.cpp)

#include "Splav.h"

Splav::Splav()
{
    splavPocetniX =pr->sirinaEkrana / 2; //sirinaEkrana = Screen width
    splavPocetniY = pr->visinaEkrana - pr->visinaSplavi; // screen height- paddle height

    rectSplav.x = splavPocetniX;
    rectSplav.y = splavPocetniY;
    rectSplav.w = pr->sirinaSplavi;
    rectSplav.h = pr->visinaSplavi;
}

Splav::Splav(int trenutniX, int trenutniY) 
{
    
    splavTrenutniX = trenutniX;
    splavTrenutniY = trenutniY;

    gibanjeSplavi();
}

void Splav::gibanjeSplavi() //when paddle starts to move
{
    const Uint8 *tipka = SDL_GetKeyboardState(NULL);

    if (tipka[SDL_SCANCODE_A] && rectSplav.x > 0)
        rectSplav.x--;

    if (tipka[SDL_SCANCODE_D] && rectSplav.x < 1280-pr->sirinaSplavi) //1280-200(paddle width)
        rectSplav.x++;
}

Prikazi.h (eng. Draw.h)

#pragma once

#include "SDL_image.h"
#include "Splav.h"

class Splav;

class Prikazi
{

private: 

    SDL_Window * ekran = NULL;
    SDL_Renderer *renderer;

    SDL_Texture *pozadina;
    SDL_Texture *splav;
    SDL_Texture *loptica;
    

    SDL_Rect rectPozadina;
    

public:

    Splav *sp ;

    const int sirinaEkrana = 1280, visinaEkrana = 720;
    const int sirinaSplavi = 200, visinaSplavi = 10;
    
    Prikazi();
    ~Prikazi();

    void crtajPocetno();

    SDL_Rect initRect(int x, int y, int sirina, int visina);
};

Prikazi.cpp (eng. Draw.cpp)

#include "Prikazi.h"


Prikazi::Prikazi()
{
    
    ekran = SDL_CreateWindow("Breakout", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, sirinaEkrana, visinaEkrana, SDL_WINDOW_SHOWN);
    renderer = SDL_CreateRenderer(ekran, -1, 0);
    pozadina= IMG_LoadTexture(renderer, "Assets/pozadina1.png");
    loptica = IMG_LoadTexture(renderer, "Assets/loptica.bmp");
    splav = IMG_LoadTexture(renderer, "Assets/splav.bmp");


    rectPozadina = initRect(0, 0, sirinaEkrana, visinaEkrana);

//this is where I get nullptr value
    sp->rectSplav = initRect(sp->rectSplav.x, sp->rectSplav.y, sirinaSplavi, visinaSplavi);
    
    crtajPocetno();
}


Prikazi::~Prikazi()
{
    //SDL_DestroyWindow(ekran);
}

void Prikazi::crtajPocetno()
{
    SDL_RenderClear(renderer);
    SDL_RenderCopy(renderer, pozadina, NULL, &rectPozadina);
    SDL_RenderCopy(renderer, splav, NULL, &(sp->rectSplav));

    SDL_SetRenderTarget(renderer, pozadina);
    SDL_SetRenderTarget(renderer, splav);

    SDL_SetRenderTarget(renderer, NULL);
    SDL_RenderPresent(renderer);

}

SDL_Rect Prikazi::initRect(int x, int y, int sirina, int visina)
{
    SDL_Rect r;
    r.x = x;
    r.y = y;
    r.w = sirina;
    r.h = visina;

    return r;
}

My question is: How to define that pointer so I can just use it to store Rect coordinates to my Prikazi class (eng. Draw) so It can use that info to render it on the screen? Same question goes to creating Prikazi pointer inside Splav.h ( so I can use constants for screen height, width etc. )