Извините, если этот вопрос немного открыт, но я новичок в C# и XNA... и на самом деле в этом форуме!
Я создаю игру и требую, чтобы луч света излучался из фиксированной точки (внизу слева на прикрепленном снимке экрана, принадлежащем классу с именем PowerStation) и отражался от зеркал, которые пользователь может перемещать и вращать. Я добавил попиксельный метод обнаружения столкновений, как видно из прикрепленного снимка (зеркало становится красным).
В настоящее время я пытаюсь проверить наличие препятствий на пути луча, создав точку и перемещая ее по пути света, пока не будет обнаружено столкновение; оттуда запись пройденного расстояния, а затем неравномерное растяжение спрайта Луча на требуемую величину. Это уже оказывается трудным, и я думаю, что с этим методом еще предстоит пройти долгий путь.
Мне просто интересно, есть ли у кого-нибудь какие-либо советы относительно наилучшего метода обнаружения препятствий, их вращения и определения направления отражения Луча (с какой стороны Зеркала поражен), прежде чем я полностью посвятю себя чему-то, что может получить действительно сложно или никогда даже не работать?
Вот как выглядит мой класс Beam в настоящее время... все классы, кроме одного, наследуются от одного базового класса, называемого Object, и все объекты объявлены в статическом списке объектов, принадлежащем отдельному классу Items. Извините, если это плохое, грязное кодирование!
class Beam : Object
{
private Vector2 start;
private double length;
private Vector2 POC;
public Beam(Vector2 pos)
: base(pos)
{
spriteName = "beam";
depth = 0.2f;
solid = true;
foreach (Object o in Items.objectList)
{
if (o.GetType() == typeof(PowerStation))
{
start = o.Origin;
}
}
}
public override void Update()
{
Point newPoint = new Point((int)Origin.X, (int)Origin.Y);
while ((!(collision(new Mirror(new Vector2(0, 0))))) && (newPoint.X > 0) && (newPoint.Y > 0)) // && boundaries of window
{
newPoint.Y--; //will be changed to a Vector
}
POC = PointOfCollision(new Mirror(new Vector2(0, 0))); // Need to make it do POC of newPoint, not just the Beam Object!
length = FindLength(start, new Vector2(50, 50));
//Scale = new Vector2( , ); //amount to scale sprite
base.Update();
}
private double FindLength(Vector2 pos1, Vector2 pos2)
{
return (Math.Sqrt(Math.Pow(Math.Abs(pos2.X - pos1.X), 2.0f) + Math.Pow(Math.Abs(pos2.Y - pos1.Y), 2.0f)));
}
}
Любая помощь будет принята с благодарностью! заранее спасибо