【问题标题】:Colliding with top and bottom but not the sides? (iOS 8)与顶部和底部碰撞但不与侧面碰撞? (iOS 8)
【发布时间】:2015-12-02 21:02:20
【问题描述】:

我制作了一个球从屏幕上弹起的简单效果。它只适用于顶部和底部边缘,但我不知道为什么。此外,当我在 initwithsize 方法中的 iOS 7 SpriteKit 模板中尝试此代码时,它可以工作。这是一个错误还是什么?

#import "GameScene.h"

@implementation GameScene

-(void)didMoveToView:(SKView *)view {
    self.backgroundColor = [SKColor whiteColor];
    SKSpriteNode *ball =[SKSpriteNode spriteNodeWithImageNamed:@"ball"];
    ball.position =CGPointMake(self.frame.size.width/2, self.frame.size.height/2);
    ball.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:ball.frame.size.width/2];
    self.physicsBody = [SKPhysicsBody bodyWithEdgeLoopFromRect:self.frame];
    self.physicsWorld.gravity = CGVectorMake(0, 0);
    CGVector impulse =     CGVectorMake(20,20);
    [self addChild:ball];
    
    [ball.physicsBody applyImpulse:  impulse];
    
    ball.physicsBody.restitution = 1;
    ball.physicsBody.friction = 0;
    ball.physicsBody.linearDamping = 0;
    
  /* 
   SKSpriteNode *wall =[SKSpriteNode spriteNodeWithImageNamed:@"wall"];
   
   SKSpriteNode *bar =[SKSpriteNode spriteNodeWithImageNamed:@"bar"];

   wall.position= CGPointMake(self.frame.size.width/2, 103);
    bar.position = CGPointMake(self.frame.size.width/2,  (wall.frame.size.height));
    [self addChild:wall];
    [self addChild:bar];
   
    */
    
}

-(void)update:(CFTimeInterval)currentTime {
    /* Called before each frame is rendered */
}

@end

【问题讨论】:

  • 球在接触到侧面时消失,然后被推出,节点数从 1 变为 0,从 0 变为 1,依此类推
  • 这可能是因为您的 self.frame.size 与您的 self.size(您的场景大小)不同。
  • 也试过了,没用
  • didMoveToView 中,添加self.scaleMode = SKSceneScaleModeResizeFill; 并将所有出现的self.frame 替换为view.frame
  • 0x141E 它工作了,非常感谢,我明白为什么现在为什么它不工作了

标签: ios objective-c sprite-kit collision bounce


【解决方案1】:

Rassam所说的锚点不准确,默认位置在(0.5,0.5)。

很明显它与场景的大小有关。你的场景比你的屏幕更宽。 NSLog 场景的宽度来检验我的假设。

【讨论】:

  • 太好了,你能+我的答案吗?
【解决方案2】:
  1. 你没有设置非常重要的锚节点设置为CGPointMake(0.5,0.5)

  2. 重力矢量应设置为 (0,-9.8) 但也应设置为 (0,0)。

现在是你的问题,

您必须将球和矩形的锚点设置为 (0.5,0.5),无论它是什么(自身),并且您需要将物理主体设置为分配大小的一半。

通过将锚点设置到身体的中心 (0.5,0.5),您是在告诉物理引擎通过将中心视为原点来设置物理体,在这种情况下,您需要设置边长的一半,并且球你必须设置半径。

但我真的很惊讶 ios7 的工作方式,它不应该,但我希望在这些更正后两者都能正常工作。

【讨论】:

  • 我意识到我的刺激器出了点问题,因为当我创建 sprite kit 项目时,hello world 标签没有完全出现在屏幕上
猜你喜欢
  • 2019-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-09
  • 1970-01-01
相关资源
最近更新 更多