原始问题:
在面试之前我被问过了解如何 使用C或C ++在帧缓冲区中绘制抗锯齿线。我没有 使用C,自从上次使用C ++以来,我已经有几年了。我是一个 完成初学者的图形。我的C ++经验有 主要是简单的命令行程序和排序方法。该 公司不在乎我是否在线抓取代码,他们要我 理解它,但仍然有一个可行的可执行文件。
我使用this tutorial在MS VC ++ 2012中设置SDL库 快速,this algorithm用于实际的抗锯齿。我有 虽然我现在有很好的理解算法 无法让它编译。我只想绘制一条线,并且 然后我可以继续将代码设置为骨架类 定义我给了。这就是我所包含的内容 在该页面上使用算法:
#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未解析 的外部
我看过几个代码示例,说主要功能必须看 像这样:
int main(int argc, char *argv[]) { }
同样,我不熟悉图形内容,所以我知道我的主要功能 可能非常错误;我期待着一些摇头。有人可以 解释发生了什么/我需要做什么?
新:
我现在用以下代码替换了我的主要功能,基于NomNomNom069的YouTube视频:“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
。此函数需要4 double
s,Uint32
变量和SDL_Surface*
。我有double
个帖子,我将Uint32
设置为0x000000FF
,我认为我设置为SDL_Surface
的{{1}}是传入的screen
我玩弄了WuLinesAlpha
函数调用的位置,并且我一直在黑屏上。我认为,正如视频中所解释的那样,它会进入循环但没有发生任何事情。是否还有我应该调用的SDL命令?
答案 0 :(得分: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)
然后,我将这些标记附加到我的实际CFLAGS
和LFLAGS
。请注意,如果您使用make
和Makefile
,则希望在:=
使用make
,否则$(shell ...)
每次展开时都会调用$(CFLAGS)
命令{{ 1}}。
我无法帮助您设置Microsoft的GUI产品。对于稍微旧一些的MSVC产品(2010),本教程看起来相当不错,可能会让您走上正确的轨道:http://lazyfoo.net/SDL_tutorials/lesson01/windows/msvsnet2010e/index.php
最后,不要忘记在某个时刻致电SDL_Init()
,最好在开始创建表面之前。