【问题标题】:SDL drawing program is FreezingSDL 绘图程序正在冻结
【发布时间】:2015-07-31 06:28:11
【问题描述】:

我不知道为什么我的程序在画完第六个正方形后就卡住了。这令人沮丧。我的意思是它只是一遍又一遍的相同代码,为什么它可以执行前 6 次而不是第 7 次? :/

这是我的代码:

#include<iostream>
#include<stdlib.h>
#include<time.h>
#include<conio.h>
#include<SDL.h>
using namespace std;

int main (int ,char**)
{
    SDL_Init(SDL_INIT_EVERYTHING);
    int ProcN=0;
    int PageN;
    int TProc=0;
    int TPage;
    int FrameN=0;
    srand(time(NULL));
    SDL_Surface *screen;
    screen=SDL_SetVideoMode(860,540,32,SDL_SWSURFACE);

    Uint32 white=SDL_MapRGB(screen->format,0xff,0xff,0xff);
    Uint32 green=SDL_MapRGB(screen->format,0x22,0xff,0x22);
    Uint32 yellow=SDL_MapRGB(screen->format,0xff,0xbb,0x11);

    bool isrunning=true;
    const int fps=40;
    Uint32 start;
    Uint8 *keys = SDL_GetKeyState(NULL);

    SDL_FillRect(screen,&screen->clip_rect,white);  
    SDL_Rect rect[20];
    int ff=0;
    for(int i=0;i<4;i++)
    {
        for(int k=0;k<5;k++)
        {
            rect[ff].x=100+(k)*100+(k)*10;
            rect[ff].y=100+(i)*10+(i)*100;
            rect[ff].w=100;
            rect[ff].h=100;
            SDL_FillRect(screen,&rect[ff],yellow);

            printf("%d\t%d\t%d\n",ff,rect[ff].x,rect[ff].y);
            ff++;
            SDL_Flip(screen);
            SDL_Delay(1000);
        } 
    }

    SDL_Flip(screen);
}

【问题讨论】:

  • 和其他代码中的一些东西(我没有包括)当我试图重新着色一个乡绅时,它有时会改变整个屏幕的颜色或只是冻结并给出一个错误消息堆栈变量 rect 已损坏

标签: c++ graphics sdl sdl-1.2


【解决方案1】:

这是因为您不处理 SDL 事件。 SDL 级别很低,需要手动完成。通常,您希望在绘图循环所在的位置足够频繁地处理它们,以便您可以移动窗口并接收键盘和鼠标事件。 要修复您的代码,请将SDL_Delay(1000); 行替换为:

int cnt = 0;
while(++cnt < 1000)
{
    SDL_Event event;
    SDL_PollEvent( &event );
    SDL_Delay(1);
}

【讨论】:

  • 你确实帮助了thanx,但为什么只在第7次迭代时迷恋
  • GUI 从一开始就被冻结(尝试移动或关闭 GUI 窗口),您会注意到大约是第 7 次迭代。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
相关资源
最近更新 更多