2016-03-30 13 views
1

私のアプリではランダムな動画を再生しています。彼らはmp4形式です。下のコードを使用して、再生するビデオを決める乱数を選択します。それは多くの時間を再生するようだが、他の回だけ音はビデオなしで再生されます。私はz値の問題をテストしましたが、バックグラウンドや何もない場合でもこれを実行します。どんな助けでも大歓迎です、私は9.2を含む多くのiOSバージョンでコンパイルしようとしましたが、それでも問題は解決しません。再生していないビデオと唯一のサウンドは無作為であり、パターンはありません(時には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. node1、node2という名前の各ノードを持っていましたが、スタックオーバービューのためにすべてノードをノードに変更しました。それは問題ではありません。私はそれがビデオと同じ画面上で起こっている他のアクションと関係があるかもしれないと思うが、それは単なる理論である。 –

+0

ビデオを再生するためにメインから別々のスレッドを必要とするかもしれない。 –

+0

SpriteKitに動画を含むリンゴiOS <10のバグに終わった。 iOS 10は正常に動作します。 –

関連する問題