首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多层SpriteKit物理体碰撞

多层SpriteKit物理体碰撞
EN

Stack Overflow用户
提问于 2014-12-16 02:36:13
回答 2查看 452关注 0票数 2

好吧,我在为太空爆炸游戏编写代码,看起来一切都进行得很顺利,除去这些关键问题。

首先,我添加了一艘宇宙飞船(带有PhysicsBody)作为一个自我(GameScene)的孩子。

然后,我添加了一个背景层作为节点,也作为一个自我的孩子,在飞船的后面,并通过操纵杆控制在飞船后面移动背景来模拟运动。

我添加了一个具有边界物理边缘循环体的节点,这样背景就不会在船之外移动,并将该节点添加为bgLayer的子节点。

我有飞船要射击的物体,但我希望它们像背景一样四处移动,所以我把它们作为bgLayer的孩子加入。

当然,当宇宙飞船开火时,我需要一台激光,所以我加上了这个,以及bgLayer的一个孩子。

代码语言:javascript
复制
_spaceship.physicsBody = (custom physicsBody code);
[self addChild:_spaceship];

_bgLayer = [SKNode node];
[self addChild:_bgLayer];

_bounds = [SKNode node]; 
_bounds.physicsBody = (physicsBody edgeLoop code);
[_bgLayer addChild:_bounds];

_otherObjects.physicsBody = (custom physicsBody code);
[_bgLayer addChild:_otherObjects];

_laser.physicsBody = (custom physicsBody code);
[_bgLayer addChild:_laser];

一切都很好,背景不会超出飞船,其他物体会随着背景的移动而移动,激光会在需要的时候发射。

我的第一个大难题是,当我的激光发射时,它不是随着背景的移动而移动,而是背景在它的后面移动。我也许能做得到,但如果激光总是与飞船平行移动的话,那看起来很有趣。这对我来说很奇怪,因为我是_bgLayer的孩子时就加入了激光。

第二,我的激光的physicsBody似乎没有认出EdgeLoop的身体,就在它中间航行。而且,我的宇宙飞船的physicsBody似乎能识别出EdgeLoop的身体,但它不识别_bgLayer的其他子物体。

不属于同一层的物理物体彼此认识吗?为什么我的激光不像其他同层的孩子一样呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-16 07:20:53

改变世界的地位会影响到

  1. 有物理身体的儿童
  2. 无物理身体的儿童

通过施加力/冲量或通过设定其速度来移动世界将影响

  1. 无物理身体的儿童

不需要通过设定速度来移动世界,您可以向世界添加一个相机(一个带有物理体的SKNode ),通过设置速度来移动相机,然后更新世界的位置以使相机中心。您可以在didFinishUpdate方法中对相机进行对焦。

票数 0
EN

Stack Overflow用户

发布于 2014-12-18 18:31:23

代码语言:javascript
复制
-(void)fireLaser
{
    _laser = [SKSpriteNode spriteNodeWithImageNamed: [NSString stringWithFormat:@"blueLaser"]];;
    _laser.zRotation = _spaceShip.zRotation;
    CGVector rotationVector = RadiansToVector(_spaceShip.zRotation);
    _laser.position = (Custom code for positioning the laser just in front of the spaceship);

    _laser.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:_laser.size];
    [_bgLayer addChild:_laser];

    _laser.physicsBody.velocity = CGVectorMake(rotationVector.dx * LASER_SPEED, rotationVector.dy * LASER_SPEED);  
}

当一个特定的fireLaser被触摸时,在touchesBegan中调用self SpriteNode。激光发射得很漂亮,但不是随着背景滚动,而是相对于宇宙飞船移动。当操纵杆移动时,使用PhysicsBody和setVelocity方法调用背景滚动,从而模拟宇宙飞船的运动,而实际上飞船从未离开屏幕的中心。物理范畴防止背景物理体与任何事物发生碰撞。LASER_SPEED只是一个静态的const浮点数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27496624

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档