好的,我在这里有一个奇怪的。我正在尝试使用Windows窗体创建一个基本的tile引擎,但我的一些代码只是......没有发生。我会发布有问题的块。
private void MapEditor_Load(object sender, EventArgs e)
{
LoadImageList();
FixScrollBarScales();
cboCodeValues.Items.Clear();
cboCodeValues.Items.Add("ENEMY");
cboCodeValues.Items.Add("CHEST");
cboCodeValues.Items.Add("NPC");
for (int x = 0; x < 100; x++)
cboMapNumber.Items.Add(x.ToString().PadLeft(3, '0'));
cboMapNumber.SelectedIndex = 0;
TileMap.EditorMode = true;
backgroundToolStripMenuItem.Checked = true;
}
这应该在表单加载时调用,对吗?代码潜入LoadImageList(),其中包含:
private void LoadImageList()
{
string filepath = Application.StartupPath +
@"\Content\Textures\IndoorTileSet.png";
Bitmap tileSheet = new Bitmap(filepath);
int tilecount = 0;
for(int y = 0; y < tileSheet.Height / TileMap.TileHeight; y++)
{
for(int x = 0; x < tileSheet.Width / TileMap.TileWidth; x++)
{
Bitmap newBitmap = tileSheet.Clone(
new System.Drawing.Rectangle(
x * TileMap.TileWidth,
y * TileMap.TileHeight,
TileMap.TileWidth,
TileMap.TileHeight),
System.Drawing.Imaging.PixelFormat.DontCare);
imgListTiles.Images.Add(newBitmap);
string itemName = "";
if(tilecount == 0)
itemName = "Empty";
if(tilecount == 1)
itemName = "Floor";
listTiles.Items.Add(new ListViewItem(itemName, tilecount++));
}
}
}
位图正确加载,但整个MapEditor_Load方法停止工作。 tileCount似乎是调试器中的局部变量,其值为0,但调试器从不在分配的行上执行断点。我完全不知道为什么会这样做,这让我疯了。有帮助吗? 哦,我把位图加载到try / catch块中只是为了看看它是否以奇怪的方式处理异常,但我没有运气。它没有抛出异常。我用更新版本替换了IndoorTileSet后立即开始出现这个问题。我已经尝试过干净的重建,但没有成功。
我读到了一个有类似问题的人的事情,他最后不得不宣称某事是一个班级的实例,但这个帖子不够详细,我不知道这是不是我出错的地方,或者我可能需要声明作为一个实例让它工作......或者实例甚至意味着什么。
答案 0 :(得分:0)
我不确定LoadImageList
()方法中的代码,但我建议您使用BackgroundWorker或Control.Invoke来提高应用程序的响应能力。
答案 1 :(得分:0)
试试这个:
Bitmap tileSheet = (Bitmap)Bitmap.FromFile(filepath);
答案 2 :(得分:0)
问题是,从表面上看,我的Bitmap代码抛出了一个FileNotFound异常,这意味着我的文件路径不好。我能解决这个问题。程序实际上没有抛出异常,并且似乎忽略代码的问题是64位操作系统无法在所有实例中处理异常调用的问题。可以在this site找到详细信息以及解决此问题的修补程序链接。