Почему это, если цикл не работает? (BGI формы)

0

Я пытаюсь создать фигуры, сделать их отказов краев, но цикл if не работает, и я не знаю, почему. Эта линия перемещает форму:

line1.x  += line1.xvelocity;
line1.y  += line1.yvelocity;
line1.x2 += line1.xvelocity;
line1.y2 += line1.yvelocity;

Я хочу сохранить форму в 640x480, поэтому я написал

if (line1.x >> 640) line1.xvelocity *= (-1);
if (line1.x << 0) line1.xvelocity *= (-1);
if (line1.y >> 480) line1.yvelocity *= (-1);
if (line1.y << 0) line1.yvelocity *= (-1);
if (line1.x2 >> 640) line1.xvelocity *= (-1);
if (line1.x2 << 0) line1.xvelocity *= (-1);
if (line1.y2 >> 480) line1.yvelocity *= (-1);
if (line1.y2 << 0) line1.yvelocity *= (-1);

Я пробовал использовать || , или просто используя координаты x,y или x2,y2. Любая помощь? Спасибо.

class Line: public GenericShape
{
public:
    int x2, y2;
    Line();
    Line(int x_in, int y_in, int color_in, int xvel, int yvel, int x2_in, int y2_in)
        : GenericShape(x_in, y_in, color_in, xvel, yvel),
          x2(x2_in),
          y2(y2_in)
    {}
    void draw() const;
};

Line line1(50, 150, 4, 2, -3, 180, 60); // xvelocity=2 yvelocity =-3
  • 0
    Сделайте некоторую отладку и возвращайтесь!
Теги:
if-statement

1 ответ

2
Лучший ответ

Условие в

if (line1.x >> 640)

всегда равно нулю, потому что ">>" является поразрядной операцией Shift-Right, а не сравнением. Это эквивалентно делению линии1.x на 2 ^ 640.

Измените его на

if(line1.x >= 640)

В других условиях измените '<<' на '<' и '>>' на '> ='.

  • 0
    Бах ... Спасибо.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню