Caling Class из для цикла - PullRequest
       30

Caling Class из для цикла

0 голосов
/ 29 сентября 2019

Я работаю с формой Visual Studio c #. У меня есть класс со следующими свойствами:

string Name;
int NumberOfHitBoxes;
Point Hit1;
Point Hit2;
Point Hit3;

У меня есть событие mouseMove, которое определяет, находится ли мышь в «хитбоксе», и работает нормально.как это: (в остальной части (p.Hit1.X))

picture.MouseMove += (sender,  e) =>
                            {
                                var c = sender as PictureBox;
                                bool h=false;
                                if (null == c) return;
                                if (_dragging)
                                {
                                c.Top = e.Y + c.Top - _yPos;
                                c.Left = e.X + c.Left - _xPos;
                                }
                                else
                                {   
                                    if ((e.X>p.Hit1.X)&&(e.X<p.Hit1.X+hitw)&&(e.Y>p.Hit1.Y)&&(e.Y<p.Hit1.Y+hitw)){hitbox(c,p.Hit1.X,p.Hit1.Y,8);h=true;tb.Text = p.Type;hitok = p.Input1Point;}  
                                    if ((e.X>p.Hit2.X)&&(e.X<p.Hit2.X+hitw)&&(e.Y>p.Hit2.Y)&&(e.Y<p.Hit2.Y+hitw)){hitbox(c,p.Hit2.X,p.Hit2.Y,8);h=true;tb.Text = p.Type;hitok = p.Input2Point;} 
                                    if ((e.X>p.Hit3.X)&&(e.X<p.Hit3.X+hitw)&&(e.Y>p.Hit3.Y)&&(e.Y<p.Hit3.Y+hitw)){hitbox(c,p.Hit3.X,p.Hit3.Y,8);h=true;tb.Text = p.Type;hitok = p.Output1Point;} 
                                }
                                if (!h){picture.Refresh();h=false;hitok = new Point(0,0);}
                            };

Количество hitboxex warry, поэтому я хочу сделать что-то вроде этого:

picture.MouseMove += (sender,  e) =>
                            {
                                var c = sender as PictureBox;
                                bool h=false;
                                if (null == c) return;
                                if (_dragging)
                                {
                                c.Top = e.Y + c.Top - _yPos;
                                c.Left = e.X + c.Left - _xPos;
                                }
                                else
                                {   
                                    for (int x =1;x<g.NumberOfHitBoxes;x++)
                                    {
                                     if ((e.X>p["Hit"+x.ToString();].X)&&(e.X<p["Hit"+x.ToString();].X+hitw)&&(e.Y>p["Hit"+x.ToString();].Y)&&(e.Y<p["Hit"+x.ToString();].Y+hitw)){hitbox(c,p["Hit"+x.ToString();].X,p["Hit"+x.ToString();].Y,8);h=true;tb.Text = p.Type;hitok = p["Input"+x.ToString()+"Point"];}    
                                    }
                                }
                                if (!h){picture.Refresh();h=false;hitok = new Point(0,0);}
                            };

Упрощенный:

int x = 1;
int whatever = p["Hit"+x.ToString()].X;

Вместо этого:

int whatever = p.Hit1.X;

Какой-нибудь умный умный человек, возможно, может научить тупицу вроде меня маленькой уловке ??

1 Ответ

0 голосов
/ 29 сентября 2019

Ваш класс

public class Phit
{
  public List<Point> HitBoxes { get; private set; }

  public Phit(List<Point> hitboxes)
  {
    HitBoxes = hitboxes;
  }
}

Инициализируйте ваш класс с помощью хитбоксов.

List<Point> hitboxes = new List<Point>
{
    new Point(1.2, 1.5),
    new Point(1.2, 3.0),
    new Point(1.2, 4.5)
};

Phit phit = new Phit(hitboxes);

Цикл внутри вашего метода MouseMove.

foreach(Point p in phit.HitBoxes)
{
    if (e.X > p.X && e.X < p.X + hitw && e.Y > p.Y && e.Y < p.Y + hitw)
    {
        hitbox(c, p.X, p.Y, 8);
        h = true;
        tb.Text = $"X: {p.X} / Y: {p.Y}";
        hitok = p;
    }
}    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...