首页 > 解决方案 > SDL 从一个类渲染矩形

问题描述

我试图在一个类中渲染一个 SDL_Rect,我将渲染器发送到我的类的“绘制”函数,然后从那里渲染它。

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

当我将相同的代码放在我的主循环上时。一切都很好,但是当我从我的托盘类中执行此操作时,它会编译,但不会运行。

简化代码:

主文件

#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;
}

编辑器.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

编辑器.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;
}

托盘.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

托盘.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;
}

谢谢您的帮助。

标签: c++sdl-2

解决方案


推荐阅读