Я пытаюсь создать фигуры, сделать их отказов краев, но цикл 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
Условие в
if (line1.x >> 640)
всегда равно нулю, потому что ">>" является поразрядной операцией Shift-Right, а не сравнением. Это эквивалентно делению линии1.x на 2 ^ 640.
Измените его на
if(line1.x >= 640)
В других условиях измените '<<' на '<' и '>>' на '> ='.