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

时间:2015-07-27 09:55:15

标签: c sdl

我正在尝试用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_model位于sphere_data.hCreateObject功能位于triangle.c

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

1 个答案:

答案 0 :(得分:0)

  

......我很难接下来想要做的事情(让人物移动/反弹)。

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

也许记住创建的对象会更好,以便稍后可以在重绘之前更改它们的坐标。举个例子:

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);
}