我正在制作一款使用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];
这总是让玩家在过去和另一个文件中移动了一帧高度,但在这种情况下绝对没有任何作用。我在这个问题上花了好几个小时,这很烦人。提前感谢您的帮助。
答案 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
功能中使用它。