- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 C++ 和 SDL 制作游戏,该游戏是太空入侵者类型的游戏。一切都很顺利,直到我在 while 循环中添加了背景图像,这是背景的渲染和初始化代码:
SZ_Background.cpp:
void SZ_Background::Init(SDL_Renderer* pRenderer)
{
int w, h;
SDL_GetRendererOutputSize(pRenderer, &w, &h);
bg_img.x = 0;
bg_img.y = 0;
bg_img.h = h;
bg_img.w = w;
SDL_Surface* background_img = IMG_Load("content/bg_img.bmp");
SDL_Texture* background_img_tex = SDL_CreateTextureFromSurface(pRenderer, background_img);
SDL_RenderCopy(pRenderer, background_img_tex, NULL, &bg_img);
}
void SZ_Background::Render(SDL_Renderer* pRenderer)
{
int w, h;
SDL_GetRendererOutputSize(pRenderer, &w, &h);
bg_img.x = 0;
bg_img.y = 0;
bg_img.h = h;
bg_img.w = w;
SDL_Surface* background_img = IMG_Load("content/bg_img.bmp");
SDL_Texture* background_img_tex = SDL_CreateTextureFromSurface(pRenderer, background_img);
SDL_RenderCopy(pRenderer, background_img_tex, NULL, &bg_img);
}
main.cpp - 循环:
if (GameState == 3)
{
printf("INFO: Game State: %d - Game Screen Loaded\n", GameState);
mainEnemies.gameover = false;
mainBG.Init(game_renderer);
gOver.Init(game_renderer);
while (!done)
{
aTimer.resetTicksTimer();
SDL_SetRenderDrawColor(game_renderer, 0, 0, 20, SDL_ALPHA_OPAQUE);
SDL_RenderClear(game_renderer);
mainBG.Render(game_renderer);
gOver.Update(game_renderer);
gOver.Input();
gOver.Render(game_renderer);
SDL_RenderPresent(game_renderer);
if (gOver.rMenu == true)
{
SDL_RenderClear(game_renderer);
SDL_RenderPresent(game_renderer);
GameState = 0;
break;
}
if (aTimer.getTicks() < DELTA_TIME)
{
SDL_Delay(DELTA_TIME - aTimer.getTicks());
}
}
}
mainBG为背景
最佳答案
问题是您每次调用 SZ_Background::Render
时都在初始化 background_img
和 background_img_tex
:
SDL_Surface* background_img = IMG_Load("content/bg_img.bmp");
SDL_Texture* background_img_tex = SDL_CreateTextureFromSurface(pRenderer,background_img);
这不是必需的,您已经在 SZ_Background::Init
中初始化了它们,这就是您需要做的全部。现在的情况,它不仅可能通过每帧从磁盘加载背景来减慢程序速度,而且每次都会泄漏内存(主要是 SDL_Surface
的 RAM,以及 SDL_Texture 的 GPU 内存).在 Render
中删除那些 IMG_Load
和 SDL_CreateTextureFromSurface
调用,它应该会更好。
关于c++ - While 循环导致 SDL_Rect 和 SDL_Textures 滞后?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53727069/
我正在使用 C 和 SDL 创建康威生命游戏的模拟。为了表示事件的细胞,我想在我创建的窗口中创建多个矩形。有没有办法在 for 循环中调用 SDL_Rect 而无需重新定义 SDL_Rect 并在同一
我一直在试用 SDL 2,但遇到了 SDL_Rect does not name a type 错误...代码: #include #include using namespace std; SD
我有一个用于在我的 2D 引擎中定义特征图形的结构。在那里,有一系列 SDL_Rects 称为“middle, left_edge, top_left_corner”等。在我的部分代码中,我将它们从一
我一直在关注 LazyFoo 的 SDL tutorials (并且还添加了我自己的组织和编码风格)。当我到达他的animation tutorial我决定做一个单独的类来存储与动画算法相关的变量和方
我正在尝试通过类为 SDL 中的文本创建一个简单的er 容器。该类应该包含指向 SDL_Texture 和 SDL_Rect 的指针以及一些从类的实例中获取信息的方法。当我尝试使用以下函数将纹理 bl
我试图创建一个类,其中包含我的游戏 SHIP 的信息(目前的图像和位置),一切都按我预期的那样编译,但是如果我使用我在我的船中创建的 SDL_Rect 变量作为 SDL_blitsurface 中的参
我有一个带有几个继承者的抽象基类,我创建了一个指向继承者的抽象基类指针数组: 抽象基类: class Tile { public: bool isPa
我正在尝试将 SDL_Rect 传递给 SDL_RenderCopy,它采用 SDL_Rect 的地址。我有 SDL_Rect 我正在尝试传递存储在 Shot.h 文件中的我的私有(private)类
当我将以下内容声明为我的主类“App”的私有(private)数据成员时,我的程序在启动时崩溃,就好像它正在访问无效数据/内存一样(编辑:如果它是公共(public)数据成员,它不会崩溃): //Di
我需要在sdl窗口上定义矩形区域,以便当在特定区域上单击鼠标按钮时必须执行某些操作。 我使用GetMouseState(x,y)来获取鼠标单击事件。只要单击鼠标按钮,它就会起作用。但我需要获取鼠标 x
我在 SDL2 纪录片中找不到任何关于渲染透明矩形的内容。我想将 SDL_Rect 渲染为透明纹理/表面/任何用作“ war 迷雾”的东西。也许您知道从 SDL_Rect 制作表面或纹理或仅将其渲染为
我正在使用 C++ 和 SDL 制作游戏,该游戏是太空入侵者类型的游戏。一切都很顺利,直到我在 while 循环中添加了背景图像,这是背景的渲染和初始化代码: SZ_Background.cpp: v
我正处于游戏的开始阶段,我卡在了 Blit_Surface 这一步。我的 CodeBlocks 编译器在编译时说 -> 的无效类型参数(有 BrickStruct)”。它似乎想要一个指向我的二维数组的
int SDL_BlitSurface(SDL_Surface *src, SDL_Rect *srcrect, SDL_Surface *dst, SDL_Rect *dstrect); 为什么 s
我正在研究一些 SDL 的东西,但在尝试设置加载的 BMP 的位置时遇到了一些麻烦。 这是代码。 while(event.type != SDL_QUIT) //The game loop that
我正在使用适用于 C++ 的 SDL 库。 当我更改 x 和 y 值时,我可以让我的矩形四处移动,但不是以我期望的方式移动。 例如,它以较大的 y 坐标向下移动。 这是为什么? //Render re
#include "main.h" SDL_Surface* screen; //The screen Surface SDL_Surface* Snake_Body; //The snake sur
l SDL_BlitSurface(tileSheets.at(sheet), &clip[tile], screen, &tileBox); 工作得很好,我像这样初始化剪辑: clip[ 0 ].x
我是一名优秀的程序员,十分优秀!