小编use*_*502的帖子

SDL_RENDERER_PRESENTVSYNC不一致显示

我最近决定使用SDL作为我的库之一来编写一个C++游戏.在我的程序编写和学习SDL的过程中,我偶然发现了程序中的一个特殊错误,并决定在SSCCE中复制它以确保我没有疯狂.

问题似乎是当我将SDL_RENDERER_PRESENTVSYNC作为标志传递给SDL_CreateRenderer时,我得到了不一致的渲染.为了比较,我运行程序50次,没有标志50次,并且在每种情况下对我的程序进行了唯一的更改.没有标志,显示器100%的工作时间.打开标志后,它只会在50次中成功渲染13次.

这是程序:

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

int main(int argc, char** argv)
{
    if(SDL_Init(SDL_INIT_VIDEO) != 0)
    {
        std::cerr << "Unable to initialize SDL: " << SDL_GetError() << std::endl;
        return -1;
    }
    SDL_Window* win = SDL_CreateWindow("Testing", 
                                       SDL_WINDOWPOS_UNDEFINED, 
                                       SDL_WINDOWPOS_UNDEFINED,
                                       640, 480, SDL_WINDOW_SHOWN);
    SDL_Renderer* renderer = SDL_CreateRenderer(win, -1, 
                                                SDL_RENDERER_ACCELERATED | 
                                                SDL_RENDERER_PRESENTVSYNC);
    SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
    SDL_RenderClear(renderer);
    SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);
    for(int x = 0; x < 640; x+=32)
    {
        for(int y = 0; y < 480; y+=32)
        {
            SDL_Rect rect = …
Run Code Online (Sandbox Code Playgroud)

c++ sdl-2

5
推荐指数
1
解决办法
823
查看次数

char*notes [] = {"Ab","F#","B","Gb","D"}的混淆; 和char**

我真的很困惑这种类型的指针定义:

char *notes[] = {"Ab", "F#", "B", "Gb", "D"};`. 
Run Code Online (Sandbox Code Playgroud)

我理解notes这里是一个指向char的指针数组,我理解为注释'元素应该都是char类型变量的地址.我哪里错了?那么这是如何工作的呢?

#include<iostream>
#include<string>

using namespace std;

int main()
{
    char *notes[] = {"Ab", "F#", "B", "Gb", "D"};
    cout << *(char**)(notes+2);
}
Run Code Online (Sandbox Code Playgroud)

char**那里的演员是什么?它的意义是什么?

c++ pointers

4
推荐指数
1
解决办法
184
查看次数

字符串突然在函数内失去其值

我有代码应该从文件中读取文件名,打开它们,然后进行一些计算.这些文件包含数据列.我已经声明了数组来读取数据.当我在读入之前初始化数组时,包含文件名的字符串表现得不稳定.如果删除了初始化,问题就解决了.

不稳定的行为是:首先声明的字符串不会保留在内存中.在代码中,如果我d[90]先声明,那么稍后的print语句不会打印先前保存的值.可能是什么原因?

这是代码:

#include<stdio.h>
#include<math.h>

main()
{

  FILE *data,*model,*filenames;

  int i,imax,j,k,l;
  float fd[1000],fm[1000],td[1000],tm[1000];
  float a;
  char d[90],m[90];


  k=1;
  l=0;

  filenames=fopen("filenames.dat","r");


  while(fscanf(filenames,"%s %s",d,m)!=EOF)
   {
printf("model: %s\ndata: %s\n",m,d);

    for(i=1;i<=1000;i++)
      {
        fd[i]=0;
        fm[i]=0;
        td[i]=0;
        tm[i]=0;
      }


printf("datafile name: %s\n",d);
printf("modelfile name: %s\n",m);

    data=fopen(d,"r");

    for(i=1;i<=1000;i++)
      if(fscanf(data,"%f %f %f %f",&td[i],&fd[i],&a,&a)!=EOF)
        k++;
      else
        break;

    fclose(data);

printf("modelfile name: %s\n",m);
    model=fopen(m,"r");

    for(i=1;i<=1000;i++)
      if(fscanf(model,"%f %f %f %f %f %f",&tm[i],&fm[i],&a,&a,&a,&a)!=EOF)
       l++;
      else
        break;

    fclose(model);


   }

}
Run Code Online (Sandbox Code Playgroud)

c arrays string

2
推荐指数
1
解决办法
96
查看次数

标签 统计

c++ ×2

arrays ×1

c ×1

pointers ×1

sdl-2 ×1

string ×1