Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ SDL图像在15秒后消失_C++_Visual Studio_Sdl - Fatal编程技术网

C++ SDL图像在15秒后消失

C++ SDL图像在15秒后消失,c++,visual-studio,sdl,C++,Visual Studio,Sdl,我正在学习SDL,我有一个令人沮丧的问题。代码如下 即使有一个循环使程序保持活动状态,但当我加载图像并将源矩形的x值更改为动画时,加载的图像在15秒后消失。静态图像不会发生这种情况。只有动画。我肯定有一件简单的事情我错过了,但我看不见 void update(){ rect1.x = 62 * int ( (SDL_GetTicks() / 100) % 12); /* 62 is the width of a frame, 12 is the number of frames

我正在学习SDL,我有一个令人沮丧的问题。代码如下

即使有一个循环使程序保持活动状态,但当我加载图像并将源矩形的x值更改为动画时,加载的图像在15秒后消失。静态图像不会发生这种情况。只有动画。我肯定有一件简单的事情我错过了,但我看不见

void update(){
    rect1.x = 62 * int ( (SDL_GetTicks() / 100) % 12); 
    /* 62 is the width of a frame, 12 is the number of frames */
}

void shark(){

    surface = IMG_Load("s1.png");
    if (surface != 0){
        texture = SDL_CreateTextureFromSurface(renderer,surface);
            SDL_FreeSurface(surface);
    }

    rect1.y = 0;

    rect1.h = 90;
    rect1.w = 60;

    rect2.x = 0;
    rect2.y = 0;

    rect2.h = rect1.h+30; // enlarging the image
    rect2.w = rect1.w+30;

    SDL_RenderCopy(renderer,texture,&rect1,&rect2);
}

void render(){
    SDL_SetRenderDrawColor(renderer, 0, 0, 100, 150);
    SDL_RenderPresent(renderer);
    SDL_RenderClear(renderer);
}
大体上

   update();
   shark();
   render();
包含SDL_图像头,已链接,存在dll。可能是dll坏了吗

为了保持简单,我省略了程序的其余部分。如果这还不够的话,我可以发布整个内容。

这行int((SDL_GetTicks()/100)%12)

SDL_GetTicks()返回自库初始化()以来经过的毫秒数。因此,您使用的是自应用程序启动以来的总时间,而不是自上一帧以来的时间

您应该记录上次更新的次数,并根据上次更新后经过的时间更新应用程序

Uint32 currentTime=SDL_GetTicks();
int deltaTime = (int)( currentTime-lastTime );
lastTime=currentTime; //declared previously

update( deltaTime );
shark();
render();
编辑:Benjamin是对的,更新行工作正常。 仍然使用deltaTime是一个很好的建议。例如,在游戏中,您不会使用自应用程序开始以来的总时间,您可能需要保留自己的计数器,以指示已过的时间(自启动动画以来)

但是无论如何,你的程序的那一行没有什么问题。

这一行int((SDL_GetTicks()/100)%12)

SDL_GetTicks()返回自库初始化()以来经过的毫秒数。因此,您使用的是自应用程序启动以来的总时间,而不是自上一帧以来的时间

您应该记录上次更新的次数,并根据上次更新后经过的时间更新应用程序

Uint32 currentTime=SDL_GetTicks();
int deltaTime = (int)( currentTime-lastTime );
lastTime=currentTime; //declared previously

update( deltaTime );
shark();
render();
编辑:Benjamin是对的,更新行工作正常。 仍然使用deltaTime是一个很好的建议。例如,在游戏中,您不会使用自应用程序开始以来的总时间,您可能需要保留自己的计数器,以指示已过的时间(自启动动画以来)

但是无论如何,你的程序的那一行没有什么问题。

这一行int((SDL_GetTicks()/100)%12)

SDL_GetTicks()返回自库初始化()以来经过的毫秒数。因此,您使用的是自应用程序启动以来的总时间,而不是自上一帧以来的时间

您应该记录上次更新的次数,并根据上次更新后经过的时间更新应用程序

Uint32 currentTime=SDL_GetTicks();
int deltaTime = (int)( currentTime-lastTime );
lastTime=currentTime; //declared previously

update( deltaTime );
shark();
render();
编辑:Benjamin是对的,更新行工作正常。 仍然使用deltaTime是一个很好的建议。例如,在游戏中,您不会使用自应用程序开始以来的总时间,您可能需要保留自己的计数器,以指示已过的时间(自启动动画以来)

但是无论如何,你的程序的那一行没有什么问题。

这一行int((SDL_GetTicks()/100)%12)

SDL_GetTicks()返回自库初始化()以来经过的毫秒数。因此,您使用的是自应用程序启动以来的总时间,而不是自上一帧以来的时间

您应该记录上次更新的次数,并根据上次更新后经过的时间更新应用程序

Uint32 currentTime=SDL_GetTicks();
int deltaTime = (int)( currentTime-lastTime );
lastTime=currentTime; //declared previously

update( deltaTime );
shark();
render();
编辑:Benjamin是对的,更新行工作正常。 仍然使用deltaTime是一个很好的建议。例如,在游戏中,您不会使用自应用程序开始以来的总时间,您可能需要保留自己的计数器,以指示已过的时间(自启动动画以来)


但是你的程序的那一行无论如何都没有问题。

每次调用
shark
函数时,它都会加载纹理的另一个副本。有了这样的循环,视频内存很快就会用完(除非在每一帧之后调用
SDL\u destronTexture
,而您没有指出这一点)。此时,您将无法再加载纹理。显然,这需要你15秒左右的时间


如果要反复使用同一图像,只需在主循环之前加载一次即可。

每次调用
shark
函数时,它都会加载纹理的另一个副本。有了这样的循环,视频内存很快就会用完(除非在每一帧之后调用
SDL\u destronTexture
,而您没有指出这一点)。此时,您将无法再加载纹理。显然,这需要你15秒左右的时间


如果要反复使用同一图像,只需在主循环之前加载一次即可。

每次调用
shark
函数时,它都会加载纹理的另一个副本。有了这样的循环,视频内存很快就会用完(除非在每一帧之后调用
SDL\u destronTexture
,而您没有指出这一点)。此时,您将无法再加载纹理。显然,这需要你15秒左右的时间


如果要反复使用同一图像,只需在主循环之前加载一次即可。

每次调用
shark
函数时,它都会加载纹理的另一个副本。有了这样的循环,视频内存很快就会用完(除非在每一帧之后调用
SDL\u destronTexture
,而您没有指出这一点)。此时,您将无法再加载纹理。显然,这需要你15秒左右的时间


如果要反复使用同一图像,只需在主循环之前加载一次即可。

至少显示整个循环。至少显示整个循环。至少显示整个循环。至少显示整个循环。至少显示整个循环。我明白你的意思,但奇怪的是,它在固定时间后停止工作。查看Benjamin的ans