2012-02-15 6 views
1

작은 게임 엔진을 Silverlight에 넣으려고합니다.Silverlight에서 캔버스에 이미지를 동적으로 그립니다.

그러나 저는 현재 다소 낮은 수준의 문제에 직면 해 있습니다 : 다른 위치에 이미지를 그릴 수있는 능력. 코드를 통해이 작업을 동적으로 수행하려고합니다. XAML의 모든 내용은 적어도 다소 정적 인 경향이 있습니다.

기본 '격자'를 캔버스로 변경하여 어디서든 그릴 수 있도록했습니다. 아마 이것은 나쁜 생각 이었지만, 나는 모른다. 모든 조언이 도움이 될 것입니다.

 InitializeComponent(); 
     Image img = new Image(); 
     img.Source = new BitmapImage(new Uri("Generic URL here")); 
     ((BitmapImage)(img.Source)).DownloadProgress += new System.EventHandler<DownloadProgressEventArgs>(TestEventHandler); 

     Rect position = new Rect(new Point(25, 25), img.RenderSize); 

     LayoutRoot.Children.Add(img); 
     img.Arrange(position); 

위의 원래 시도는 위의 Arrange 기능을 사용하여 이미지를 새 위치로 '이동'했습니다. 그러나, 어떻게 작동하는지 모르겠어, 위의 코드를했을 때 이미지가 더 이상 화면에 표시되지 않습니다.

관련없는 질문 : URL을 통해로드되지 않도록 Silverlight 응용 프로그램에서 이미지를 저장할 수 있습니까? 나는 그것이 가능하다는 것을 압니다, 그러나 제가 진정으로 구하는 것은 무엇을 의미합니까?

도움을 주셔서 감사합니다. 이미지의

-Stefan Zuefeldt

답변

1
  • 대신 [그리드] 캔버스를 사용하는 것이 좋습니다. 캔버스 당신은 그것을 할 수 있습니다, 당신은 그 아이의 위치가

  • 이 점 P에 이미지를 이동하려면 제어 변경하려는 경우 그리드보다 낫다 :

    • 캔버스에 이미지를 추가
    • 호 Canvas.SetLeft (IMG PX는) 및 Canvas.SetTop (IMG, PY)


  • 이미지를 xap에 추가하려면 이미지를 프로젝트에 쉽게 추가하고 이미지의 빌드 유형을 "콘텐츠"(기본값은 없음 또는 자원, 확실하지 않음)로 설정 한 다음 상대 URL : img.Source = 새 BitmapImage (새 Uri ("/ tmp.jpg", UriKind.Relative));
1

종속성 속성은 캔버스에 이미지를 찾습니다 설정해야합니다.

Canvas.SetTop , Canvas.SetLeft

두 번째. 물론 이미지는 Silverlight 응용 프로그램 내에 저장 될 수 있습니다. 하지만 빌드 동작은 소스 리소스로 설정해야합니다.

img.Source = new BitmapImage(new Uri("/MyNameSpace;components/images/someimage.png", UriKind.Relative)); 
1

XAML은 고정 될 필요는 없습니다. XAML을 데이터 모델과 결합하고 데이터 바인딩을 사용하면 XAML에서 사용할 수 있습니다.

당신은 캔버스에 항목을 이동할 수는, 당신이 원하는 것은 종속성 속성 Canvas.TopCanvas.Left

here 당신이 묘사하는 것처럼 간단한 애니메이션에 대해 조금 튜토리얼입니다. "실버 라이트 게임 자습서"로 google을 사용한다면 톤 수와 톤의 블로그, 기사 및 데모와 소스 코드를 찾을 수 있습니다.

기타 관련없는 질문 ... 애플리케이션에 이미지를 포함시킬 수 있습니다. here은 파일 및 이미지에 액세스하는 대부분의 방법에서 좋은 출처입니다.

1

나는 언젠가 기본 UI로 SL 응용 프로그램을 작업 해 왔습니다. 내 작은 경험을 바탕으로 몇 가지 힌트를 드릴 수 있습니다.

기본 '그리드'를 캔버스로 바꿨으므로 그릴 수 있습니다. 아마 이것은 나쁜 생각 이었지만 ...

나는 그것이 명백한 선택이라고 생각합니다.이 심판 절대 위치를 기반으로 레이아웃을 만들려면 SL Layout - Absolute Layout

에서 캔버스에 위치 물건에 관해서는, 당신은 캔버스와 그리드를 교체해야합니다. ... 캔버스에 컨트롤을 배치하려면, 당신은 컨트롤에 다음과 같은 연결 속성을 설정합니다 위해 Canvas.LEFT & Canvas.Top


.. 그것이 가능한 Silverlight 응용 프로그램으로 이미지를 저장하는 것입니다 , 으로 URL을 통해로드하지 않으셨습니까? 나는 그것이 가능하다는 것을 알고 있지만, 내가 무엇을 묻는지를 의미하는 것은 무엇입니까? (다운로드 예를 들어, 완료시)

당신은 항상 (따라서 메모리에) 사전 또는 떨어지게에서 이미지와 모양을 유지할 수 있습니다 그러므로 resizing the images 과도한 메모리 사용에서 당신을 저장할 수 있습니다.

이것은 내 마음에 떠오르는 것들입니다. 행운을 빕니다.

관련 문제