1

原始问题:

在工作面试之前,我被要求了解如何使用 C 或 C++ 在帧缓冲区中绘制抗锯齿线。我没有用过 C,距离上次使用 C++ 已经有好几年了。在图形方面,我是一个完整的初学者。我的 C++ 经验主要是简单的命令行程序和排序方法。该公司不在乎我是否在网上获取代码,他们希望我理解它但仍然有一个工作可执行文件。

我已使用本教程在 MS VC++ 2012 Express 中设置 SDL 库,并使用此算法进行实际的抗锯齿。我对该算法有很好的理解,尽管我目前无法编译它。我只想画一条线,然后我可以继续将代码设置为给定的骨架类定义。除了该页面上的算法内容之外,这就是我所包含的内容:

#include <cmath>
#include <math.h>
#include "conio.h"
#include "stdlib.h"
#include "stdio.h"
#include "SDL.h"

const double HEIGHT = 240;
const double WIDTH = 320;
const double X0 = 25.6;
const double X1 = 64.7;
const double Y0 = 30;
const double Y1 = 42;

int round(double number)
{
    return number < 0.0 ? ceil(number - 0.5) : floor(number + 0.5);
}

void main()
{
  Uint32 pixelColor = 00000000000000000000000000000000;

  SDL_Surface* myScreen = SDL_CreateRGBSurface(SDL_ALPHA_OPAQUE,WIDTH,HEIGHT,32, 0x000000FF,

0x0000FF00, 0x00FF0000, 0xFF000000);

  WULinesAlpha(X0, X1, Y0, Y1,pixelColor,myScreen);

  return;
}

我收到以下错误:

错误 21 错误 LNK2019:未解析的外部符号 _SDL_main 在函数 _main 中引用 错误 22 错误 LNK1120:1 个未解析的外部符号

我看过一些代码示例,说 main 函数必须如下所示:

int main(int argc, char *argv[])
{
}

再说一次,我不熟悉图形的东西,所以我知道我的主要功能很可能是错误的;我期待一些摇头。有人可以解释发生了什么/我需要做什么吗?

新的:

现在,我根据 NomNomNom069 的 YouTube 视频将我的 main 函数替换为以下代码:“C++ SDL 教程 2 创建屏幕和处理基本输入”

#include "SDL.h"

int main(int argc, char * args[])
{
    bool running = true;
    //initialize SDL
    if (SDL_Init(SDL_INIT_EVERYTHING) == -1)
    {
        running = false;
    }

    //set up screen
    SDL_Surface *screen;

    screen = SDL_SetVideoMode(WIDTH, HEIGHT, 32, SDL_HWSURFACE);

    if (screen == NULL)
    {
        running = false;
    }

    SDL_Event occur;

    //main application loop
    while (running)
    {
        SDL_PollEvent(&occur);

        if (occur.type == SDL_QUIT)
        {
            running = false;
        }

        //drawing occurs here
        SDL_FillRect(screen, NULL, 0);
        SDL_Flip(screen);
    }

    //quit SDL
    SDL_Quit();

    return 0;
}

没有错误,我会弹出一个窗口。惊人的。

我现在的问题是关于如何/在哪里打电话WuLinesAlpha。此函数需要 4double秒、一个Uint32变量和一个SDL_Surface*. 我有我double的 s,我将其设置Uint320x000000FF,并且我假设SDL_Surface我已设置为screen传入的那个。

我玩弄了WuLinesAlpha函数调用的去向,但一直黑屏。我想,正如视频中解释的那样,它会进入循环,但什么也没发生。还有更多我应该调用的 SDL 命令吗?

4

1 回答 1

0

首先修复您的main声明。这确实需要int main(int argc, char *argv[])。特别是在 Windows 上,因为我相信SDL.h实际上会将您重命名main为其他名称,并接管main库本身。

接下来,确保正确链接到 SDL。在我自己的基于 SDL 1.2.x 的项目中,我的 Makefile 中有这些行:

SDL_CFLAGS := $(shell sdl-config --cflags)
SDL_LFLAGS := $(shell sdl-config --libs)

然后,我稍后将这些标志附加到我的实际CFLAGSLFLAGS. 请注意,如果您使用makeand Makefiles,则要在其中使用:=,否则每次展开时make都会调用该命令。$(shell ...)$(CFLAGS)

我无法帮助您设置 Microsoft 的 GUI 产品。本教程,对于稍旧的 MSVC 产品 (2010),看起来相当不错,可能会让您走上正轨: http: //lazyfoo.net/SDL_tutorials/lesson01/windows/msvsnet2010e/index.php

最后,不要忘记SDL_Init()在某个时候调用,最好是在开始创建表面之前。

祝你好运!

于 2013-08-11T16:05:57.160 回答