- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在调用 SDL_RenderCopy,它被调用并正常返回,但没有向窗口绘制任何内容。编辑以使问题和代码更清晰。我在想我可能会尝试使用超出其范围的东西,因此无法调用它,但这不会产生任何错误,所以我不确定。这是我引用的简单图片https://commons.wikimedia.org/wiki/Category:PNG_chess_pieces/Standard_transparent#/media/File:Chess_kdt60.png
#include <SDL2/SDL.h>
#include <SDL2/SDL_image.h>
// Recreation of the problem. Doesnt draw anything onto the white screen.
class King{
public:
King(SDL_Renderer *renderer){
SDL_Surface *Piece;
Piece = IMG_Load("Pieces/BK.png"); // I'll attach the picture
king = SDL_CreateTextureFromSurface(renderer, Piece);
SDL_FreeSurface(Piece);
kingRect.h = 100;
kingRect.w = 100;
}
~King(){}
void render(SDL_Renderer *renderer){
SDL_RenderCopy(renderer, king, NULL, &kingRect); // 99% sure the problem is this
}
private:
SDL_Texture *king;
SDL_Rect kingRect;
};
class Game {
public:
Game(const char *title, int sidelength){
isRunning = true;
if(SDL_Init(SDL_INIT_EVERYTHING) != 0) isRunning = false;
window = SDL_CreateWindow(title, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, sidelength, sidelength, SDL_WINDOW_OPENGL);
if(window == NULL) isRunning = false;
renderer = SDL_CreateRenderer(window, -1, 0);
if(!renderer) isRunning = false;
SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);
}
~Game(){}
void handleEvents(){
//Handles Events. I know this works.
}
}
void update(){};
void render(){
SDL_RenderClear(renderer);
BK.render(renderer);
SDL_RenderPresent(renderer);
}
void clean(){
//Cleans up after. I know this works.
SDL_DestroyWindow(window);
SDL_DestroyRenderer(renderer);
SDL_Quit();
}
bool running(){return(isRunning);}
King BK{renderer};
private:
bool isRunning{true};
SDL_Window *window;
SDL_Renderer *renderer;
};
Game *game = nullptr;
int main(int argc, const char *argv[]){
game = new Game("Testing Window", 800);
while(game->running()){
game->handleEvents();
game->update();
game->render();
}
game->clean();
return(0);
}
最佳答案
King BK{renderer};
字段在您的 Game::Game
完成之前初始化并有机会分配渲染器,因此它得到 NULL
代替。 NULL
不是有效的渲染器,无法创建纹理。如果您检查错误,您会收到 Invalid renderer
消息。启用警告的体面编译器也会告诉类似 warning: 'Game::renderer' is used uninitialized in this function [-Wuninitialized]
;考虑在编译器中启用更好的警告级别。
第二件事是您从未使用您打算加载的所需图像格式调用 IMG_Init
。
第三件事是代码格式错误,如果不修改就无法编译。我建议测试您发布为 MCCVE 的代码是否仍然可编译并重现您的问题(正如 MCCVE 暗示的那样)。
关于c++ - SDL_RenderCopy 没有做任何事情,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53384197/
我很确定这一点也不意外,我可能误解了一些东西。我正在尝试调用其中一个重载的构造函数: SDL_RenderCopy(SDL_Renderer*, SDL_Texture*, SDL_Rect*, SD
我在互联网和这里搜索过,只找到了 1 个很好的帖子 SDL_RenderCopy with an array of Rectangles 。 (据我所知)没有答案,但我的问题与那里相同。有什么办法可以
我正在调用 SDL_RenderCopy,它被调用并正常返回,但没有向窗口绘制任何内容。编辑以使问题和代码更清晰。我在想我可能会尝试使用超出其范围的东西,因此无法调用它,但这不会产生任何错误,所以我不
我是 C++ 的新手,我正在使用 SDL 2.0 学习它。尝试使用我的 Sprite 类绘制 Sprite 时遇到以下错误: 在 SDDDDL2.exe 中的 0x000000006C793659 (
这是我的 .cpp 文件: #include #include #include bool runningOnEmpty = false; const char* title; int x
这让我很难过.. 我有一个非常简单的 SDL2 程序。 它有一个包含 3 个 SDL_Texture 指针的数组。 这些纹理填充如下: SDL_Texture *myarray[15]; SDL_Su
我正在使用 SDL2 编写光线转换游戏。绘制地板时,我需要按像素调用 SDL_RenderCopy。这会导致帧率下降到 10 fps 以下的瓶颈。我正在寻找性能提升,但似乎找不到。 以下是性能下降的粗
我正在使用 SDL2 编写光线转换游戏。绘制地板时,我需要按像素调用 SDL_RenderCopy。这会导致帧率下降到 10 fps 以下的瓶颈。我正在寻找性能提升,但似乎找不到。 以下是性能下降的粗
我是一名优秀的程序员,十分优秀!