我正在尝试用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.h
,CreateObject
功能位于triangle.c
我应该创建多个数字并在此之后将创建的数字添加到列表中,但我目前正在尝试创建一个。 (这是作业,但我希望我能在这里得到一些帮助,我有点挣扎)
答案 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);
}