2012-05-10 30 views
8

Tôi đang cố gắng vẽ các hình cầu cho một trò chơi, trong WPF. Các mảnh được vẽ như Elipses với RadialGradientBrushs. Như bạn có thể thấy bên dưới, các mảnh màu đen của tôi trông tuyệt vời, nhưng rất khó để có được những màu trắng có độ sâu mà không làm cho chúng trông xám.Vẽ các hình cầu với RadialGradientBrush

enter image description here

Tôi hiện đang sử dụng:

private readonly Brush _whitePieceBrush = new RadialGradientBrush(Colors.Snow, Colors.Ivory); 
private readonly Brush _blackPieceBrush = new RadialGradientBrush(Colors.DarkGray, Colors.Black); 

... 

using (DrawingContext dc = _piecesVisual.RenderOpen()) 
{ 
    .... 
    Brush brush = piece.Value.IsBlack ? _blackPieceBrush : _whitePieceBrush; 
    var pen = new Pen(new SolidColorBrush(Colors.Black), 0.5); 
    dc.DrawEllipse(brush, pen, new Point(posX, posY), 15, 15); 
    ... 

} 

Các vòng tròn màu đen xung quanh các mảnh trắng không giúp đỡ, nhưng với họ ra, nó trông thậm chí còn tồi tệ hơn. (Nếu tôi có thể tìm thấy cách tốt để vẽ chúng trông đẹp hơn, tôi sẽ xóa nó)

+0

vít nó trông vui vẻ tôi muốn chơi nó: D – RhysW

+2

khi nó được thực hiện và đệ trình (nó là dành cho một dự án uni), tôi có thể sẽ tạo một liên kết đến nguồn và trình cài đặt (sẽ liên kết tới bài chính) –

+0

diễn giải Field of Dreams ở đây nhưng "Biên dịch nó, và chúng sẽ đến" – RhysW

Trả lời

2

tôi đã cố gắng:

private readonly Brush _whitePieceBrush = new RadialGradientBrush() 
    { 
     GradientStops = new GradientStopCollection 
     { 

      new GradientStop(Colors.WhiteSmoke,0.3), 
      new GradientStop(Colors.LightGray, 1.0), 


     } 
    }; 
    private readonly Brush _whitePieceBorder = new SolidColorBrush(Colors.Silver); 

Board Picture


Lấy lời khuyên Clemens' và họ có cho khỏi trung tâm: Với họ một chút ra khỏi trung tâm: Tôi nghĩ rằng đây sẽ giúp càng đen hơn màu trắng, nhưng vẫn còn và nâng cao

private static readonly Point _lightSource = new Point(0.3, 0.35); 

    private readonly Brush _blackPieceBrush = new RadialGradientBrush(Colors.DarkGray, Colors.Black) 
    { 
     GradientOrigin = _lightSource 
    }; 
    private readonly Brush _blackPieceBorder = new SolidColorBrush(Colors.Black); 

    private readonly Brush _whitePieceBrush = new RadialGradientBrush() 
    { 
     GradientOrigin = _lightSource, 
     GradientStops = new GradientStopCollection 
     { 

      new GradientStop(Colors.WhiteSmoke,0.3), 
      new GradientStop(Colors.LightGray, 1.0), 

     } 
    }; 
    private readonly Brush _whitePieceBorder = new SolidColorBrush(Colors.Silver); 

enter image description here

+0

Có vẻ hoàn hảo. Bạn cũng cố gắng làm cho nó một chút off-trung tâm? – Clemens

+0

Có tôi đã làm (thực sự ngay lập tức sau khi tải lên hình ảnh đầu tiên) –

12

Điều gì tương tự như sau. Tiêu điểm là một chút trung tâm, mà tôi tìm thấy cải thiện ấn tượng không gian.

enter image description here

<Ellipse Width="60" Height="60"> 
    <Ellipse.Fill> 
     <RadialGradientBrush GradientOrigin="0.3,0.3"> 
      <RadialGradientBrush.GradientStops> 
       <GradientStop Color="White" Offset="0"/> 
       <GradientStop Color="White" Offset="0.3"/> 
       <GradientStop Color="#FFF0F0F0" Offset="1"/> 
      </RadialGradientBrush.GradientStops> 
     </RadialGradientBrush> 
    </Ellipse.Fill> 
</Ellipse> 
+0

Không phải là tuyệt vời cho tôi vì một lý do nào đó. Dải thực sự rõ ràng, trên máy tính của tôi –

Các vấn đề liên quan