2012-11-12 6 views
1

간단한 게임을 만들려고하고 있는데, 지금까지 사용자 입력을 캡처 할 수 있지만 이미지를 제대로 인쇄하기 위해 뷰를 가져올 수 없습니다. image라는 리소스가 있다면 displayOn에서이 이미지를 표시하기 위해 개별 스프라이트를 어떻게 할당합니까? 난 내가 시도 초기화 방법, 예를 들어, 많은 방법을 시도 :인스턴스의 클래스 리소스에 액세스하는 방법

self image := Classname image 

하지만 오버 플로우가 발생하고, 내가 작업을 저장하지 않고 폐쇄 된 시각을 강요했다. 이 작업을 수행하는 좋은 방법은 무엇입니까?

답변

4

보통 인스턴스 변수에 저장할 필요없이 직접 클래스 측 메소드에 액세스 할 수 있습니다. 당신이 그것을 할 필요가있는 경우

myMethodsWhoNeedsAnImage 
    | image | 
    image := self class imageStoredInClassSide. 
    "now do something with image" 

은 확실히 당신이 당신의 예에서 재판 일을 할 수는 없지만, 당신이 할 수 있습니다 :

initialize 
    super initialize. 
    image := ClassWithImage image. 

또는

initialize 
    super initialize. 
    self image: ClassWithImage image. "This is a setter method" 

중 하나를 예를 들어 이러한 접근법은 효과가있다. 그렇지 않은 경우, 대부분 클래스 문제에 액세스하지 않고 다른 곳에 문제가있을 수 있습니다.

+0

한 번 더 질문 : asRetainedMedium 메시지는 무엇을합니까? 나는 이것이 이해되지 않는다는 오류를 얻는다. 내 클래스 변수 리소스에있는 그림을 가지고, 내가 이미지를 요청하면 CashedImage를 반환합니다 : (# picture) –

+0

나는 내 인생에서 그 메시지를 본 적이 없다 :). 아마도 당신은 어떤 스몰 토크를 사용하고 있는지 명확히 할 수 있습니까? – EstebanLM

+1

비주얼 웍스 메시지입니다. VW에서는 비트 맵을 저장하는 두 가지 방법이 있습니다. 이미지는 Smalltalk 객체를 사용하여 픽셀 색상과 팔레트를 저장합니다. Pixmap은 네이티브 운영체제의 이미지 객체에 핸들을 사용합니다. 픽스맵은 일반적으로 이미지보다 훨씬 빠르게 표시됩니다. asRetainedMedium이라는 메시지는 Images가 Pixmap으로 변환 할 수있는 메시지입니다. CachedImage는 Image와 해당 Pixmap을 모두 포함 할 수있는 객체입니다. 그것을 그리려고하면 pixmap이 nil이되면 Pixmap을 만들고 캐시 된 이미지에 캐시하기 위해 이미지에서 asRetainedMedium을 실행합니다. –

관련 문제