2011-09-14 4 views
0

문자열 경로에 텍스처 경로를 저장하는 간단한 방법이 있는지 궁금합니다. 나중에 텍스쳐를로드하기 위해 텍스쳐의 경로를 파일에 저장해야하는 게임에 세이브 시스템을 사용하고 있기 때문에 이것을 궁금해합니다. Texture2D.Name을 사용하려했지만 ""또는 null 만 반환합니다. 괜찮은 경로를 얻을 수 없지만 최소한 텍스처의 이름을 원합니다.C# 텍스처 콘텐츠 경로를 문자열로 저장하십시오.

EDIT : 조금 잘못 설명했거나 제대로 대답을 이해하지 못한다고 생각합니다. 새로운 시도를 설명합니다.

"적"클래스의 HP 등 위치를 저장하는 스크립트를 만들었습니다. 그런 다음 \ My Documents 폴더의 .txt 파일에 저장됩니다. 일단 정보를 다시로드하려면 Enemy (Vector2, int)의 새 인스턴스를 만듭니다. 그런 다음 정보를로드하고 int.Parse를 사용하여 문자열을 int로 변환합니다. > new Enemy(new Vector2(int.Parse(string1), int.Parse(string2)), int.Parse(string3)) <

내가 원하는 것은 나중에 텍스처의 이름을 저장하여 나중에 위에서 언급 한 비슷한 방법으로 다시로드하는 것입니다. (.txt에서 문자열로 검색하십시오.)

+1

왜 텍스처 관리자를 만들지 말고 관리자에서 텍스처를로드 할 때 텍스처 경로를 저장하십시오. – Ben

+0

텍스처를 디스크에서 동적으로로드합니까, 아니면 컨텐츠 프로젝트의 일부입니까? –

+0

내용의 일부입니다. – PeppeJ

답변

1

Texture2D는 메모리 내 객체이며, Texture2D와 파일간에 관계가 없습니다 (단, Texture2D는 파일에서로드되어 파일에 저장 될 수 있습니다). 로드 한 파일 이름을 기억하려면 텍스처를로드 할 때 파일 이름을 누르고 있어야합니다. 귀하의 코멘트에 대한 응답으로

편집 : 당신이 스크린 샷에 대해 얘기하지 않는 가정

,이 같은 일을해야합니다 :

FileStream fs = new FileStream("myFile.png", FileMode.OpenOrCreate); 
myTexture.SaveAsPng(fs, myTexture.Width, myTexture.Height); 
fs.Flush(); 
+0

파일에 저장하는 방법은 알고 싶습니다. – PeppeJ

+0

@ user669415, 내 답변 –

+0

을 업데이트했습니다. 이것은 내가 생각한 것이 아니지만 아마도 근처에서 편리 할 것입니다. 미래. 나는이 StreamWriter.WriteLine (. Texture2D "ThePathToTextureInContent") 다음 대략 로딩 같은 것을 더 생각 : 문자열의 =의 File.ReadAllLines (TheFileContainingTexturePath) Texture2D newTexture = Content.Load (들); – PeppeJ

1

대부분의 오브젝트에는 사용할 수있는 이름이 없으며, 파일 이름으로 사용하는 것이 안전하지 않을 수도 있습니다.

개체에 대한 좋은 이름을 기대하고 실제로 사용하지 않는 한 파일 이름으로 간단하게 Guid.NewGuid().toString()을 사용하는 것이 좋습니다. 안전하고 고유합니다.

0

ContentManagerRootDirectory 속성이 있습니다 콘텐츠 관리자 콘텐츠가 저장되는 폴더를 식별합니다. 경로는 실행 폴더와 관련이 있으므로 콘텐츠를로드 할 때 지정한 이름과 함께이 경로를 사용하여 콘텐츠에 대한 경로를 작성할 수 있습니다. 예를 들어

,이 같은 .PNG 텍스처로드하는 경우 :

Texture2D texture = Content.Load<Texture2D>("SomeTexture") 

그런 다음 질감의 경로는 다음과 같이 구축 될 수있다 :

string path = Content.RootDirectory + Path.DirectorySeparator + "SomeTexture" + ".png" 

참고가 어느 정도의 지식이 필요합니다 확장명을 알기 위해 파일 형식 또한 콘텐츠 항목 속성에서 이름을 변경하지 않았으므로 Load 호출에서 사용하는 키가 기본적으로 파일 이름과 일치합니다.

콘텐츠를 하위 폴더에 저장하는 경우 콘텐츠를 추가하면 전체 경로가 구축됩니다.

상대적인 디스크 경로가 아닌 전체 디스크 경로가 필요한 경우 실행 경로를 가져 와서 앞에 Content.RootDirectory을 추가 할 수 있습니다. Google은 그 점에서 당신의 친구입니다.

0

게임이 컨텐츠 프로젝트 기반 인 경우 경로 친척을 컨텐츠 프로젝트 경로 루트에 사용하는 것이 가장 쉽습니다. 스크립트에서

the relative path to file is "Textures/Animated/Rambo" 

: 콘텐츠 프로젝트에서

엔진

Texture = Content.Load<Texture2D>("Textures/Animated/Rambo");  

//Or if you don't want to load through Content 

Texture = Texture2D.LoadFromFile(Path.Combine(Content.RootDirectory, "Textures/Animated/Rambo")); 

에서

TextureAsset = "Textures/Animated/Rambo"; 

당신은 내가 당신 같은 방식으로 진행하는 것이 좋습니다 저장하려면 , 그리고 콘텐츠 프로젝트 폴더에 저장하도록 강요합니다.