gpt4 book ai didi

c - 使用 C 和 SDL 从坐标数组绘制图形

转载 作者:太空宇宙 更新时间:2023-11-04 00:03:56 24 4
gpt4 key购买 nike

我正在尝试用 C 语言绘制一个图形,而且我已经成功地做到了,但我想知道我这样做的方式是否让我很难做下一步想做的事情(制作图移动/弹跳)。

我在 main 中创建了一个 for 循环,它遍历一个坐标数组,然后再次调用一个函数在它们之间画线并用颜色填充它。我想知道的是,这个 for 循环是否是执行此操作的最佳方法?

我在 main 中做了这个 for 循环:

for(i = 0; i < SPHERE_NUMTRIANGLES; i++){
object = CreateObject(screen,&sphere_model[i],SPHERE_NUMTRIANGLES);
object->model->scale = 0.1f;
DrawObject(object);
}

我试图绘制的 sphere_model 包含表单上的许多坐标:

  #define SPHERE_NUMTRIANGLES    478
triangle_t sphere_model[] = {
{
.x1=-1,
.y1=-500,
.x2=-1,
.y2=-489,
.x3=-1,
.y3=-500,
.fillcolor=0xeeeeee,
.scale=1.0
},

CreateObject 从 for 循环中获取模型

// Create new object
object_t *CreateObject(SDL_Surface *screen, triangle_t *model, int numtriangles)
{
object_t *object;

object = NULL;

object = malloc(sizeof(object_t));
object->model = malloc(sizeof(triangle_t) * numtriangles);
object->screen = screen;
object->ttl;
object->speedx = 0;
object->speedy = 1;
object->model = model;
object->model->scale;
object->model->tx = 100;
object->model->ty = 100;
return object;
}

最后 DrawObject 只是调用一个绘制三角形的函数

void DrawObject(object_t *object)
{
DrawTriangle(object->screen,object->model);

}

sphere_modelsphere_data.h 中,CreateObject 函数在 triangle.c

我应该创建多个图形,然后将创建的图形添加到列表中,但我目前正在尝试只制作一个。 (这是作业,但我希望能在这里得到一些帮助,我有点挣扎)

最佳答案

...hard for me to what I want to do next (making the figure move/bounce).

我看到的是您分配对象、绘制它们然后忘记它们(我没有看到您释放内存)。然后,如果你想在不同的地方再次绘制模型,你将不得不再次经历循环,创建对象,绘制它们(并忘记它们)。

也许记住创建的对象会更好,这样您以后可以在重绘它们之前更改它们的坐标。例如:

typedef struct LIST {
struct LIST *next;
object_t *object;
};
struct LIST *pObjectList, *pList;

// create objects, draw them and save in list
pObjectList= pList= calloc(1,sizeof(struct LIST));

for(i = 0; i < SPHERE_NUMTRIANGLES; i++){
object = CreateObject(screen,&sphere_model[i],SPHERE_NUMTRIANGLES);
object->model->scale = 0.1f;
DrawObject(object);
pList->object= object;
pList= pList->next= calloc(1,sizeof(struct LIST));
}
// offset the model with 50 pixels
pList= pObjectList;
while (pList->object) {
pList->object.x1 += 50; pList->object.y1 += 50;
pList->object.x2 += 50; pList->object.y2 += 50;
pList->object.x3 += 50; pList->object.y3 += 50;
pList= pList->next;
}
// redraw
pList= pObjectList;
for(i = 0; i < SPHERE_NUMTRIANGLES; i++, pList= pList->next)
{
DrawObject(pList->object);
}

关于c - 使用 C 和 SDL 从坐标数组绘制图形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31650053/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com