2013-01-28 3 views
0

화면 전체에 빨간 선을 긋기 위해 모든 방법을 시도했습니다. GDI + 더블 버퍼링 (BufferedGraphics 클래스 사용)에서 WPF의 WriteableBitmap까지 모두 실패했습니다. 사용하는 타이머가 충분히 정확하지 않을 수도 있고 v-sync가 찢어 질 수도 있지만 불가능 해 보일 수도 있습니다. 우리는 2013 년을 맞았습니다. 하이 엔드 GPU를 사용하고 있습니다. 기존의 8 비트 SNES에 문제가없는 무언가를 재현 할 수 없습니다.화면 전체에서 선을 부드럽게 움직입니다.

누군가 DirectX 없이는 100 % 부드럽고 깜박임이없는 WinForm 코드 예제가 있습니까?

+0

얼마나 빨리 이동해야합니까? – Clemens

+0

32Hz에서 32 픽셀/초 – Muis

답변

0

WPF에서는 단순히 선 컨트롤을 움직이게 할 수 있습니다.

<Canvas> 
    <Line x:Name="line" 
     X2="{Binding X1, RelativeSource={RelativeSource Mode=Self}}" 
     Y2="{Binding ActualHeight, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Canvas}}" Stroke="Red" StrokeThickness="4"> 
    </Line> 
</Canvas> 

작성하고이 같은 방법으로 애니메이션을 시작할 것 : 바인딩하여 X2 속성 후속 라인의 X1 속성을 애니메이션

private void StartAnimation() 
{ 
    var animation = new DoubleAnimation 
    { 
     To = ActualWidth, // width of the window 
     Duration = TimeSpan.FromSeconds(ActualWidth/32), 
     RepeatBehavior = RepeatBehavior.Forever 
    }; 

    line.BeginAnimation(Line.X1Property, animation); 
} 

대신하고하자 당신은 할 수 또한 라인의 RenderTransform에 애니메이션을 적용하십시오.

<Canvas> 
    <Line Y2="{Binding ActualHeight, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Canvas}}" Stroke="Red" StrokeThickness="4"> 
     <Line.RenderTransform> 
      <TranslateTransform x:Name="transform"/> 
     </Line.RenderTransform> 
    </Line> 
</Canvas> 

StartAnimation 메서드는 이제 다음과 같습니다.

private void StartAnimation() 
{ 
    var animation = new DoubleAnimation 
    { 
     To = ActualWidth, // width of the window 
     Duration = TimeSpan.FromSeconds(ActualWidth/32), 
     RepeatBehavior = RepeatBehavior.Forever 
    }; 

    transform.BeginAnimation(TranslateTransform.XProperty, animation); 
} 
관련 문제