【发布时间】:2016-11-19 06:37:15
【问题描述】:
我目前正在创建一个 2d 瓷砖游戏,我想知道瓷砖是否必须移动或角色。
我问这个问题是因为我已经创建了“2d 瓦片地图”,但它运行得太慢,我无法修复它。我现在尝试了一切,结果是我得到了 30 fps。
它运行太慢的原因是因为每 1ms 有一个计时器,瓷砖正在重新绘制。但我不知道如何解决这个问题。
这就是我制作地图的方式:
public void makeBoard()
{
for (int i = 0; i < tileArray.GetLength(0); i++)
{
for (int j = 0; j < tileArray.GetLength(1); j++)
{
tileArray[i, j] = new Tile() { xPos = j * 50, yPos = i * 50 };
}
}
}
在这里,我每 1 毫秒或更高的时间重绘图块和精灵:
private void Wereld_Paint_1(object sender, PaintEventArgs e)
{
//label1.Text = k++.ToString();
using (Graphics grap = Graphics.FromImage(bmp))
{
for (int i = 0; i < tileArray.GetLength(0); i++)
{
for (int j = 0; j < tileArray.GetLength(1); j++)
{
grap.DrawImage(tileArray[i, j].tileImage, j * 50, i * 50, 50, 50);
}
}
grap.DrawImage(player.movingObjectImage, player.xPos, player.yPos, 50, 50);
grap.DrawImage(enemyGoblin.movingObjectImage, enemyGoblin.xPos, enemyGoblin.yPos, 50, 50);
groundPictureBox.Image = bmp;
// grap.Dispose();
}
}
这是具有特定间隔的计时器:
private void UpdateTimer_Tick(object sender, EventArgs e)
{
if(player.Update()==true) // true keydown event is fired
{
this.Invalidate();
}
label1.Text = lastFrameRate.ToString(); // for fps rate show
CalculateFrameRate(); // for fps rate show
}
【问题讨论】:
-
只画应该出现在屏幕上的图块,用相机帮你画东西:stackoverflow.com/questions/9997006/…
-
@user3814613 首先,感谢您的评论!我真的不明白你在说什么。我必须重新绘制所有的瓷砖,因为我想让瓷砖移动,这样看起来玩家正在“世界”中行走。另外,我从来没有使用过相机功能,也不知道从哪里开始。
-
您是否阅读了该评论中链接的帖子?如果你有,你就不必说我不知道从哪里开始。人们提供其他问题的链接以提供帮助;在他们为您完成工作后忽略它们并不是很好。
-
@Ken White 我确实读过它,它是关于 Java 的。据我所知,C# 没有相机控制。这就是为什么我问我应该如何实现“相机控制”或以良好的性能重新绘制每个图块。也许你能帮助我? :)
-
忽略问题所涉及的语言,并阅读链接答案中解释的概念。它包含许多有关如何处理绘图的有用信息。将相机视为用户的视角 - 如果您正在拍摄电影,它就是镜头前。阅读以了解这些想法;这并不总是与所使用的编码语言有关。
标签: image performance graphics invalidation redraw