SpriteKit - 生成随机节点

Posted

技术标签:

【中文标题】SpriteKit - 生成随机节点【英文标题】:SpriteKit - Generating random nodes 【发布时间】:2014-05-07 14:27:08 【问题描述】:

我正在 SpriteKit 中构建一个简单的游戏,玩家使用加速度计控制一个球,以捕捉不同的道具、硬币等。问题是,当调用负责生成随机新 powerup(node) 的方法 (generatePowerUp) 时,它总是在 (0,0) 坐标处创建一个新的。在其他任何地方调用的相同方法都可以正常工作。

- (void)generatePowerUp 
CGPoint newPoint = CGPointMake([self randomFloatBetween:30 and:290], [self randomFloatBetween:30 and:450]);
powerUp = [SKSpriteNode spriteNodeWithImageNamed:@"me"];
powerUp.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:self.powerUp.size.width/2];
powerUp.physicsBody.categoryBitMask = powerUpCategory;
powerUp.position = newPoint;
powerUp.physicsBody.contactTestBitMask = playerCategory;
[self addChild:powerUp];



-(void)didBeginContact:(SKPhysicsContact *)contact

if (contact.bodyA.categoryBitMask == powerUpCategory) 
    [contact.bodyA.node removeFromParent];
    myScore++;
    [self generatePowerUp];


if (contact.bodyB.categoryBitMask == powerUpCategory) 
    [contact.bodyB.node removeFromParent];
    myScore++;
    [self generatePowerUp];


任何想法为什么会发生这种情况?我用nslog检查了创建的随机点,没有问题。

【问题讨论】:

【参考方案1】:

在创建物理体之前设置坐标。 在具有物理实体的对象上设置坐标会提供未定义的结果。

为什么?因为在使用物理时,我们让物理引擎确定所有具有物理体的对象的位置。所以设置新的位置并没有太大的影响。

【讨论】:

像魅力一样工作。谢谢!

以上是关于SpriteKit - 生成随机节点的主要内容,如果未能解决你的问题,请参考以下文章

SpriteKit游戏Delve随机生成地牢地图一个Bug的修复

生成导致丢帧的新节点 [SpriteKit]

在 SpriteKit 中生成随机地形

在随机时间结合 waitForDuration:withRange 和 runBlock: 在 SKAction 序列中生成节点

尝试在具有 SpriteKit 场景 (SWIFT) 的 didMoveToView 中使用 waitForDuration 延迟生成节点但不工作

在屏幕上的 3 个特定位置生成敌人 Swift SpriteKit IOS