Привет всем Я пытаюсь создать игру, и прямо сейчас у меня есть класс шара, который я хочу в настоящее время создать количество из них через массив, а затем нарисовать затем в игра.XNA рисование и создание массива объектов
В настоящее время, однако, похоже, что это либо создает только один экземпляр баллона, либо только пример 1. Я просматривал это несколько раз, и из того, что, как я понимаю, должен быть цикл по всему размеру массива (в настоящее время установленный в 10) и создание множества шаров, а затем обновление и рисование многих.
Вы не можете делать то, что я сейчас делаю, с массивом? Должен ли я каждый раз создавать каждый объект?
Вот код двух соответствующих классов.
GameLevel: Класс, который создает onjects и рисует их.
public partial class GameLevel : GameScreen
{
SpriteBatch spriteBatch;
protected Game game;
Texture2D balloonTexture;
Balloon[] balloons = new Balloon[10];
public GameLevel(Game game, SpriteBatch spriteBatch)
: base(game, spriteBatch)
{
this.game = game;
this.spriteBatch = spriteBatch;
}
public void LoadContent()
{
for (int i = 0; i < balloons.Length; i++)
{
int colour;
Random random = new Random();
colour = random.Next(1, 6);
switch (colour)
{
case 1: balloonTexture = Game.Content.Load<Texture2D>("Images/BlueBalloon");
break;
case 2: balloonTexture = Game.Content.Load<Texture2D>("Images/RedBalloon");
break;
case 3: balloonTexture = Game.Content.Load<Texture2D>("Images/YellowBalloon");
break;
case 4: balloonTexture = Game.Content.Load<Texture2D>("Images/GreenBalloon");
break;
case 5: balloonTexture = Game.Content.Load<Texture2D>("Images/PurpleBalloon");
break;
}
balloons[i] = new Balloon(new Rectangle(0, 0, 1152, 648), balloonTexture);
balloons[i].SetStartPosition();
}
}
public void Update()
{
for (int i = 0; i < balloons.Length; i++)
{
balloons[i].Update();
}
}
public override void Draw(GameTime gameTime)
{
for (int i = 0; i < balloons.Length; i++)
{
balloons[i].Draw(spriteBatch);
}
base.Draw(gameTime);
}
}
}
Ballon Класс:
public class Balloon
{
Vector2 position;
Vector2 motion;
Rectangle bounds;
Rectangle screenBounds;
public Texture2D texture;
float balloonSpeed = 4;
public Balloon(Rectangle screenBounds, Texture2D texture)
{
this.texture = texture;
this.screenBounds = screenBounds;
}
public Rectangle Bounds
{
get
{
bounds.X = (int)position.X;
bounds.Y = (int)position.Y;
return bounds;
}
}
public void Update()
{
position += motion * balloonSpeed;
}
private void CheckWallColision()
{
if (position.X < 0)
{
position.X = 0;
motion.X *= -1;
}
if (position.X + texture.Width > screenBounds.Width)
{
position.X = screenBounds.Width - texture.Width;
motion.X *= -1;
}
if (position.Y < 0)
{
position.Y = 0;
motion.Y *= -1;
}
if (position.Y + texture.Height > screenBounds.Height)
{
position.Y = screenBounds.Height - texture.Height;
motion.Y *= -1;
}
}
public void SetStartPosition()
{
Random rand = new Random();
motion = new Vector2(rand.Next(2, 6), -rand.Next(2, 6));
motion.Normalize();
position = new Vector2(rand.Next(100, 500), rand.Next(100, 500));
}
public void Draw(SpriteBatch spriteBatch)
{
spriteBatch.Draw(texture, position, Color.White);
}
}
}
Глядя на ваш код, я подумал, что они все рисуют друг над другом, и позиция не получается правильно рассчитана. Я также предлагаю не создавать новый экземпляр «Случайный» каждый раз и вместо этого хранить один экземпляр. Можно получить одно и то же семя и, следовательно, те же значения. – TyCobb
@TyCobb На самом деле невероятно распространено, чтобы получить одно и то же семя - семя полностью основано на системных часах, поэтому серия объектов «Случайный», созданная в то же время, вернет ту же самую серию значений. Лично я считаю, что это огромный недостаток дизайна. – furkle
Если вы хотите что-то немного больше _random_ при каждом запуске приложения, используйте «Случайное случайное = новое Случайное ((int) DateTime.Now.Ticks & 0x0000FFFF);' http://msdn.microsoft.com/en-us/ library/ctssatww (v = vs.110) .aspx – MickyD