Tôi đang cố gắng viết một SpriteManager
lớp trong XNA, nhưng tôi cần truy cập vào các Game
biến. Ví dụ, thuộc Game.Content
tính sẽ rất hữu ích trong việc tải họa tiết và Game.GraphicsDevice.Viewport
sẽ hữu ích trong việc lấy kích thước cửa sổ.
Hiện tại, tôi có lớp sau:
public MainGame : DrawableGameComponent
{
public SpriteManager<Enemy> EnemyManager { get; get; }
public SpriteManager<Powerup> PowerupManager { get; set; }
...
}
Tôi có thể nghĩ ra ba cách để có quyền truy cập vào các biến này trong SpriteManager
lớp:
Làm cho lớp quản lý sprite của tôi xuất phát từ
GameComponent
. Điều này sẽ là lý tưởng, ngoại trừ trình quản lý sprite của tôi được sử dụngMainGame
, đó là aGameComponent
.Sử dụng
((Game) Game1)
để truy cập các biến. Tuy nhiên, làm loại diễn viên này là xấu xí và phá vỡ đóng gói.Vượt qua mọi thứ từ
MainGame
. Ví dụ,EnemyManager
cần tải một loại kẻ thù ngẫu nhiên mỗi lần nó sinh ra kẻ thù, vì vậy thay vì tải họa tiết vàoMainGame
, hãy chuyểnEnemyManager
thuộcGame.Content
tính và để nó xử lý tải kết cấu. Tuy nhiên, tôi không chắc đây có phải là cách xử lý tình huống tốt nhất hay không. Tôi không thể đặt ngón tay của mình lên nó, nhưng có vẻ như 'sai' theo một cách nào đó.
Tôi có thể sử dụng một số lời khuyên về cách tốt nhất để đạt được điều này.