여러 이미지를 그리는 데 DrawImage를 몇 번 사용한다고 가정 해 보겠습니다.그래픽에서 이미지를 삭제하는 방법
e.Graphics.DrawImage(newImage, destRect);
어떻게 내가 그것을 그린 그래픽 용지에서 특정 이미지를 삭제할 수 있습니까? 삭제를 위해 사용할 수있는 특정 기능이 있습니까?
나는 dispose
과 Rectangle.Empty
을 시도했지만 이미 종이에 그린 이미지는 실제로 삭제하지 않습니다.
여러 이미지를 그리는 데 DrawImage를 몇 번 사용한다고 가정 해 보겠습니다.그래픽에서 이미지를 삭제하는 방법
e.Graphics.DrawImage(newImage, destRect);
어떻게 내가 그것을 그린 그래픽 용지에서 특정 이미지를 삭제할 수 있습니까? 삭제를 위해 사용할 수있는 특정 기능이 있습니까?
나는 dispose
과 Rectangle.Empty
을 시도했지만 이미 종이에 그린 이미지는 실제로 삭제하지 않습니다.
우선 GDI + Graphics에서 "개체 삭제"개념이 없습니다. 모든 프레임에서 전체 클라이언트 영역을 다시 그려야합니다. 객체와 상태의 목록을 메모리에 보관하고 모든 프레임에서 전체 표면을 다시 그려야합니다. 그러나이 경우 깜박임과 부드럽 지 않은 사용자 경험이 발생할 수 있습니다.
DoubleBuffered
속성이 다음은이를 방지하기위한 몇 가지 도움말입니다. 이렇게하면 다른 것보다 훨씬 부드러운 애니메이션이 생성됩니다.결코 그리기 루프에서 Graphics 개체에 대한 참조를 얻으려면 CreateGraphics()
을 호출하면 안됩니다. 루프의 개체 및 상태 목록을 업데이트 한 다음 Invalidate()
을 컨트롤/양식에 호출하고 드로잉 프로세스를 Paint
이벤트로 수행하십시오.
하나의 오버로드로 Invalidate()
을 지정하면 무효화 (다시 그려야 함) 할 사각형을 지정할 수 있습니다. 진동하는 공의 현재 위치 (예 : 공 크기보다 20 픽셀 더 넓거나 큰 것)에서 "안전한"직사각형을 계측기로 전달한 다음 Paint
이벤트에서 해당 부분 만 그릴 수 있습니다.
성과를 더 높이려면 점수, 선수 이름 등의 보조 정보를 실제 "게임 게시판"외부에 유지하고 그리기 대신 일반 레이블/텍스트 상자를 사용할 수 있습니다.
krikara입니다 :
모든 프레임에서 처음부터 모든 것을 다시 그려야합니다. 여기에는 공, 패들 및 벽돌 목록 (점수 등)이 포함됩니다.
혼란이 있었기를 바랍니다.
이것은 현재 내가 작업하고있는 것입니다. – krikara
삭제하면 이전에 있었던 것을 다시 그리거나 단색으로 덮어 버리는 것을 의미합니까? 그래픽 위에 무언가를 그려 넣으면 그 밑에 있던 것은 무엇이든 사라집니다. –
글쎄 사각형을 제거 할 방법을 찾고있었습니다. 나는 공, 패들, 그리고 벽돌을 가지고있는 게임 브레이크 아웃 게임을 구현하려고합니다. 공이 벽돌에 닿으면 벽돌 (직사각형)을 제거해야합니다. 나는 벌써 벽돌에서 튀어 오르는 공을 가지고 있으며 공이 공백에서 벗어나지 않도록 각 벽돌을 영구적으로 제거하는 방법을 찾아 내려고 노력 중이다. – krikara
'Graphics' 객체로 "removed"라는 개념이 없습니다. 벽돌 뒤에있는 배경은 다른 곳에서 다시 그려야합니다. –