- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我正在编写一个用表面表填充屏幕的代码;这是代码:
main.c
#ifdef __cplusplus
#include <cstdlib>
#else
#include <stdlib.h>
#endif
#include <SDL/SDL.h>
#include <SDL_image.h>
#include "maploader.h"
#define W 510
#define H 510
#define SIZE 34
void pause();
int main ( int argc, char** argv )
{
SDL_Surface *screen = NULL;
SDL_Surface *surfaces[15][15];
SDL_Init(SDL_INIT_VIDEO);
screen = SDL_SetVideoMode(W, H, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
SDL_WM_SetCaption("demon game", NULL);
SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 255, 255, 255));
mapload(screen, surfaces[15][15], NULL);
SDL_Flip(screen);
pause();
SDL_QUIT;
return EXIT_SUCCESS;
}
void pause()
{
int continuer = 1;
SDL_Event event;
while (continuer)
{
SDL_WaitEvent(&event);
switch(event.type)
{
case SDL_QUIT:
continuer = 0;
}
}
}
maploader.c
#ifdef __cplusplus
#include <cstdlib>
#else
#include <stdlib.h>
#endif
#include <SDL/SDL.h>
#include <SDL_image.h>
#define W 510
#define H 510
#define SIZE 34
SDL_Surface *surfaces[15][15];
void mapload(SDL_Surface *screen, SDL_Surface *surfaces[][15], int lvl)
{
FILE *level = NULL;
char elements[125];
int i, j, k = 0;
SDL_Rect elementposition = {0,0};
level = fopen("level.txt", "r");
if (level == NULL)
{
exit(0);
}
fgets(elements, 125, level);
SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 255, 255, 255));
for (i=0; i<15; i++)
{
for (j=0; j<15; j++)
{
if (elements[k] == "0")
{
surfaces[i][j] = IMG_Load("mur.jpg");
}
else if (elements[k] == "1")
{
surfaces[i][j] = IMG_Load("caisse.jpg");
}
else if (elements[k] == "2")
{
surfaces[i][j] = IMG_Load("objectif.png");
}
else
{
surfaces[i][j] = NULL;
}
k++;
}
}
for (i=0; i<15; i++)
{
for (j=0; j<15; j++)
{
SDL_BlitSurface(surfaces[i][j], NULL, screen, &elementposition);
elementposition.x += SIZE;
}
elementposition.y += SIZE;
}
}
我从编译中得到的唯一错误如下:“无法将参数 '2' 的 'SDL_Surface*' 转换为 'SDL_Surface*' 到 'SDL_Surface* ()[15]' 到 'void mapload(SDL_Surface , SDL_Surface* (*)[15], int)'|"
显然,错误是从 mapload 函数的第二个参数初始化的,但我不清楚到底出了什么问题。有什么想法吗?
最佳答案
这个,
mapload(screen, surfaces[15][15], NULL);
应该是
mapload(screen, surfaces, NULL);
但现在你应该问自己,如果你不知道,那么可能,
void mapload(SDL_Surface *screen, SDL_Surface *surfaces[][15], int lvl)
的签名完全错误。请注意,surfaces[15][15]
表示第 16 指针数组中的第 16 元素,其中任何一个都不存在,因为您每个只分配了15个。所以你需要了解 c 中的数组,它们是如何分配的以及如何拥有动态数组。
此外,您告诉 c 的事实编译器认为函数需要数组与该函数内部不太相关,因此语法 SDL_Surface *surfaces[][15]
对于 C 程序员来说似乎很奇怪。
最后,由于surfaces
是一个全局变量,您不需要将其作为参数传递,但是您应该问自己,它应该是一个全局变量?
关于C、SDL : error: cannot convert 'SDL_Surface*' to 'SDL_Surface* (*)[15],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45923744/
一段时间以来一直试图在网上找到它。 我有一个带有一些内容的 SDL_Surface(其中一个是文本,另一个是 Sprite 的一部分)。在游戏循环中,我可以很好地将数据显示在屏幕上。但是然后它再次循环
情况:我正在尝试在 MainMenu 类中使用 load_image 方法,因此在我的主类中我可以调用 load_image 方法,同时在主菜单中。 问题:在 load_image 方法中,我收到错误
我想将 SDL_Surface 加载到带有填充的 OpenGL 纹理中(以便 NPOT->POT),然后在表面上应用颜色键。我要么最终对所有像素进行颜色键控,不管它们的颜色如何,要么根本不对任何颜色进
所以我正在编写一个用表面表填充屏幕的代码;这是代码: main.c #ifdef __cplusplus #include #else #include #endif #include #inc
我在创建 SDL_Surface 的动态表时遇到困难。看看这段代码: SDL_Surface **testA = new SDL_Surface *[2]; for(int i=0;i<2;i++)
我可以通过这样做来释放我的 SDL_Surface* 冲浪吗: SDL_Surface* surf; for(int i = 0; i < 5; i++){ surf
有什么方法可以将 SDL 表面复制到另一个表面,例如创建备份拷贝,而无需在修改拷贝时修改原件? *surface = *original_surface 不工作。 SDL_Surface 没有任何构造
我想使用一个集合来引用一些 TileObjects(一个用户定义的类),这样我就可以遍历它们并采取相应的行动,或者找到一个特定的对象并将其删除,等等。 问题是,我想做的一件事是访问成员函数“rende
假设我有一个只有一张图片的 SDL_Surface。如果我想让 SDL_Surface 拥有该图像的三个拷贝,一个在另一个下面怎么办? 我想出了这个函数,但它没有显示任何东西: void Elemen
我一直在使用 sdl ttf,现在,我正在创建一个用于多行文本渲染的文本渲染器函数。 我正在为每条线创建一个表面,在“全局”表面中进行 blitting,然后将该“全局”表面转换为纹理。 实际上我的问
所以这是我的问题。我有一个 DrawMgr 类,我在其中调用 DrawCube 函数,我在另一个类的函数中调用 SDL_Surface。我的主要问题是,当我开始将鼠标移到我创建的窗口上时,它会出现段错
我正在使用 SDL 和 OpenGL。我使用 SDL ttf 创建带有文本的表面,然后使用该表面创建纹理。 我正在尝试将 alpha channel (不透明度)应用于文本,我正在使用这种方式:
在我的应用程序中,我需要从 SDL_Surface 返回鼠标的相对位置,问题是返回的鼠标位置是相对于 SDL 窗口而不是 SDL_Surface 的。我想我的问题是最简单/最有效的方法是什么。有任何问
源始终为 320x240,目标始终为 640x480。 void DoDoubleScaling(SDL_Surface* dest, SDL_Surface* source) { asser
我想将所有 SDL_Surface 初始化为一个函数,以便拥有最清晰的 main 可能,但它似乎不起作用。我这样做是这样的: void setImages(SDL_Surface* mur, SDL_
检查 SDL_LockSurface 函数的实现时我偶然发现了这个: /* This needs to be done here in case pixels changes value */ sur
我正在尝试使用 SDL 制作一个非常小且简单的片段。这个就像一个魅力: SDL_Window * window = SDL_CreateWindow("SDLTest", 0, 0, SCREEN_W
我正在尝试从 SDL_Surface 获取像素的 RGB/RGBA 颜色。我在互联网上找到了这段代码,但它返回了奇怪的数字(67372036 表示 0 红色、0 绿色、255 蓝色的像素) Uint3
我真的不知道哪里出了问题(主要是因为我不知道给我报错的那一行是干什么的)。 我认为我不必向您展示那么多代码。我正在做的是尝试获取像素的 RGBA 值以查看 Alpha 值有多大。我正在使用它来确定它们
运行我的小行星游戏几分钟后,代表我的飞船的 SDL_Surface 消失了。以某种方式保存船的旋转图像(rot)的表面被设置为 NULL。我不知道为什么!在我添加 if(rot != NULL &&
我是一名优秀的程序员,十分优秀!