在Snake游戏中使用SDL_FillRect

Using SDL_FillRect in a Snake game

本文关键字:SDL FillRect Snake 游戏      更新时间:2023-10-16

我在SDL中使用链表将"body"(单个正方形)输出到屏幕上时遇到问题。

我有一个node,它有两个数据变量:指向下一个的node指针和SDL_Rect值。

这就是我调用SDL_FillRect函数的方式:

node* tmp; 
SDL_FillRect(screen, &tmp->body, white);

这是我的节点类:

class node{
    friend class map;
private:        
    node* next;
    SDL_Rect body;
public:         
    node() : next(NULL) {body.h = 15, body.w = 15, body.x = 390, body.y = 290;}
};

然而,当我打电话给时

node tmp; 
SDL_FillRect(screen, &tmp.body, white);

node不是指针的情况下,方形输出良好。

关于如何使用指向节点的指针来实现这一点,有什么技巧吗?

  node* tmp;
  SDL_FillRect(screen, &tmp->body, white);

您似乎没有分配对象tmp。某个地方应该有一个tmp = new node;

执行此操作时:

node* tmp;

你只声明了一个指向类"node"中对象的指针,但没有实例化该类中的对象(如果你想在里面获取SDL_Rect,它上什么都没有,只是一个指针)。

另一种方式:

node tmp;

如果你想传递一个指针,而不是像在这里所做的那样传递方向,那么你正在实例化类,这是一种正确的方式:

SDL_FillRect(screen, &tmp->body, white);

你应该用这种方式实例化类,使你的指针指向某种东西:

node*tmp=新节点;

只有这样,你才能从你的指针中获得这样的东西:

SDL_FillRect(screen, tmp->body, white);