Ios 我如何在视野中保持下降的Spritodes?

Ios 我如何在视野中保持下降的Spritodes?,ios,xcode,sprite-kit,gravity,skspritenode,Ios,Xcode,Sprite Kit,Gravity,Skspritenode,我正在尝试制作一款类似于raywenderlich的iphone游戏:精灵工具包初学者教程。我试图在portait模式下实现这一点,而不是教程中使用的横向模式。我使用了这段代码,并对其进行了调整,使精灵从屏幕的顶部下降到底部,但有时精灵一半在视图之外,甚至更多 这就是我得到的: SKSpriteNode * monster = [SKSpriteNode spriteNodeWithImageNamed:@"AcornFinal.png"]; // Determine where to spa

我正在尝试制作一款类似于raywenderlich的iphone游戏:精灵工具包初学者教程。我试图在portait模式下实现这一点,而不是教程中使用的横向模式。我使用了这段代码,并对其进行了调整,使精灵从屏幕的顶部下降到底部,但有时精灵一半在视图之外,甚至更多

这就是我得到的:

SKSpriteNode * monster = [SKSpriteNode spriteNodeWithImageNamed:@"AcornFinal.png"];

// Determine where to spawn the monster along the X axis
int minX = self.frame.size.width;
int maxX = self.frame.size.width - monster.size.width;
int rangeX = maxX + minX;
int actualX = (arc4random() % + rangeX);

// Random position along the X axis as calculated above
// This describe from which way the acorns move
// - means moving from top to the right and + means moving from the top to the left
monster.position = CGPointMake(actualX,self.frame.size.height);
[self addChild:monster];

// Determine speed of the monster
int minDuration = 2.0;
int maxDuration = 4.0;
int rangeDuration = maxDuration - minDuration;
int actualDuration = (arc4random() % rangeDuration) + minDuration;



// Create the actions
SKAction * actionMove = [SKAction moveTo:CGPointMake(actualX,-monster.size.height) duration:actualDuration];
SKAction * actionMoveDone = [SKAction removeFromParent];
[monster runAction:[SKAction sequence:@[actionMove, actionMoveDone]]];
所以我相信问题可能在于这四行代码:

// Determine where to spawn the monster along the X axis
int minX = self.frame.size.width;
int maxX = self.frame.size.width - monster.size.width;
int rangeX = maxX + minX;
int actualX = (arc4random() % + rangeX);
如何修复此错误>

编辑

解决方案是将前四行更改为

int minX = monster.size.width;
int maxX = self.frame.size.width - monster.size.width;
int rangeX = maxX - minX;
int actualX = (arc4random() % rangeX)+minX;

如果你的想法是让怪物保持在屏幕的水平范围内,那么你的数学似乎有点不对劲。如果精灵的定位点为0.5、0.5,并且场景大小等于屏幕大小,我认为应该是:

int minX = monster.size.width / 2; 
int maxX = self.frame.size.width - monster.size.width;
int x = (arc4random() % + maxX) +  minX;

在视图的水平边界之外?多亏了您,我发现了错误,我不得不将您的int x行更改为:int actualX=arc4random%rangeX+minX;但是现在它很好用,谢谢!!我不知道我的计算中哪一部分没有凝结,但如果你弄明白了,我想一切都好-