如何调整 SKSpriteNode 的旋转

How to adjust rotation of a SKSpriteNode

我一直在开发俯视图游戏,其中有两个虚拟操纵杆来控制角色。对于操纵杆,我使用了 Spritekit-Joystick。角色自动射击。右摇杆是用来改变方向的,我实现了这个功能来移动角色:

-(void)update:(CFTimeInterval)currentTime {
    /* Called before each frame is rendered */
    if (self.imageJoystick.velocity.x != 0 || self.imageJoystick.velocity.y != 0)
    {
        myCharacter.zRotation = self.imageJoystick.angularVelocity;
    }

}

对于 self.imageJoystick.angularVelocity,Joystick 库使用此代码(代码可从上面的 link 获得,但只是为了使事情更容易和更容易获得):

    angularVelocity = -atan2(thumbNode.position.x - self.anchorPointInPoints.x, thumbNode.position.y - self.anchorPointInPoints.y);

旋转有问题。当我向上推动操纵杆(thumbnode)时,旋转指向右侧。我使用 NSLog 获取值,它显示大约 0。当我将操纵杆(上面的拇指节点)向左推时,角色指向上方,我得到大约 1.5 的角速度读数。将其向下推会将字符指向左侧并给出 -3 读数。最后,当我向右推时,我将角色指向南方,读数约为 1.5。

同样的事情发生在 'bullets' 我射出去的时候。现在我正在使用光束,我在此处 [POST] 中找到了答案2。为了您的方便,我在下面添加了它(不是我的答案,但我已经将其更改为在我的游戏中使用):

[[self childNodeWithName:@"RayBeam"]removeFromParent];
int x = myCharacter.position.x + 1000 * cos(myCharacter.zRotation);
int y = myCharacter.position.y + 1000 * sin(myCharacter.zRotation);

SKShapeNode* beam1 = [SKShapeNode node];
CGMutablePathRef pathToDraw = CGPathCreateMutable();
CGPathMoveToPoint(pathToDraw, NULL, myCharacter.position.x, myCharacter.position.y);
CGPathAddLineToPoint(pathToDraw, NULL, x, y);
beam1.path = pathToDraw;
[beam1 setStrokeColor:[UIColor redColor]];
[beam1 setName:@"RayBeam"];
[self addChild:beam1];

同样的事情发生了。当我 1) 向上推操纵杆时,我向右射击。 2) 将操纵杆向左推,我向上射击。 3)向下推,我向左射击,4)当我向右推操纵杆时,我向下射击。

我想我需要修改数学和三角方程,但数学不是我的强项,而且我对这方面比较陌生。

下图是游戏的画面(完全没有完成),你看我是向上推,但我是指向,向右射击。

注意:默认情况下我的精灵也是指向右边的。我尝试逆时针旋转我所有的精灵,这适用于精灵,但不适用于光束。

非常感谢您的帮助。

提前谢谢你。


如果 up 是 0 radians 那么您应该计算光束的 xy

int x = myCharacter.position.x - 1000 * sin(myCharacter.zRotation);
int y = myCharacter.position.y + 1000 * cos(myCharacter.zRotation);