c链接列表绘制结构到屏幕
我有一个游戏,每40帧实例化一个新的结构并将其添加到链接列表。然后,它使用SDL循环显示每个结构到屏幕的链接列表,然后将这些圆圈绘制到屏幕上,然后再次消失而不是停留在屏幕上。c链接列表绘制结构到屏幕
此功能使得新的结构,称为每40帧
void spawnAsteroid(){
srand(time(NULL));
int maxRad = 60;
int minRad = 20;
Asteroid asteroidddd = {0,0,rand()%SCREEN_WIDTH , rand()%SCREEN_HEIGHT, (rand()%(maxRad-minRad))+minRad};
asteroidList = g_list_prepend(asteroidList, &asteroidddd);
}
通过链表
void drawAsteroids(){
GList *list = asteroidList;
//loop through the list
while(list != NULL){
GList *next = list->next;
//draw each asteroid
drawAsteroid(list->data);
list = next;
}
}
这一个循环,这个功能绘制结构为圆
void drawAsteroid(void *asteroid){
//cast the void pointer so it can be dereferenced
Asteroid *newAsteroid = (Asteroid *)asteroid;
circleRGBA(renderer, newAsteroid->xPos, newAsteroid->yPos, newAsteroid->r, 0, 255, 0, 255);
}
现在我给结构x速度和ay速度。然后,我再次遍历列表,并通过速度变量更新位置变量,以便圆圈缓慢地在屏幕上移动。然而没有看到移动。
此功能列表循环
void updateAsteroids(){
GList *list = asteroidList;
//loop through the list
while(list != NULL){
GList *next = list->next;
//draw each asteroid
updateAsteroid(list->data);
list = next;
}
}
该功能,然后更新位置
void updateAsteroid(void *asteroid){
//cast so it can be dereferenced
Asteroid *newAsteroid = (Asteroid *)asteroid;
newAsteroid -> xPos += newAsteroid -> xSpeed/60;
newAsteroid -> yPos += newAsteroid -> ySpeed/60;
}
你加入一个指向局部变量到列表中。局部变量超出范围并在函数返回时消失。
这意味着您有一个指向不存在对象的指针列表,并且每次取消引用这些指针时将会有未定义的行为。
您需要使用malloc
来动态分配堆的结构。请记住free
节点完成后。
在不相关的说明中,您将每次调用spawnAsteroid
时的随机数发生器复位。如果您在一秒钟内打两次电话,您将使用相同的随机数字序列进行两次通话。致电srand
一次在程序开始时。
我已经更新了问题,并带来了进一步的问题。任何帮助,将不胜感激 –
问题接缝要与线
Asteroid asteroidddd = {0,0,rand()%SCREEN_WIDTH , rand()%SCREEN_HEIGHT, (rand()%(maxRad-minRad))+minRad};
由于没有分配内存,一旦超出spawnAsteroid()的范围,asteroidddd将被销毁。
而应该做的:
Asteroid *asteroidddd = malloc(sizeof(Asteroid));
// Populate properties..
我已更新问题与进一步的问题。任何帮助,将不胜感激 –
[C链接列表内容的C调用函数]的可能重复(http://*.com/questions/43441064/c-calling-function-on-contents-of-linked-list) – ptomato