根据旋转获取精灵前面的位置

发布于 2024-12-29 02:59:13 字数 151 浏览 1 评论 0原文

我有一个根据触摸位置移动的精灵。我使用 box2d 进行碰撞,当精灵与另一个对象碰撞时,我将精灵旋转 180 度以远离碰撞,我的目标是将碰撞的精灵沿旋转方向移动 x 像素量,基本上给出反弹影响。

谁能告诉我如何根据旋转获得精灵前面 x 个像素的位置。

谢谢

I have got a sprite that moves based on touch location. I am using box2d for collision and when the sprite collides with another object i rotate the sprite 180 degree to face away from the collision and my aim is to move the sprite that collided x amount of pixels in the direction of rotation basically giving a bounce off affect.

Can anyone tell me how i can get a position which is x amount of pixels in front of the sprite based on the rotation.

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

你的笑 2025-01-05 02:59:13

您可以使用以下公式获得精灵所面向的方向:

public static Vector2 AngleToVector(float angle)
{
    return new Vector2((float)Math.Cos(angle), (float)Math.Sin(angle));
}

它返回的矢量将准确指向您要计算的点。将其标准化,然后乘以您想要达到的像素数。那应该可以解决问题。

returnedVector = AngleToVector(currentAngle);
returnedVector.Normalize();
returnedVector *= x;

上面是 C# 代码,但您应该能够将其转换为您的语言。

You can get the direction your sprite is facing with the following formula:

public static Vector2 AngleToVector(float angle)
{
    return new Vector2((float)Math.Cos(angle), (float)Math.Sin(angle));
}

The vector it returns will be pointing exactly towards the spot you are trying to calculate. Normalize it, then multiply it by the number of pixels you want to reach out to. That should do the trick.

returnedVector = AngleToVector(currentAngle);
returnedVector.Normalize();
returnedVector *= x;

The above is C# code, but you should be able to convert it to your language.

木格 2025-01-05 02:59:13

您可以使用精灵的 contentSize 或boundingBox 来计算应移动的像素量。考虑到节点锚定在它们的中心,您可以执行以下操作(仅在 x 轴上更改):

sprite.position = ccp(sprite.position.x - xAmount - sprite.contentSize.width / 2, sprite.position.y)

根据您需要将精灵移动到的方向以及您需要的 xAmount 来更改总和的符号。

干杯。

You can use the contentSize or boundingBox of the sprite to calculate the amount of pixels you should move. Considering that nodes are anchored in their center, you could do something like this (Changes on the x-axis only):

sprite.position = ccp(sprite.position.x - xAmount - sprite.contentSize.width / 2, sprite.position.y)

Change the signs of the sum according to the orientation you need to move the sprite towards to and the xAmount as you need.

Cheers.

灼疼热情 2025-01-05 02:59:13

您可以将本地点转换为全局点:

CGPoint global = [sprite convertoToWorldSpace:ccp(x, 0)];

You can just convert local point to global:

CGPoint global = [sprite convertoToWorldSpace:ccp(x, 0)];
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文