好吧,我在为太空爆炸游戏编写代码,看起来一切都进行得很顺利,除去这些关键问题。
首先,我添加了一艘宇宙飞船(带有PhysicsBody)作为一个自我(GameScene)的孩子。
然后,我添加了一个背景层作为节点,也作为一个自我的孩子,在飞船的后面,并通过操纵杆控制在飞船后面移动背景来模拟运动。
我添加了一个具有边界物理边缘循环体的节点,这样背景就不会在船之外移动,并将该节点添加为bgLayer的子节点。
我有飞船要射击的物体,但我希望它们像背景一样四处移动,所以我把它们作为bgLayer的孩子加入。
当然,当宇宙飞船开火时,我需要一台激光,所以我加上了这个,以及bgLayer的一个孩子。
_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的其他子物体。
不属于同一层的物理物体彼此认识吗?为什么我的激光不像其他同层的孩子一样呢?
发布于 2014-12-16 07:20:53
改变世界的地位会影响到
通过施加力/冲量或通过设定其速度来移动世界将影响
不需要通过设定速度来移动世界,您可以向世界添加一个相机(一个带有物理体的SKNode ),通过设置速度来移动相机,然后更新世界的位置以使相机中心。您可以在didFinishUpdate方法中对相机进行对焦。
发布于 2014-12-18 18:31:23
-(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浮点数。
https://stackoverflow.com/questions/27496624
复制相似问题