iOS雪碧套件SKSpriteNode';设置的位置不工作

iOS雪碧套件SKSpriteNode';设置的位置不工作,ios,sprite-kit,Ios,Sprite Kit,我正在制作一款iOS游戏,它使用SKSpriteNode来创建和控制角色以及敌人。我过去曾使用过[mySprite setPosition:myPosition],效果非常好。现在这根本不起作用。我在我的代码中做了一些相当大的更改,但没有任何影响。它在一个文件下工作,但在另一个文件中没有相同的代码。我想知道这是否与我使用外部显示器而不是设备屏幕有关。我使用以下代码初始化SKView //set up the skview self.skView = self.mirroredScreenView

我正在制作一款iOS游戏,它使用
SKSpriteNode
来创建和控制角色以及敌人。我过去曾使用过
[mySprite setPosition:myPosition]
,效果非常好。现在这根本不起作用。我在我的代码中做了一些相当大的更改,但没有任何影响。它在一个文件下工作,但在另一个文件中没有相同的代码。我想知道这是否与我使用外部显示器而不是设备屏幕有关。我使用以下代码初始化
SKView

//set up the skview
self.skView = self.mirroredScreenView;
self.skView.showsFPS = NO;
self.skView.showsNodeCount = NO;

// Create and configure the scene.
scene = [AirPlayMyScene sceneWithSize:self.mirroredScreenView.frame.size];
scene.scaleMode = SKSceneScaleModeAspectFill;
SKScene
中,我使用:

//set up player sprite
playerSprite = [SKSpriteNode spriteNodeWithImageNamed:@"Player"];
[playerSprite setAnchorPoint:CGPointMake(0.5,0.5)];
[playerSprite setXScale:0.5];
[playerSprite setYScale:0.5];
[playerSprite setPosition:CGPointMake(screenWidth / 2, playerSprite.frame.size.height / 2)];
[self addChild:playerSprite];

//move player sprite
movePoint = CGPointMake(playerSprite.position.x, playerSprite.position.y + playerSprite.frame.size.height);
[playerSprite setPosition:movePoint];

在过去和另一个文件中,这始终会将播放器移动一帧高度,但在这种情况下绝对不会执行任何操作。我在这个问题上花了几个小时,这很令人恼火。提前感谢您的帮助。

您应该添加代码

//move player sprite
float movePoint = CGPointMake(playerSprite.position.x, playerSprite.position.y +   playerSprite.frame.size.height);
[playerSprite setPosition:movePoint];
在更新:(CFTimeInterval)currentTime方法中, 也可以在节点上使用SKAction方法

SKAction moveToY:(CGFloat) duration:(NSTimeInterval)
例如,如果您希望您的播放器移动到您触摸的位置,您可以执行以下操作:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
    CGPoint location = [touch locationInNode:self];
    CGPoint diff = CGPointMake(location.x - self.hero.position.x, location.y - self.hero.position.y);
    CGFloat angleRadians = atan2f(diff.y, diff.x);
    [self.hero runAction:
     [SKAction sequence:@[
                          [SKAction rotateToAngle:angleRadians duration:0.2],
                          [SKAction moveByX:diff.x y:diff.y duration:1.0]]]];
}

我也遇到了这个问题


要使用
scene.frame
,请在
-(void)didMoveToView
功能中使用它。

我以前从未见过这种方法。。。你能给我一个例子来说明如何做吗?@ConnorWagner如果你使用更新方法,你应该计算玩家位置和目的地之间的距离,这非常麻烦,所以你应该使用这个动作,我编辑了答案。谢谢你的澄清,但精灵仍然保持不变。我不知道为什么。请注意,这些都是属性,所以如果您愿意,您可以将它们写为:“playerSprite.xScale=0.5;”等,这样更可读。