2015-01-15 3 views
0

Моя цель - переместить фотокамеру взад и вперед. Моя проблема заключается в том, как это сделать.Перемещение PictureBox с использованием таймера

Я написал следующее:

int x = enemy.Location.X; 
    int y = enemy.Location.Y; 
    enemy.Location = new Point(x+-1, y); 

Это перемещает PictureBox за кадром, слева. После перемещения влево, я бы хотел, чтобы он двигался вправо, чтобы он двигался вперед и назад - в непрерывном цикле.

нуб, что я, я попробовал:

if (x < 40) 
     enemy.Location = new Point(x - -100, y); 
    else if (x > 400) 
     enemy.Location = new Point(x - 5, y); 

Это оказывается неудачным - коробка, кажется, не двигаться по достижению пикселя 40.

Есть простое решение, которое вы можете подталкивать я к себе, или я сам выкопал раннюю могилу ?!

Я должен указать: Я пишу в C# на требования к колледжу.

Cheers.

ответ

1

При перемещении влево, когда положение x достигает 0, измените направление и переместите вправо.

При движении вправо вам необходимо использовать ширину экрана за вычетом ширины вашего окна изображения.

System.Windows.SystemParameters.PrimaryScreenWidth 

редактировать:

Или еще лучше, использовать ширину вашей формы минус ширину PictureBox. Тогда он все равно будет работать, если он не будет максимальным.

+0

OK. Я пробовал это, но получаю ошибки, поэтому я должен что-то ускользнуть. Вот мой код. Постскриптум Разве нет простого способа сказать «Переместить влево много пикселей», чтобы достигнуть пикселя 0, поэтому Move Right> reach pixel, например. 100, так что Move Left 'так задан? P.S.S. благодаря! int x = enemy.Location.X; int y = enemy.Location.Y; enemy.Location = new Point (x + -1, y); if (x == 0) enemy.Location = ActiveForm.Width - enemy.Width; – Strife7

0

Установите переменную, которая переключает между отрицательными и положительными значениями, чтобы они двигались влево и вправо. Вы переключаете направление, умножая на -1. Затем вы просто добавляете эту переменную в текущее значение X следующим образом:

private int direction = -1; // this can be values other than 1 to make it jump farther each move 

    private void timer1_Tick(object sender, EventArgs e) 
    { 
     int x = enemy.Location.X + direction; 
     if (x <= 0) 
     { 
      direction = -1 * direction; 
      x = 0; 
     } 
     else if (x >= this.ClientRectangle.Width - enemy.Width) 
     { 
      direction = -1 * direction; 
      x = this.ClientRectangle.Width - enemy.Width; 
     } 
     enemy.Location = new Point(x, enemy.Location.Y); 
    } 
+0

Должен работать, но для улучшения параметров для регулировки скорости я бы рекомендовал сохранять координаты в поплавках. – TaW

Смежные вопросы