だから、私はここで奇妙な問題を抱えています。Windows、Xbox 360、および Windows Phone 7 で同じ XNA コードを使用しています。ほとんどのコードを動作させることができますが、Level が Windows Phone 7 バージョンで TileMap を呼び出そうとしても、TileMap に到達しません。ただし、Windows と Xbox 360 では問題なく動作します。ここで他に何かしなければならないことはありますか?
さらにいくつかの詳細。Windows Phone バージョンでは、特定の値に対してデバッガーから「式を評価できませんでした」というメッセージが表示されます。Windows版では発生しません。同様に、呼び出している画像のサイズが約 1 KB であり、.map ファイルが 3x3 マトリックスしか作成しない場合でも、それを十分に長く続けると、OutOfMemoryException が発生します。
GameplayScreen.cs
private Level level;
...
public override void LoadContent()
{
if (Content == null)
Content = new ContentManager(ScreenManager.Game.Services, "Content");
//Create Sprite Batch for drawing textures
//spriteBatch = new SpriteBatch(GraphicsDevice);
//Load fonts
hudFont = Content.Load<SpriteFont>("Fonts/hud");
lifeIcon = Content.Load<Texture2D>("Sprites/Player/lifeIco");
//Load overlays
//winOverlay = Content.Load<Texture2D>("Overlays/win");
//loseOverlay = Content.Load<Texture2D>("Overlays/lose");
try
{
MediaPlayer.IsRepeating = true;
MediaPlayer.Play(Content.Load<Song>("Sounds/music"));
}
catch { }
LoadNextLevel();
//Camera.InitializeScreen(graphics);
base.LoadContent();
} //end LoadContent
/// <summary>
/// Loads the next level.
/// </summary>
public void LoadNextLevel()
{
//Set the next level
levelIndex = (levelIndex + 1) % numberOfLevels;
if (level != null)
level.Dispose();
level = new Level(ScreenManager.Game.Services, levelIndex);
} //end LoadNextLevel()
Level.cs
private TileMap levelMap;
public Level(IServiceProvider service, int levelIndex)
{
//Create content manager for current level.
content = new ContentManager(service, "Content");
//Load level map
//This is where the code hangs
levelMap = new TileMap(this, levelIndex, content.Load<Texture2D>(@"Tiles/tiles"));
//Load sounds
//exampleSound = content.Load<SoundEffect>("Sounds/example");
//Initialize Camera
Camera.InitializeLevel(levelMap);
player = new Player(this, start);
} //end Level
TileMap.cs
public TileMap(Level level, int levelIndex, Texture2D tileSheet)
{
// Never reaches here on Windows Phone 7 Version
// Comes right here on Windows and Xbox 360 Version
this.tileSheet = tileSheet;
string levelPath = string.Format("Content/Levels/{0}.map", levelIndex);
私がすでに提案し、やろうとしたいくつかのこと:
Tile Map の呼び出しの外で「Tiles/tiles」を呼び出そうとしましたが、タイルを DXT 圧縮で圧縮しようとしました。「タイル/タイル」は完全に正常にロードされますが、呼び出しはまだ失敗し、OutOfMemoryException が発生します。私のコンテンツの合計ファイル サイズは 1.23 MB です。