gpt4 book ai didi

c++ - 如何通过计算新的 x 和 y 位置来围绕其中心旋转 Sprite ?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:55:52 26 4
gpt4 key购买 nike

我正在使用 Dark GDK 和 C++ 创建一个简单的 2d 游戏。我正在旋转一个对象,但它从 sprite 的左上角开始旋转。

我有以下可用变量:

  • 播放器X
  • 玩家Y
  • 播放器宽度
  • 玩家高度
  • 旋转角度 (360 > x > 0)

是否有一种算法可以修改 Sprite 的枢轴点,而不是中心点?

这是一个代码示例:

void Player::Move( void )
{

if ( checkLeft() )
{
PlayerX -= PlayerSpeed;
if ( PlayerX < 0 )
PlayerX = 0;
}

if ( checkRight() )
{
PlayerX += PlayerSpeed ;
if ( PlayerX > 800 - PlayerWidth )
PlayerX = 800 - PlayerWidth;
}

if ( checkUp())
{
PlayerY -= PlayerSpeed;
if ( PlayerY < 0 )
PlayerY = 0;
}

if ( checkDown())
{
PlayerY += PlayerSpeed;
if ( PlayerY > 600 - PlayerHeight)
PlayerY = 600 - PlayerHeight;
}

RotateAngle += 5;
if(RotateAngle > 360)
RotateAngle -=360;

dbRotateSprite(Handle,RotateAngle);
dbSprite ( 1 , PlayerX , PlayerY , Handle );
}

编辑

我正在考虑为这个问题开放一些声誉,我还没有得到适合我的答案。如果有人可以提供完成这项工作的实际代码示例,我将非常高兴。

Blindy 的回答的问题在于,无论我简单地来回翻译多少, Sprite 仍然围绕左上角旋转并将其移动到某个地方围绕左上角旋转,然后将其移回相同位置立场一事无成。这是我认为会发生的事情:

alt text http://img248.imageshack.us/img248/6717/36512474.png

为了避免混淆,我创建了一个正在发生的事情的图像。左侧显示实际发生的情况,右侧显示我需要发生的情况。

alt text http://img101.imageshack.us/img101/1593/36679446.png

最佳答案

您需要执行以下操作:

  • 翻译(-playerx-playerwidth/2, -playery-playerheight/2)<
  • rotateangle旋转
  • 翻译(playerx+playerwidth/2, playery+playerheight/2)

我们的想法是让您的 sprite 以原点为中心,然后围绕原点旋转 (glRotate),在您获得旋转的 sprite 之后,您将其平移回原位。

注意:如果您的 sprite 最初以原点为中心,但有一个角不是 sprite 的实际中心,您首先要平移对象以使 sprite 的中心以原点为中心。所以如果你的 Sprite 在原点有左上角,你会平移 (-playerwidth/2, -playerheight/2),然后旋转然后平移 (playerx,playery)。

关于c++ - 如何通过计算新的 x 和 y 位置来围绕其中心旋转 Sprite ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1581778/

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