我有一個具有x、y和mass(作為半徑)屬性的類。所有這些都是花車。我也有這個方法:
float shrink(float attackerMass) {
float shrinkAmount = attackerMass * GetFrameTime();
mass -= shrinkAmount;
return shrinkAmount;
}
當另一個圓與圓接觸時呼叫此方法,并將圓縮小適量(我std::cout在下面放了一條線mass -= shrinkAmount來測驗它),但質量值從未實際應用于物件。我的猜測是,我以某種方式更改了我的圓物件副本的值,而不是實際參考的值,但我不知道這是如何發生的。
如果需要,這是整個物件類(我使用的是 Raylib 中的函式):
class Blib {
private:
Color color;
Blib* address{ this };
public:
float x;
float y;
float mass;
/* Constructor */
Blib(float x, float y, float mass = 32.0f, Color color = Color{ 255, 255, 255, 200 }) {
this->x = x;
this->y = y;
this->mass = mass;
this->color = color;
}
/* Methods */
void check_collisions(std::vector<Blib> blibs) { //
for (Blib blib : blibs) {
if (CheckCollisionCircles(Vector2{ x, y }, mass, Vector2{ blib.x, blib.y }, blib.mass)) {
if (mass > blib.mass && address != blib.address) {
grow(blib.shrink(mass));
}
}
}
}
void draw() {
DrawCircle(x, y, mass, color);
}
void grow(float amount) {
mass = amount;
}
void move_with_keyboard() {
float speed = 5.0f * mass * GetFrameTime();
if (IsKeyDown(KEY_W)) {
y -= speed;
}
if (IsKeyDown(KEY_A)) {
x -= speed;
}
if (IsKeyDown(KEY_S)) {
y = speed;
}
if (IsKeyDown(KEY_D)) {
x = speed;
}
}
float shrink(float attackerMass) {
float shrinkAmount = attackerMass * GetFrameTime();
mass -= shrinkAmount;
return shrinkAmount;
}
};
uj5u.com熱心網友回復:
這里:
for (Blib blib : blibs)
只需更改為:
for (Blib &blib : blibs)
您需要一個參考,否則您只是在更改一個在每次 for 回圈迭代結束時消失的臨時變數。
PS:我通常更喜歡:
for (auto &blib : blibs)
PPS:您的函式簽名也需要作為參考:
void check_collisions(std::vector<Blib> &blibs)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/439884.html
下一篇:如何參考兩個類的實體?
