2011-09-16 7 views
2

모두! XNA/C#에서 platformer를 개발 중이며 GraphicsDevices에 문제가 있습니다. 나는 XNA가 많은 메소드에서 GraphicsDevices를 필요로한다고 들었지만, 내 프로젝트에서 많은 클래스를 갖기 때문에 나에게 문제가되는 LoadContent() 이후에만 호출 될 수있다. GraphicsDevice는 어떻게받을 수 있습니까?다른 클래스에서 XNA GraphicsDevice를 호출 할 수 없습니다.

미리 감사드립니다.

편집 : 당신의 게임 생성자에서 지금

GraphicsDeviceManager graphics; 

을과 같이 초기화 : 당신의 게임 클래스에서 http://pastebin.com/vrYhA6MA

+1

도움이 필요한 곳에서 특정 코드를 게시 할 수 있습니까? 많은 수업을 갖는 것이 문제가되어서는 안됩니다. –

답변

3

그래서 같은 GraphicsDeviceManager 변수를 추가 :

을 여기에 코드 예제입니다
graphics = new GraphicsDeviceManager(this); 

Initialize 및 LoadContent 메서드 내에서 Game 생성자 다음에 graphics.GraphicsDevice 변수를로드해야합니다. 메서드에 전달하고 DepthStencilState와 같은 설정을 지정할 수 있습니다.

+0

이미 정의되어 있습니다. 하지만 내 수업에서 Game 클래스의 범위가 없습니다. 그것으로부터 상속하거나 인스턴스화해야합니까? 편집 : 여기에 내 오류 : 'SMLimitless.Main.graphics'보호 수준으로 인해 액세스 할 수 있습니다. –

+0

Game 클래스를 상속하고 거기에서 필요한 모든 것을 (최상위 레벨에서) 수행해야합니다. 이것이 XNA가 정상적으로 작동하는 방식입니다. 그러나 다른 곳에서 해당 그래픽 객체에 액세스하려면 해당 객체를 공개합니다. 이렇게하려면 Game에서 상속 받아 Public GraphicsDeviceManager 변수를 만들어야합니다. –

+0

그게 효과가있는 것 같습니다! 감사! –

0

다른 클래스의 생성자를 통해 Game 객체에 대한 참조를 전달하는 것은 항상 제가 선호하는 방법이었습니다. 그렇게 전화 할 수 있습니다

this.Texture = game.Content.Load<Texture2d>("Fred"); 

예를 들면.

+0

"using SMLimitless.Game;"와 유사합니까? –

+0

네, 그렇습니다. 저는 Update 클래스와 Draw 메소드가있는 게임 클래스에 인터페이스가 있습니다. Game 클래스는 같은 이름의 자체 메서드 내에서 해당 인터페이스에있는 메서드를 호출하기 만합니다. 그러면 할 수있는 것은 메뉴 나 레벨이 될 때까지 게임에 원하는 것을 "플러그"하는 것입니다. 그런 다음 해당 항목 중 하나의 생성자에서 Game 객체를 가지고 개인 참조를 유지하면됩니다. 그때부터 게임 오브젝트와 레벨/메뉴 내에서 컨텐츠 등 공개 한 모든 속성에 액세스 할 수 있습니다. – Nick

관련 문제