首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SDL,我如何使背景图片渲染?

SDL,我如何使背景图片渲染?
EN

Stack Overflow用户
提问于 2014-06-26 04:24:21
回答 1查看 7.5K关注 0票数 0

我有渲染问题,但我解决了。问题是,这张照片实际上不会出现。我知道图片会被加载,因为我有一个错误处理程序,如果没有加载它。我知道代码是乱七八糟的,但我只是需要图片来显示出来。

代码语言:javascript
复制
#include <SDL/SDL.h>
#include <stdio.h>
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

const int fps = 60;

SDL_Window *window;


int main(int argc, char **argv)
{
    SDL_Init(SDL_INIT_EVERYTHING);
    window = SDL_CreateWindow("", 300, 100, 1024, 800, SDL_WINDOW_OPENGL);

    if (window == NULL)
    {
        cout << ("could not create window: %s/n", SDL_GetError());
        return 1;
    }
    SDL_Renderer *renderer = SDL_CreateRenderer(window, -1, 0);
    int x = 0, y = 0;
    SDL_Surface  *screen;
    SDL_Surface *background = SDL_LoadBMP("hockeyrink.bmp");
    if(background == NULL)
    {
        SDL_ShowSimpleMessageBox(0, "Background init error",         SDL_GetError(), window);
    }

    if(renderer == NULL)
    {
        SDL_ShowSimpleMessageBox(0, "Renderer init error", SDL_GetError(), window);
    }
    SDL_Texture *texture = SDL_CreateTextureFromSurface(renderer,background);
    if(texture == NULL)
    {
        SDL_ShowSimpleMessageBox(0, "Texture init error", SDL_GetError(), window);
    }

    const int speed = 5;
    SDL_Rect camera;
    camera.x = 0; //Don't worry about this camera, I need this after i get the background working.
    camera.y = 0;
    camera.w = 800;
    camera.h = 600;
    bool b[2] = {0,0};
    Uint32 start;

    bool running = true;
    while (running)
    {
        start = SDL_GetTicks();
        SDL_Event event;

        while(SDL_PollEvent(&event))
        {
            switch(event.type)
            {
            case SDL_QUIT:
                running = false;
                SDL_DestroyTexture(texture);
                SDL_FreeSurface(background);
                SDL_DestroyRenderer(renderer);
                SDL_DestroyWindow(window);
                SDL_Quit();
                break;
            case SDL_KEYDOWN:
                switch(event.key.keysym.sym)
                {
                case SDLK_UP:
                    b[0]=1;
                    break;
                case SDLK_LEFT:
                    b[1]=1;
                    break;
                }
                break;
            case SDL_KEYUP:
                switch(event.key.keysym.sym)
                {
                case SDLK_UP:
                    b[0]=0;
                    break;
                case SDLK_LEFT:
                    b[1]=0;
                    break;
                }
                break;
            }
        }

        if(b[0])
        {
            x+=speed;
            camera.y+=speed;
            if (camera.y > 3000-800)
            {
                camera.y=0;
            }

        }
        else if(b[1])
        {
            x-=speed;
            camera.y-=speed;

            if (camera.y <= 0)
            {
                camera.y = 2000-800;
            }


            SDL_RenderCopy(renderer, texture, NULL, NULL);
            SDL_RenderPresent(renderer);
        }
        if(1000/fps>SDL_GetTicks()-start)
        {
            SDL_Delay(1000/fps-(SDL_GetTicks() - start));
        }
    }

    return 0;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-26 05:21:35

您已经将b[1]初始化为0,并且只有当b[1]1时才呈现纹理,就像在代码中一样。

你要么把台词:

代码语言:javascript
复制
SDL_RenderCopy(renderer, texture, NULL, NULL);
 SDL_RenderPresent(renderer);

在循环之前,

或按键盘左键(即SDLK_LEFT)

在屏幕上呈现和呈现图像。

它在我的系统中工作,所以它也应该在你的系统中工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24422358

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档