使用成员函数在类中设置POINT2f/VECTOR2f变量的x或y
Setting x or y of a POINT2f/VECTOR2f variable in a class using a member function
我有以下类:
//----------------------------------------------------------------------
// CHARACTER CLASS
//----------------------------------------------------------------------
class Character
{
private:
POINT2f char_position;
public:
VECTOR2f char_velocity;
Character();
~Character();
// Mutators
void SetChar_Position(POINT2f p);
void SetChar_Velocity(VECTOR2f v);
// Accessors
POINT2f GetChar_Position();
VECTOR2f GetChar_Velocity();
};
//----------------------------------------------------------------------
// PLAYER CLASS - INHERITED FROM "CHARACTER" CLASS
//----------------------------------------------------------------------
class Player : public Character
{
private:
public:
int health;
Player();
~Player();
void SetPlayer_Health(int h);
int GetPlayer_Health();
};
所以从本质上来说,玩家类继承自角色类。Character类有一个成员函数,可以让你设置字符的位置和速度,它接受POINT2f和VECTOR2f。
在我的主要代码中,我创建了一个玩家角色Player Player1
,然后在按下按钮时设置球的速度和位置:
if (ui.isActive('A')) // Check to see if "A" key is pressed
{
// Player Ball
Player1.SetChar_Velocity.x = -12.0;
Player1.SetChar_Position.x += (Player1.GetChar_Velocity.x*dt);
Player1.SetChar_Velocity.x += (acceleration*dt);
}
我目前得到的错误说left of .x must have class/struct/union
,所以我把Player1.SetChar_Velocity.x = -12.0;
改为Player1.SetChar_Velocity().x = -12.0;
,这比错误expression must have class type
和to few arguments in function call
。
有没有人知道一个方法,将允许我只操作char_velocity
的x号。我也明白,我的代码Set
.x速度是不正确的,因为我没有传递一个VECTOR2f
的值。
为了实现您想要做的事情,您将希望您的Get_
方法的返回类型是引用(wiki)。您的代码将看起来像
class Character
{
private:
POINT2f char_position;
public:
VECTOR2f char_velocity;
// Accessors
POINT2f& GetChar_Position() { return char_position; }
VECTOR2f& GetChar_Velocity() { return char_velocity; }
};
此外,通常建议或要求能够在代码中保持const正确性,因此您可能希望添加
const POINT2f& GetChar_Position() const { return char_position; }
const VECTOR2f& GetChar_Velocity() const { return char_velocity; }
这将允许你做一些调用,如
POINT2f current_pos = a_char.GetChar_Position(); // const
a_char.GetChar_Velocity().x += 2; // non-const
请注意,通常建议将结构体作为const引用而不是副本传递(尽管根据您的c++版本和类型,这可能不成立,您可以查看此问题以进行澄清),因此更改
void SetChar_Position(POINT2f pos) { char_position = pos; }
void SetChar_Velocity(VECTOR2f vel) { char_velocity = vel; }
void SetChar_Position(const POINT2f& pos) { char_position = pos; }
void SetChar_Velocity(const VECTOR2f& vel) { char_velocity = vel; }
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 将数组的地址分配给变量并删除
- 为"adjacent"变量赋值时出现问题
- enum是C++中的宏变量还是整数变量
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 用C++中的一个变量定义一个常量
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 你能重载对象变量名本身返回的内容吗
- 内置函数可查看CPP中的成员变量
- 是否可以初始化不可复制类型的成员变量(或基类)
- 尝试通过多个向量访问变量时,向量下标超出范围
- 试图让变量检查数组中的某些内容
- Cpp-Tuple使用带有变量的get
- 将包含C样式数组的对象初始化为成员变量(C++)
- 当vector是tje全局变量时,c++中vector的内存管理
- 通过多个头文件使用常量变量
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 执行函数时导致崩溃的变量
- 使用成员函数在类中设置POINT2f/VECTOR2f变量的x或y