iOS Sprite Kit SKSpriteNode的setPosition不起作用

时间:2014-03-20 02:31:06

标签: ios sprite-kit

我正在制作一款使用SKSpriteNode创建和控制角色以及敌人的iOS游戏。我过去曾使用过[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];

这总是让玩家在过去和另一个文件中移动了一帧高度,但在这种情况下绝对没有任何作用。我在这个问题上花了好几个小时,这很烦人。提前感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

您应该添加代码

//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]]]];
}

答案 1 :(得分:-1)

我也遇到了这个。

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