Хорошо, поэтому я делаю 2-я стреляющую игру в XNA и немного ударил. Я пытаюсь создать класс врагов, который позволит мне разворачивать врага с экрана каждые 10 секунд, а затем перемещать его случайным образом вверх, вправо или влево. Проведя большую часть 4 часов чистки Интернета, все, что я нашел, является примером того, как враг перемещается в одном направлении, появляется из одной точки и так далее.XNA: Нужна помощь, порождающая врагов на любой стороне, по таймеру, а затем их перемещение случайным образом.
Любая помощь была бы высоко оценена, мой класс врагов - это немного беспорядок в минуту от перетаскивания большого количества кода, чтобы попытаться заставить его работать. Здесь, как он стоит:
using Microsoft.Xna.Framework;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Shark_Wars_2
{
class Enemy
{
List<Vector2> sharkPosition = new List<Vector2>(); //is there a better way for having more than one of the same enemy?
public Vector2 sharkDirection;
public int sharkWidth;
public int sharkHeight;
public int sharkSpeed;
float sharkSpawnProbability;
public Random randomSharkPosition;
public Random direction;
double timer = 0;
float interval = 1000;
int speed = 1;
public Enemy()
{
sharkPosition = new Vector2(0, 0); //brings up error - see above
sharkWidth = 64;
sharkHeight = 44;
sharkSpeed = 3;
sharkSpawnProbability = 1/10000f;
randomSharkPosition = new Random(3); //left, right, up, down
direction = new Random(3);
}
public void update(GameTime gameTime)
{
//enemy movement
for (int i = 0; i < sharkPosition.Count; i++)
{
//enemy position increases by speed
sharkPosition[i] = new Vector2(sharkPosition[i].X + sharkDirection.X, sharkPosition[i].Y + sharkDirection.Y);
}
timer += gameTime.ElapsedGameTime.TotalMilliseconds;
//aniamtion
if (timer >= interval/speed)
{
timer = 0;
}
//spawn new enemy
if (randomSharkPosition.NextDouble() < sharkSpawnProbability)
{
float spawn = (float)randomSharkPosition.NextDouble() * (1280 - sharkHeight); sharkPosition.Add(new Vector2(sharkDirection.X, sharkDirection.Y));
}
}
// ill worry about drawing after spawning and movement, should be no problem
public void draw()//(SpriteBatch spritebatch, Texture2D wave)
{
for (int i = 0; i < sharkPosition.Count; i++)
{
//spritebatch.Draw(shark, new Rectangle((int)sharkPosition[i].X, (int)sharkPosition[i].Y, sharkWidth, sharkHeight);
}
}
}
}
моя голова действительно заблокирована, я потратил много времени, работая, как сделать перемещение фоновых объектов и список пуль.
Я бы очень хотел упростить это, так что, если вы знаете, что проще делать вещи, я все уши!
Заранее благодарен!
Ваш sharkPosition = новый Vector2 (0, 0); Должен отображаться ошибка. Это список, поэтому вам нужно это сделать. sharkPosition.Add (новый Vector2 (0, 0)); Что касается нереста. Выберите случайное значение x и y. Проверьте, не находятся ли они за пределами границ. Поместите блок. Проверьте, не меньше ли единицы. Если он затем перемещается вправо. Повторите проверку, если оно меньше 0. Двигайтесь вниз. Повторите проверку, если она больше ширины границ карты. Двигай влево. Повторите проверку, если она больше, чем высота границ карты. Двигайтесь вверх. Проверка приведет к тому, что юниты переместятся из пределов в границы. – deathismyfriend