SDL отрисовывает прямоугольник из класса - PullRequest
0 голосов
/ 06 мая 2018

Я пытаюсь визуализировать SDL_Rect в классе, я отправляю средство визуализации в функцию «draw» моего класса, а затем отрисовываю его оттуда.

void Tray::draw(SDL_Renderer *renderer){
  SDL_RenderFillRect(renderer, &bckRect);
}

Когда я помещаю тот же код в свой основной цикл. Все идет хорошо, но когда я делаю это из моего класса в трее, он компилируется, но не запускается.

Упрощенный код:

main.cpp

#include <iostream>
#include <SDL2/SDL.h>

// local includes
#include "editor.h"

using namespace std;

int main(int argc, const char * argv[]) {

  Editor *editor = new Editor();

  while (editor->running){
    editor->render();
  }

  editor->clean();

  return 0;
}

editor.h

#ifndef EDITOR_H
#define EDITOR_H

#include <iostream>
#include <SDL2/SDL.h>

#include "Gui-classes/tray.h"
#include "properties.h"

class Editor{
private:
  // Window variables
  SDL_Window *window;
  SDL_Renderer *renderer;
  Tray *tray;
public:
  Editor();
  ~Editor();
  void render();
};

#endif

editor.cpp

#include "editor.h"

Editor::Editor(){

  props = new Properties();

  if (SDL_Init(SDL_INIT_EVERYTHING) == 0) {
    window = SDL_CreateWindow("Great Editor", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 1000, 600, SDL_WINDOW_RESIZABLE);

    running = true;

    if (window) {
      std::cout << "Window created!" << std::endl;
    }

    renderer = SDL_CreateRenderer(window, -1, 0);

  }
}
void Editor::render(){
  SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);
  SDL_RenderClear(renderer);

  SDL_SetRenderDrawColor(renderer, 12, 12, 55, 255);
  tray->draw(renderer);

  SDL_RenderPresent(renderer);
}
void Editor::clean(){
  SDL_DestroyWindow(window);
  SDL_DestroyRenderer(renderer);
  SDL_Quit();
  std::cout << "Window ended" << std::endl;
}

tray.h

#ifndef TRAY_H
#define TRAY_H

#include <iostream>
#include <SDL2/SDL.h>

class Tray{
private:
  //  Position variables
  int x;
  int y;
  int w;
  int h;

  //Display variables
  SDL_Color color;
  SDL_Rect bckRect;  
public:
  Tray();
  ~Tray();
  void draw(SDL_Renderer *renderer);
};

#endif

Tray.cpp

#include "tray.h"

Tray::Tray(){
  bckRect.x = x;
  bckRect.x = y;
  bckRect.w = w;
  bckRect.h = h;
}

Tray::~Tray(){

}
void Tray::draw(SDL_Renderer *renderer){
  SDL_RenderFillRect(renderer, &bckRect);
  //std::cout << "teeest" << std::endl;
}

Спасибо за помощь.

...