Game Programming using Qt 5 Beginner's Guide
上QQ阅读APP看书,第一时间看更新

A binary space partition tree

The scene constantly keeps a record of the position of the item in its internal binary space partition tree. Thus, on every move of an item, the scene has to update the tree, an operation that can become quite time-consuming, and also memory consuming. This is especially true of scenes with a large number of animated items. On the other hand, the tree enables you to find an item (for example, with items() or itemAt()) incredibly quickly, even if you have thousands of items.

So when you do not need any positional information about the items—this also includes collision detection—you can disable the index function by calling setItemIndexMethod(QGraphicsScene::NoIndex). Be aware, however, that a call to items() or itemAt() results in a loop through all items in order to do the collision detection, which can cause performance problems for scenes with many items. If you cannot relinquish the tree in total, you can still adjust the depth of the tree with setBspTreeDepth(), taking the depth as an argument. By default, the scene will guess a reasonable value after it takes several parameters, such as the size and the number of items, into account.