精灵坐标问题 < >我用AcReR4和C++创建了一个敌人类;在这个类中,我有一个使move成为精灵的函数,如下所示: sprite_one(x, y); sprite_two(x2, y2); class enemy{ public: void mov(){ x++; ---- y--; } } }; enemy test_one; test_one.mov(); // this works because its coordinates are x and y enemy test_two; test_two.mov(); // this doesn't work, its coordinates are x2 and y2

精灵坐标问题 < >我用AcReR4和C++创建了一个敌人类;在这个类中,我有一个使move成为精灵的函数,如下所示: sprite_one(x, y); sprite_two(x2, y2); class enemy{ public: void mov(){ x++; ---- y--; } } }; enemy test_one; test_one.mov(); // this works because its coordinates are x and y enemy test_two; test_two.mov(); // this doesn't work, its coordinates are x2 and y2,c++,function,class,allegro,allegro4,C++,Function,Class,Allegro,Allegro4,问题是,当我创建对象时,第一个对象可以根据函数移动(更新变量x和y),其他对象则不能,因为它们调用位置变量的方式不同。如何修复此问题?您的敌方类需要将x和y坐标作为成员变量。这就是你如何让每一个真正的敌人有自己的坐标,从所有其他分开。下面的代码至少可以让您启动并运行。您可能需要添加一个公共函数来打印坐标,或者在屏幕上绘制敌人 class enemy { int mx, my; // coordinates of this enemy public: enemy(int x, in

问题是,当我创建对象时,第一个对象可以根据函数移动(更新变量x和y),其他对象则不能,因为它们调用位置变量的方式不同。如何修复此问题?

您的
敌方
类需要将
x
y
坐标作为成员变量。这就是你如何让每一个真正的敌人有自己的坐标,从所有其他分开。下面的代码至少可以让您启动并运行。您可能需要添加一个公共函数来打印坐标,或者在屏幕上绘制敌人

class enemy
{
    int mx, my; // coordinates of this enemy
public:
    enemy(int x, int y)
        : mx(x), my(y) // initialize the coordinates
    {
        // possibly add future initialization here
    }
    void mov()
    {
        ++mx;
        --my;
    }
}
然后你可以像以前一样创建和移动两个敌人:

enemy test_one(x,y);
test_one.mov();

enemy test_two(x2,y2);
test_two.mov();

请注意,
x,y,x2,y2
不再是存储敌人当前位置的变量,而是定义其起始位置的常数。

首先,什么是
x
y
?它们看起来像全局变量,但面向对象的设计原则说它们应该是
类敌人
的成员变量,这意味着每个
敌人
都可以有自己的坐标。第二这个<代码> ->代码>在<代码> MOV < /代码>函数的中间做什么?这应该是一个注释,而不是干扰下一行代码。在函数的中间只有变量的增加和减少。我创建了int x和int y作为全局变量,对于x2和y2也是这样。我应该在函数中声明它们吗?我认为你需要搜索C++类成员的在线教程。