我定義了一個名為的結構Object,在這個結構內部還有 3 個結構。
collision_box應該與position和綁在一起size。每當我更新位置和大小時,collision_box應該得到相同的值。
在此之前,我只是將位置和大小值復制到collision_boxInit 和 Update 函式中。它作業得很好,但我認為這也應該與指標一起作業,所以我不必每次都復制這些值。
// Object definition
typedef struct Object{
Vector2 position; // typedef struct float x,y
Vector2 size; // typedef struct float x,y
// When ever I update position and size the collision_box should get the same values
// without copying them in the Update function.
Rectangle collision_box = {position.x, position.y, size.x, size.y}; // typedef struct float x,y,width,height
}Object;
// Extension of Object
typedef struct Player{
Object* o;
}Player;
// Update Players position and size
void UpdatePlayer(Player* player)
{
player->o->position = (Vector2){100.0f, 100.0f};
player->o->size = (Vector2){20.0f, 20.0f};
}
// player.o->collision_box should always be tied to player.o->position and player.o->size
printf("%f/n", player.o->collision_box.x);
printf("%f/n", player.o->collision_box.y);
printf("%f/n", player.o->collision_box.width);
printf("%f/n", player.o->collision_box.height);
輸出
100.0
100.0
20.0
20.0
uj5u.com熱心網友回復:
您可以將 your 宣告Object 為 aunion,而不是 a struct,其中positionandsize成員本身被封閉在一個內部的匿名結構中。
這樣,這兩種Vector2型別將與成員占用相同的記憶體Rectangle,并且對前者的任何更改也會對后者進行(反之亦然):
typedef union tagObject {
struct {
Vector2 position, size;
};
Rectangle collision_box;
}Object;
position這使您能夠通過和size成員或通過成員來參考資料collision_box。
測驗代碼(更正您的/nto\n并向main函式添加一些區域變數以使其作業):
int main()
{
Player player;
Object object;
player.o = &object;
UpdatePlayer(&player);
// player.o->collision_box should always be tied to player.o->position and player.o->size
printf("%f\n", player.o->collision_box.x);
printf("%f\n", player.o->collision_box.y);
printf("%f\n", player.o->collision_box.width);
printf("%f\n", player.o->collision_box.height);
}
輸出:
100.000000
100.000000
20.000000
20.000000
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/434180.html
上一篇:又是指標、&和指標?
