【发布时间】:2010-05-10 16:38:55
【问题描述】:
我正在使用带有 XNA 框架的 C# 制作游戏。玩家是屏幕上的 2D 士兵,用户可以发射子弹。项目符号存储在一个数组中。我已经研究过为此使用列表和数组,我得出的结论是,数组对我来说要好得多,因为会有很多子弹同时发射并被摧毁,这是我读过的 Lists don't handle太好了。
在阅读了 XNA 论坛上的一些帖子后,我注意到了这一点: http://forums.xna.com/forums/p/16037/84353.aspx
我已经创建了一个这样的结构:
// Bullets
struct Bullet
{
Vector2 Position;
Vector2 Velocity;
float Rotation;
Rectangle BoundingRect;
bool Active;
}
我这样制作数组:
Bullet[] bulletCollection = new Bullet[100];
但是当我尝试做一些这样的代码时:
// Fire bullet
if (mouseState.LeftButton == ButtonState.Pressed)
{
for (int i = 0; i < bulletCollection.Length; i++)
{
if (!bulletCollection[i].Active)
{
// something
}
}
我收到以下错误:
'Zombie_Apocalypse.Game1.Bullet.Active' 由于受到保护而无法访问 等级
有人可以帮忙吗?我不知道为什么会弹出这个错误,或者即使我正确地声明了数组或任何东西......因为 XNA 论坛上的帖子没有详细说明。
感谢您提供的任何帮助。 :)
【问题讨论】:
-
除了您遇到的问题 - 您可能需要考虑不使用数组(或固定长度数组)。您可能会遇到问题,即:快速枪,需要 100 多发子弹。考虑使用对象集合,其中对象(不再活动时)只会自行销毁。
-
@riffnl,实际上不,在 XNA 中使用固定缓冲区几乎总是最佳选择,因为您希望将垃圾收集尽可能减少到零,甚至为零。