gpt4 book ai didi

c++ - 我的方形 tetrimonos 一直奇怪地旋转,但我的其他 tetrimonos 旋转正常?

转载 作者:行者123 更新时间:2023-11-28 06:40:05 24 4
gpt4 key购买 nike

所以在我的俄罗斯方 block 游戏中,我正在研究旋转。我发现了一种算法,它适用于除了正方形以外的每一 block (具有讽刺意味的是,这是唯一一个甚至不需要旋转的算法)。我知道我可以检查一下这件作品是否不是正方形,如果不是则旋转它,但这很便宜。所以这是代码:

pieceShape.setTexture(imgr.GetImage("square.png"));
for(int i = 0; i < 4; i++){
sf::RectangleShape rect;
if(i < 2)
rect.setPosition(pieceShape.getPosition().x, i * 10);
else
rect.setPosition(pieceShape.getPosition().x + 10, (i - 2) * 10);
rect.setSize(sf::Vector2f(10, 10));
rect.setFillColor(sf::Color::Blue);
pieceRectangles_.push_back(rect);
}
originCount = 10;

在这里,我正在创建构成一个正方形的所有四个 block 。 10 是每个框的宽度(每平方 4 个框),以像素为单位。对于所有其他部分,我将 originCount 设置为 5,以便原点落在创建的第一个框的中间。 originCount 在 RotateRight/Left 函数中发挥作用:

void GamePiece::RotateRight(){
int newx, newy;
sf::Vector2f origin(pieceRectangles_[0].getPosition().x + originCount, pieceRectangles_[0].getPosition().y + originCount);
for(int i = 0; i < 4; i++){
newx = (pieceRectangles_[i].getPosition().y + origin.x - origin.y);
newy = (origin.x + origin.y - pieceRectangles_[i].getPosition().x - 10);
pieceRectangles_[i].setPosition(newx, newy);
}
}

理论上,原点现在已设置为正方形 Sprite 的中间,盒子应该围绕该点旋转(即看起来甚至不动)。但是第一次点击时框向左移动 10 个像素,第二次点击时可能向上移动 2 个像素,等等。我显然遗漏了什么,但是什么?

最佳答案

您错误地计算了 origin。第一次旋转后 pieceRectangles_[0] 的坐标将为 (0, 10),因此下一次 origin 将计算为 (10, 20),这不是您想要的。

关于c++ - 我的方形 tetrimonos 一直奇怪地旋转,但我的其他 tetrimonos 旋转正常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26131120/

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