如何解决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
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。