首页 > 解决方案 > Switch中使用devkit pro的简单SDL2 c ++程序无法在模拟器中启动

问题描述

大家好,我是切换 Homebrew 开发的新手。我从 Switch Homebrew 的 SDL2 开始。我已经下载并安装了 devout pro。并打开graphics sdl2-simple example c++ program并编译。它编译成功并生成一个 .nro 文件。然后我将它放到 Yuzu 模拟器中,它与 Joy con 输入一起按预期工作。但现在我需要使该程序更简单,以便它在模拟器中启动时更改 SDL 窗口的背景颜色。我通过删除不必要的方法(以特定模式绘制矩形的用户定义方法)修改了示例代码,因为我的代码不需要它。然后我编译它编译成功并生成一个 .nro 文件。而且我使用原始 sdl2-simple 示例中的相同 Make 文件,因为我不知道如何创建 MakeFile。但是当我将它拖放到柚子模拟器中时,它会卡在启动进度条上。如何修改我的代码,以便在启动时更改窗口颜色。代码在启动时更简单,它应该将窗口颜色设置为白色。这是我的代码。它完全编译成功并生成 .nro 文件。但是当我把它放在 Yuzu 中时,它卡在启动进度条屏幕上。我不知道我哪里错了

#include <stdlib.h>
#include <stdio.h>
#include<iostream>
#include <SDL.h>
#include<SDL2/SDL.h>

int main(int argc, char *argv[])
{
   
    SDL_Init(SDL_INIT_EVERYTHING);

    SDL_Window* Window = NULL;

    Window = SDL_CreateWindow("demo",SDL_WINDOWPOS_CENTERED,SDL_WINDOWPOS_CENTERED,800,450,SDL_WINDOW_SHOWN | SDL_WINDOW_OPENGL);

    if(Window == NULL)
    {
        std::cout<<"Error in window initialization\n"<<SDL_GetError()<<"\n";
        return -1;
    }

    for (int i = 0; i < 2; i++) {
        if (SDL_JoystickOpen(i) == NULL) {
            SDL_Log("SDL_JoystickOpen: %s\n", SDL_GetError());
            SDL_Quit();
            return -1;
        }
    }
 
   SDL_Surface* Screen = SDL_GetWindowSurface(Window);
   
    bool running = true;
    SDL_Event event;
   Uint32 white = SDL_MapRGB(Screen->format,255,255,255);
   
   SDL_FillRect(Screen,NULL,white);

   SDL_UpdateWindowSurface(Window);

    while (running)
    {
        while (SDL_PollEvent(&event))
        {
            if(event.type == SDL_QUIT)
            {
                running = false;
                break;
            }
       
        }
    }
   
    SDL_DestroyWindow(Window);
    SDL_Quit();

    return 0;
}

汇编

卡在模拟器里

标签: c++homebrewsdlsdl-2devkitpro

解决方案


推荐阅读