如何调整SKSpriteNode

时间:2016-03-18 02:34:08

标签: sprite-kit rotation trigonometry

我一直在制作一款顶级视图游戏,其中有两个虚拟游戏杆来控制角色。对于操纵杆,我使用了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,操纵杆库使用此代码(代码可从上面的链接获得,但只是为了使事情更容易和更容易获得):

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

有'旋转的问题。当我向上推动操纵杆(缩略图)时,旋转指向右侧。我已经使用NSLog来获取值,它显示在0左右。当我将joystic(上面的缩略图)推到左边时,字符指向上方,我的angularVelocity读数大约为1.5。将其向下推,将字符指向左侧,并给出-3读数。最后,当我向右推时,我将角色指向南方,并将角色读数大约为1.5。

同样的事情发生在'子弹'我开枪了。现在我使用光束,我在[{3}}的[POST]中找到了答案。为了方便起见,我在下面添加了它(不是我的答案,但我已将其更改为在我的游戏中使用):

[[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)当我向右推操纵杆时,我向下射击。

我认为我需要调整数学和三角学方程式,但数学不是我的强项,而且我对此比较陌生。

下面的图片是游戏的图像(它根本没有完成),你可以看到我向上推,但是我指向并向右射击。

2

注意:我的精灵默认也指向右边。我试着逆时针旋转我所有的精灵,这与精灵一起工作,但不适用于光束。

我非常感谢你的帮助。

提前谢谢。

1 个答案:

答案 0 :(得分:1)

如果向上为0 radians,那么您应该使用以下代码计算光束的xy

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