2016-03-30 147 views
1

我有随机视频在我的应用程序中播放。他们是mp4格式。使用下面的代码我选择一个随机数决定播放哪个视频。它似乎玩了很多时间,但其他时间只是声音播放没有视频。我测试了z值问题,即使没有背景或任何东西,它仍然会这样做。任何帮助将不胜感激,我试图在许多iOS版本,包括9.2编译,问题仍然存在。没有播放的视频和只有声音是随机的,没有任何模式(有时会在其他时间快速发生40次或更多),声音嵌入在视频中。Spritekit - SKSpriteNode视频播放有时不是其他人使用AVPlayer

-(SKVideoNode*)prepareHiVideo:(SKVideoNode*)videoNode withFileURL: 
(NSURL*)fileURL 
{ 
//AVPlayer 
AVPlayer * avPlayer = [AVPlayer playerWithURL:fileURL]; 
[[NSNotificationCenter defaultCenter]addObserver:self 
selector:@selector(hiFinishedPlaying:) 
name:AVPlayerItemDidPlayToEndTimeNotification object:[avPlayer 
currentItem]]; 


//SKVideo Node 
videoNode = [SKVideoNode videoNodeWithAVPlayer:avPlayer]; 
videoNode.zPosition=4; 
[videoNode setScale:.338]; 
return videoNode; 
} 
-(void)animatedHis { 
SKVideoNode * node; 
name.text = @""; 
NSURL *fileURL; 
AVPlayer * hiPlayer = [[AVPlayer alloc]init]; 
randomNumber = arc4random_uniform(9); 
while (randomNumber==previousRandom) 
{ 
randomNumber = arc4random_uniform(9); 
} 
if(randomNumber==0) 
{ 

fileURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"GrizzlyBearHi" ofType:@"mp4"]]; 
node=[self prepareHiVideo:node withFileURL:fileURL]; 
[email protected]"Grizzly Bear Hi"; 
node.position=CGPointMake(self.frame.size.width/5.6, self.frame.size.height/1.17); 
name=[SKLabelNode labelNodeWithFontNamed:@"Helvetica-Bold"]; 
name.zPosition=10; 
name.fontColor = [UIColor whiteColor]; 
[email protected]"Grizzly Bear"; 
name.position=CGPointMake(self.frame.size.width/5.6, self.frame.size.height/1.35); 


} 

First of the 9 random numbers code above, I have all 9 numbers and 
ifs in code. 

After ifs: 
node.zPosition=10; 
name.fontSize = 18; 
[self addChild:name]; 
[self addChild:node]; 
[node play]; 
previousRandom=randomNumber; 


Cleanup code after video completes: 
-(void)hiFinishedPlaying:(NSNotification *)notification 
{ 
SKNode * node; 


node = [self childNodeWithName:@"Grizzly Bear Hi" ]; 
if(node) 
[node removeFromParent]; 

node = [self childNodeWithName:@"Beaver Hi" ]; 
if(node) 
[node removeFromParent]; 

node = [self childNodeWithName:@"Goat Hi" ]; 
if(node) 
[node3 removeFromParent]; 


node = [self childNodeWithName:@"Mountain Lion Hi" ]; 
if(node) 
[node removeFromParent]; 

node = [self childNodeWithName:@"Bald Eagle Hi" ]; 
if(node) 
[node removeFromParent]; 

node = [self childNodeWithName:@"Squirrel Hi" ]; 
if(node) 
[node removeFromParent]; 

node = [self childNodeWithName:@"Wolf Hi" ]; 
if(node) 
[node removeFromParent]; 

node= [self childNodeWithName:@"Coyote Hi"]; 
if(node) 
[node removeFromParent]; 

node= [self childNodeWithName:@"Rabbit Hi"]; 
(if(node) 
[node removeFromParent]; 

回答

0

我最好的猜测是,这可能会导致你的问题......

node = [self childNodeWithName:@"Goat Hi" ]; 
if(node) 
[node3 removeFromParent]; 

它可能是“喜羊羊”仍然存在于屏幕和新创建的视频节点的顶部。让它看起来不是在玩,但你仍然会听到声音。

node = [self childNodeWithName:@"Goat Hi" ]; 
if(node) 
[node removeFromParent]; 

应该解决问题,如果是这种情况。希望有帮助。

+0

谢谢我应该删除3.我有每个节点名为节点1,节点2,但将它们全部更改为节点仅用于堆栈概述。这不是问题。我认为这可能与视频播放时在同一屏幕上发生的其他操作有关,但这只是一个理论 –

+0

可能需要从主播放视频的单独线程,但只是一个想法。 –

+0

结束了成为一个苹果iOS <10错误与SpriteKit中的视频。 iOS 10工作正常。 –