我正在使用Objective-C的Sprite Kit制作横向滚动视频游戏
当角色从底部跳跃时,我想让它滑过酒吧。
当它从上面跳起时,我想让它上杆。
但是,它有时不起作用。
方法" enumerateChildNodesWithName"有时无法找到SpriteNode。
-(void)update:(CFTimeInterval)currentTime
{
/* Called before each frame is rendered */
// LongBar
[self enumerateChildNodesWithName:LONG_BAR usingBlock:^(SKNode *node, BOOL *stop)
{
SKNode *gameCharacter = [ self childNodeWithName:GAME_CHARACTER];
// The character is over the bar
if( node.position.y < gameCharacter.position.y )
{
node.physicsBody.categoryBitMask = CONTACT_BAR;
node.physicsBody.contactTestBitMask = CONTACT_CHARACTER;
}
// The character is under the bar
else
{
node.physicsBody.categoryBitMask = 0;
node.physicsBody.contactTestBitMask = 0;
}
}];
// ShortBar
[self enumerateChildNodesWithName:SHORT_BAR usingBlock:^(SKNode *node, BOOL *stop)
{
// same as longbar
:
:
}];
}
其他信息:
·长短杆各有两个。
SpriteName不同。
·短杆通常不起作用。
·长/短杆也在固定循环中创建,
所以屏幕上也存在相同的内容。
·当它被修改为仅产生长/短条时,它运作良好。
↓2014/07/17添加↓
@property SKSpriteNode *longBar;
@property SKSpriteNode *shortBar;
:
:
#define LONG_BAR @"long_bar"
#define SHORT_BAR @"short_bar"
:
:
- (void) addShortBar
{
size_t y;
float x = 0.6f;
y = ( arc4random() % ( (int)self.size.height / 2 ) )+ ( self.size.height / 3 );
self.shortBar.name = SHORT_BAR;
self.shortBar = [ SKSpriteNode spriteNodeWithImageNamed:BAR_SHORT];
self.shortBar.size = CGSizeMake(60 * x , 28 * x);
self.shortBar.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:self.shortBar.size];
self.shortBar.position = CGPointMake(self.size.width, y);
self.shortBar.physicsBody.affectedByGravity = NO;
self.shortBar.physicsBody.dynamic = NO;
self.shortBar.physicsBody.categoryBitMask = CONTACT_BAR;
self.shortBar.physicsBody.contactTestBitMask = (CONTACT_CHARACTER | CONTACT_POINT);
self.shortBar.physicsBody.restitution = 0;
[self.shortBar runAction:[SKAction moveTo:CGPointMake(BAR_IS_OUT, self.shortBar.position.y) duration:_timeBarPasses]];
[self addChild:self.shortBar];
[self addRareItem:y]; // method that add item
}