2017-02-04 3 views
0

У меня есть 2 объекта изображения. Я хочу, чтобы оба они двигались справа налево. Если вы выходите из видимой панели, я заменяю ее положение на начальную точку. Так что на экране всегда есть 2 картинки.Изображение обновляется при обновлении новой позиции

Если я не использую таймер, нарисованы 2 картины. Но если я использую таймер с тиковым событием, обновляющим свои позиции, чтобы заставить их двигаться, отображается только 1 изображение, и оно продолжает мигать, отставание ...

Ниже приведен мой код. Я не знаком с C#. Цените любую помощь. Спасибо.

Сроки таймера = 30; Форма 1:

public partial class Form1 : Form 
{ 
    Background bg1 = new Background(); 
    Background bg2 = new Background(800); 

    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void flowLayoutPanel1_Paint(object sender, PaintEventArgs e) 
    { 
     bg1.paint(e); 
     bg2.paint(e); 
    } 

    private void Timer_Tick(object sender, EventArgs e) 
    { 
     bg1.updatePosition(); 
     bg2.updatePosition(); 

     this.Refresh(); 
    } 
} 

фона:

class Background 
{ 
    int bg_width = 800; 
    int bg_height = 500; 

    Image bg; 
    Rectangle wb; 
    private static int x = 0; 

    public Background() 
    { 
     bg = Properties.Resources.bg; 
     wb = new Rectangle(x, 0, bg_width, bg_height); 
    } 

    public Background(int custom_x) 
    { 
     x = custom_x; 
     bg = Properties.Resources.bg; 
     wb = new Rectangle(x, 0, bg_width, bg_height); 
    } 

    public void paint(PaintEventArgs e) 
    { 
     Graphics g = e.Graphics; 
     g.DrawImage(bg, wb); 
    } 

    public void updatePosition() 
    { 
     x--; 
     if (x == -800) 
     { 
      x = 801; 
     } 
     wb.Location = new Point(x, 0); 
    } 
} 
+0

Ваш интервал таймера составляет 0,03 секунды, это то, что вы действительно хотите? –

+2

Двойная буферизация FTW! –

+0

Что вы нацеливаете: Winforms, WPF, ASP ..? __Always__ правильно помечайте свой вопрос! - Объясните, каковы ваши _pictures_ на самом деле! – TaW

ответ

-1

Im не большой поклонник визуального таймера студии, но я бы попытаться сохранить интервал таймера как можно и переместить 2 фотографии меньше за обновление, что позволит решить проблемы с задержкой.

и это показывает только одно изображения обусловлен

wb.Location = new Point(x, 0); 

устанавливает шнуры обоего картинок х и 0 -> там внутри друг от друга -> только второй видна

заменяющих с этим следует исправить это

wb.Location = new Point(x, wb.Location.y); 

это, как правило, делает так, чтобы шнур y не менялся.

+0

Благодарим за попытку помочь, но заменив 0 на wb.Location.y не имеет никакого смысла. –

+0

Это был бы способ решить вашу проблему, но если вы не захотите ее попробовать, это зависит от вас. – Aaron

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