Sprite的SFML矢量和Sprite碰撞误差

问题描述

我正在用C ++和SFML制作游戏,但我遇到了一个严重的问题。 我想做的是,当我的玩家(又称人类角色)与一件物品发生碰撞时,则仅应删除该物品。例如,当玩家与“鸡肉”项目相撞时,则仅“鸡肉”项目应被擦除​​,而其他项目则不应该被擦除。 但是,当我运行程序时,当玩家与“鸡肉”物品发生碰撞时,其他物品都将被删除。而且我不知道为什么。我真的需要你的帮助。尽管我的英语不好,但感谢您的阅读!

这是我的代码:

def result = new File('result.txt')

def request = new groovy.json.JsonSlurper().parseText(sampler.getArguments().getArgument(0).getValue())
def requestType = request.TYPE
def requestArray = request.PAYLOAD.size()

def response = new groovy.json.JsonSlurper().parse(prev.getResponseData())
def responseArray = response.RESPONSE.size()
def timeTaken = prev.getTime()

result << requestType << ',' << requestArray << ',' << responseArray << ',' << timeTaken << System.getProperty('line.separator')

解决方法

    for (size_t i = 0; i < items.size(); i++)
    {
        // first problem: you are accessing item[i] instead of items[i]
        if (humanArr[index].getGlobalBounds().intersects(item[i].getGlobalBounds())) 
        {
            ...
            items.erase(items.begin()); // <---------- second problem is here
        }
     }

您不是要擦除要迭代的项目,而是要擦除第一个项目。您还访问了错误的数组。我建议更改item的名称,以免将来出现这种情况。解决方法如下:

    // Pull human bounds out of the loop so that we dont' access them each
    // iteration.
    const humanBounds = humanArr[index];
    for (auto iter = items.begin(); iter != items.end();)
    {
        if (humanBounds.intersects(iter->getGlobalBounds()))
        {
            iter = items.erase(iter); 
        }
        else
        {
            ++iter;
        }
    }

有关更多信息,请参见std::vector::erase

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...