gpt4 book ai didi

c++ - map 编辑器性能建议

转载 作者:行者123 更新时间:2023-11-28 00:39:32 24 4
gpt4 key购买 nike

首先,不要认为我在提出“SFML 和/或 C++ 性能问题”类型的问题。我对我一直在使用的这个 map 编辑器的性能不满意,我 99% 确定这是我的错。

目前我在 map 上放置图 block 的方式基本上是我有一个循环遍历 map 上的每个图 block 并检查鼠标是否悬停在其上的函数。我在另一个名为 handleMouseClick()

的函数中调用这个函数

如果您每次想要放置一个图 block 时只需单击一下,这将非常实用,但我的它有点像画笔。即使 map 上只有 500 个图 block ,如果您在屏幕上快速拖动它也会跳过图 block 。我需要能够创建具有 5000 多个图 block 的 map ,但我负担不起马马虎虎的性能。

我检查了我的代码并确保我没有制作不必要的拷贝。我很确定提高性能的最佳方法是更改​​我检查鼠标正在更改哪个图 block 的方式。

我唯一的想法是将 map 分成“ block ”,以便它检查鼠标所在“ block ”的图 block 。

最佳答案

使用数学。假设您有像素尺寸为 {tile.width, tile.height} 的图 block 。并且您的应用程序的窗口是 map View ,窗口的左上角位于像素 {view.x, view.y} 上。鼠标位置,相对于窗口的左上角是 {mouse.x, mouse.y}。您可以使用以下方法计算鼠标指向哪个图 block :

transformed_mouse.x = mouse.x + view.x;
transformed_mouse.y = mouse.y + view.y;

mouse_tile.x = transformed_mouse.x / tile.width;
mouse_tile.y = transformed_mouse.y / tile.height;

要在事件系统更新不够快的情况下处理拖动效果,请跟踪鼠标在上一次迭代中的位置,并使用 Bresenham's line algorithm填充鼠标当前指向的图 block 与鼠标先前指向的图 block 之间的所有图 block 。

关于c++ - map 编辑器性能建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19546214/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com