大佬教程收集整理的这篇文章主要介绍了ios – 如何让我的角色与移动平台一起“骑行”?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
这是我的英雄角色和移动平台的方法.
-(void)Heroadd { _Hero = [SKSpriteNode spriteNodeWithImagenamed:@"Hero-1"]; _Hero.name = @"Daniel"; _Hero.physicsBody = [SKPhysicsBody bodyWithRectangLeofSize:_Hero.size]; _Hero.physicsBody.categoryBitMask = fPlayerCategory; _Hero.physicsBody.contactTESTBitMask = fPlatformCategory | fEnemyCategory; _Hero.physicsBody.usesPreciseCollisionDetection = YES; _Hero.physicsBody.affectedByGravity = YES; _Hero.physicsBody.dynamic = YES; _Hero.physicsBody.friction = .9; _Hero.physicsBody.restitution = 0; _Hero.position = CGPointMake(CGRectGetMidX(self.framE),CGRectGetMidY(self.framE)); _Hero.position = CGPointMake(_Hero.position.x - 252,_Hero.position.y + 50); if (self.size.width == 480) { _Hero.position = CGPointMake(_Hero.position.x + 44,_Hero.position.y); } [self addChild:_Hero]; }
我的移动平台代码
-(void)createPlatform { SKTexture *objectTexture; switch (arc4random_uniform(2)) { case (0): objectTexture = [SKTexture textureWithImagenamed:@"shortPlatform"]; break; case (1): objectTexture = [SKTexture textureWithImagenamed:@"highPlatform"]; default: break; } SKSpriteNode *variaPlatform = [SKSpriteNode spriteNodeWithTexture:objectTexture]; variaPlatform.position = CGPointMake(CGRectGetMidX(self.framE),CGRectGetMidY(self.framE)); variaPlatform.position = CGPointMake(variaPlatform.position.x + 500,variaPlatform.position.y - 140); variaPlatform.physicsBody = [SKPhysicsBody bodyWithRectangLeofSize:variaPlatform.size]; variaPlatform.physicsBody.usesPreciseCollisionDetection = YES; variaPlatform.physicsBody.categoryBitMask = fPlatformCategory; variaPlatform.physicsBody.contactTESTBitMask = fPlatformCategory |fPlayerCategory | fEnemyCategory; variaPlatform.physicsBody.dynamic = NO; variaPlatform.physicsBody.affectedByGravity = NO; SKAction *moveLeft = [SKAction moveTo:CGPointMake(180,variaPlatform.position.y) duration:3]; SKAction *moveDown = [SKAction moveTo:CGPointMake(180,-700) duration:4]; SKAction *removeFromParent = [SKAction removeFromParent]; SKAction *AllThree = [SKAction sequence:@[moveLeft,moveDown,removeFromParent]]; [self addChild:variaPlatform]; [variaPlatform runAction:AllThree]; }
任何类型的信息都将得到真正的赞赏.
选项1 – 在平台的每一端添加一个壁架.这是最容易实现但不太优雅,并且如果他落在壁架上仍然允许玩家滑落.
选项2 –
步骤1:添加使玩家与水平移动平台同步移动的代码.你可以使用像self.physicsBody.veLocity = CGVectorMake(-50,self.physicsBody.veLocity.dy)这样的东西;或者使用self.position = CGPointMake(self.position.x 10,self.position.y);.您将不得不使用X值来将它们同步到平台的速度.
步骤2:每当玩家与平台联系时激活上述代码,并在联系人丢失时停用.
步骤3:如果平台切换方向,设置左右限制,当平台切换方向时通过联系通知您.根据平台的方向,您可以向播放器应用X或-x移动值.
我知道这个选项听起来很复杂,但事实并非如此.你只需要一步一步走.
*编辑提供示例代码*
这是我在水平移动平台背后的逻辑:
PLATFORMS
如果您有多个水平移动平台,则需要将它们存储在GameScene(我的级别)中的数组中.我为他们创建了自己的课程,但你不必这样做.
您必须设置左右限制(带有联系人的不可见SKNodE)来为平台设置BOOL属性,该属性告诉玩家类推送哪种方式,因为每个平台的长度可能不同.这就是为什么你需要保持对每个平台(因此数组)的引用.
PLAYER
当玩家跳过平台时,将Player类属性BOOL设置为TRUE,这会根据平台当前移动的方式激活左或右推的常量.另一方面,失去联系会取消推送.
// This code in my "Levels class" which is the default GameScene class. - (void)didBeginContact:(SKPhysicsContact *)contact { uint32_t collision = (contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask); if (collision == (CategoryPlatformHorizontal | CategoryPlayer)) { [_player setPlatformHorizontalContact:true]; for(Platform *platformObject in platformArray) { if(([platformObject.name isEqualToString:contact.bodyB.node.name]) || ([platformObject.name isEqualToString:contact.bodyA.node.name])) { _player.currentPlatform = platformObject; } } } } - (void)didEndContact:(SKPhysicsContact *)contact { uint32_t collision = (contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask); if (collision == (CategoryPlatformHorizontal | CategoryPlayer)) { [_player setPlatformHorizontalContact:false]; } } // This code is in Player.h @property (strong) Platform *currentPlatform; @property BOOL platformHorizontalContact; // This code is in Player.m - (void)update:(NSTimeInterval)currentTime { if(self.platformHorizontalContact == truE) { if(self.currentPlatform.movingLeft == truE) { self.physicsBody.veLocity = CGVectorMake(-75,self.physicsBody.veLocity.dy); // set your own value depending on your platform speed } else { self.physicsBody.veLocity = CGVectorMake(75,self.physicsBody.veLocity.dy); // set your own value depending on your platform speed } } }
以上是大佬教程为你收集整理的ios – 如何让我的角色与移动平台一起“骑行”?全部内容,希望文章能够帮你解决ios – 如何让我的角色与移动平台一起“骑行”?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。