Cocos2D - 1つのスケジューラのみが呼び出されます -- opengl-es フィールド と cocos2d-iphone フィールド 関連 問題

Cocos2d - only one scheduler called












0
vote

問題

日本語

一連の頂点を介して2つのパスをトレースしようとしています(ドットスタイルを接続します)。それぞれが異なる色で、それぞれ独自の頂点リストがあります。

パスをトレースできるクラスを作成してから、このクラスの2つのインスタンスを作成して、各パスに対して1つを作成しました。描画方法をオーバーロードします。何らかの理由で描画メソッドと呼ばれるクラスの最初のインスタンスだけを除いて、それはちょうどうまく機能しました。私はそれがOpenGLに問題だったので、CCDrawNodeを使って再びそれをやりました、そしてそれはまだ同じバグを持っていました。

1つのインスタンス(blackpath)のみが画面上のオブジェクトを描画します。実際、スケジュールされたUpdateEndpoint:メソッドはwhitePathオブジェクトに対してさえ呼び出されませんが、正常に作成されます。

マイドローマークラス:

<事前> <コード> const float size = 10; const float speed = 5; ccColor4F pathColor; int numPoints; NSArray * path; CGPoint endPoint; @implementation Drawer -(id)initWithPath:(NSArray*)p andColorIsBlack:(BOOL)isBlack{ self = [super init]; // Record input path = p.copy; pathColor = ccc4f(1.0f, 1.0f, 1.0f, 1.0f); if(isBlack){ pathColor = ccc4f(0.0f, 0.0f, 0.0f, 1.0f); } // Set variables numPoints = 1; endPoint = [[path firstObject] position]; NSLog(@"Drawer initialized with path of length %u and color %hhd (isblack)", p.count, isBlack); [self schedule:@selector(updateEndpoint:)]; return self; } -(void)updateEndpoint:(ccTime)dt{ NSLog(@"(%f, %f, %f, %f) Path", pathColor.r, pathColor.g, pathColor.b, pathColor.a); [self drawDot:endPoint radius:size color:pathColor]; CGPoint dest = [[path objectAtIndex:numPoints] position]; float dx = dest.x - endPoint.x; float dy = dest.y - endPoint.y; // new coords are current + distance * sign of distance float newX = endPoint.x + MIN(speed, fabsf(dx)) * ((dx>0) - (dx<0)); float newY = endPoint.y + MIN(speed, fabsf(dy)) * ((dy>0) - (dy<0)); endPoint = ccp(newX, newY); if(endPoint.x == dest.x && endPoint.y == dest.y){ if(numPoints < path.count-1){ numPoints+=1; } else{ [self unschedule:@selector(updateEndpoint:)]; } } }

そしてここではオブジェクトをインスタンス化する場所です:

<事前> <コード> -(id) init{ self = [super init]; [self addAllCards]; [self addScore]; xShrinkRate = [[Grid getInstance] sqWidth] / shrinkTime; yShrinkRate = [[Grid getInstance] sqHeight] / shrinkTime; dropList = [NSMutableArray new]; notDropList = [NSMutableArray new]; [self schedule:@selector(dropCard:) interval:0.075]; [self schedule:@selector(shrinkCards:)]; Drawer * whitePath = [[Drawer alloc] initWithPath:[[Score getInstance] whitePath] andColorIsBlack:false]; [self addChild:whitePath]; Drawer * blackPath = [[Drawer alloc] initWithPath:[[Score getInstance] blackPath] andColorIsBlack:true]; [self addChild:blackPath]; return self; }
英語

I'm trying to trace 2 paths on screen through a series of vertices (connect the dots style). Each should be a different color, and each has its own list of vertices.

I started out by creating a class which can trace a path, then creating 2 instances of this class, one for each path. I overrode the draw method. It worked just fine except for some reason only the first instance of the class called the draw method. I figured it was a problem with OpenGL so I did it again using CCDrawNode and it still had the same bug.

Only one instance (blackPath) draws any objects on screen. In fact the scheduled updateEndpoint: method is not even called for the whitePath object, although it is successfully created.

My Drawer.m Class:

const float size = 10; const float speed = 5; ccColor4F pathColor;  int numPoints; NSArray * path; CGPoint endPoint;  @implementation Drawer  -(id)initWithPath:(NSArray*)p andColorIsBlack:(BOOL)isBlack{     self = [super init];      // Record input     path = p.copy;      pathColor = ccc4f(1.0f, 1.0f, 1.0f, 1.0f);     if(isBlack){         pathColor = ccc4f(0.0f, 0.0f, 0.0f, 1.0f);     }       // Set variables     numPoints = 1;     endPoint = [[path firstObject] position];      NSLog(@"Drawer initialized with path of length %u and color %hhd (isblack)", p.count, isBlack);      [self schedule:@selector(updateEndpoint:)];      return self; }  -(void)updateEndpoint:(ccTime)dt{     NSLog(@"(%f, %f, %f, %f) Path", pathColor.r, pathColor.g, pathColor.b, pathColor.a);     [self drawDot:endPoint radius:size color:pathColor];      CGPoint dest = [[path objectAtIndex:numPoints] position];      float dx = dest.x - endPoint.x;     float dy = dest.y - endPoint.y;      // new coords are current + distance * sign of distance     float newX = endPoint.x + MIN(speed, fabsf(dx)) * ((dx>0) - (dx<0));     float newY = endPoint.y + MIN(speed, fabsf(dy)) * ((dy>0) - (dy<0));      endPoint = ccp(newX, newY);      if(endPoint.x == dest.x && endPoint.y == dest.y){         if(numPoints < path.count-1){             numPoints+=1;         }         else{             [self unschedule:@selector(updateEndpoint:)];         }     } } 

And here is where I instantiate the objects:

-(id) init{     self = [super init];      [self addAllCards];     [self addScore];      xShrinkRate = [[Grid getInstance] sqWidth] / shrinkTime;     yShrinkRate = [[Grid getInstance] sqHeight] / shrinkTime;      dropList = [NSMutableArray new];     notDropList = [NSMutableArray new];      [self schedule:@selector(dropCard:) interval:0.075];     [self schedule:@selector(shrinkCards:)];      Drawer * whitePath = [[Drawer alloc] initWithPath:[[Score getInstance] whitePath] andColorIsBlack:false];     [self addChild:whitePath];      Drawer * blackPath = [[Drawer alloc] initWithPath:[[Score getInstance] blackPath] andColorIsBlack:true];     [self addChild:blackPath];     return self; } 
</div
     

回答リスト

1
 
vote
vote
ベストアンサー
 

(非const)グローバル変数をクラスのインスタンス変数に変更します。

<事前> <コード> $(element).find(">:first-child").attr("value", "");2
 

Change the (non-const) global variables to instance variables of the class like so:

@implementation Drawer {     ccColor4F pathColor;      int numPoints;     NSArray * path;     CGPoint endPoint; } 
</div
 
 

関連する質問

2  Cocos2D Spritesheetアニメーション  ( Cocos2d spritesheet animation ) 
ZWoptexから作成されたファイルを使用してアニメーションを実行する方法についてのコードを見つけていますが、廃止予定のコードを使用しています。 CCSpriteBatchNodeを使用してアニメーションを実行する方法についてはコードが見つかりません。 任意...

0  Cocos2Dスコアはゲーム後にリセットされません  ( Cocos2d score not resetting after game over ) 
スコアはまったくリセットされていません、私はあなたが以前のハイスコアに合格した毎にそれが更新される毎にハイスコアカウンターを作ろうとしています。私が欲しいゲーム後もスコアはちょうど稼働し続けています高スコアが上がるまで上がります。私はレイヤー上のゲームでスコア...

2  MpMoviePlayerControllerがビューに入ります  ( Mpmovieplayercontroller into a view ) 
私はCocos2Dプロジェクトにビデオをプレイする必要があります。そして私の質問は次のとおりです。どうやってこのような私のビューにMpMoviePlayerControllerを置くことができます:? <事前> <コード> UIView *theView = ...

4  2D iPhoneゲームのためにUIキットの上にCocosを使用するのはなぜですか?  ( Why use cocos over ui kit for a 2d iphone game ) 
私は今の間ココスでゲームを構築しています今私はそれが私にそれがちょうどUIKITを使いやすくするかもしれない私にとって起こりました。 あなたは私が長所と短所を体重づけ、あなたが持っている経験を共有してください。 これはそれぞれの利点の基本的なリストです。私は私...

0  ゲームのフレームタイミング  ( Frame timing in games ) 
IVEは、リズムゲームでミリ秒ベースのタイミングにフレームタイミングからフレームタイミングを変換することを決定しました。私は、ボタンを押すのタイミングを得るためにアニメーションの現在のフレームをチェックすることができますが、アニメーションが終了したときにはど...

1  FPSを削減しますか?  ( Iad reducing fps ) 
IADバナーはFPSを軽減しますか? 確かに、私はiadを追加してから私のFSPはたわごとです。私はすべてのゲームと今、それは35-50 fpsからの可変です。 私のゲームはこのバナーでほとんどプレイできないので任意のアイデア。 助けてくれてありがとう。 ...

2  誰かがKccDirectorProjection2Dが何をしているのか知っていますか?  ( Does anyone know what kccdirectorprojection2d does ) 
私のCocos2DゲームのためのiPad網膜ディスプレイをサポートするための修正を見つけました。 iPad Retinaシミュレータの縦モードでゲームを実行したときには何も表示できませんでした。しかし、kccDirectorProjection3Dからkccd...

0  親座標CCノードローカル座標が与えられます  ( Parent coordinate given a ccnode local coordinate ) 
ノードローカル座標を与えられた親座標を返すCOCOS2D関数はありますか?それはかなり一般的なユースケースでなければなりませんが、私はネイティブのCocos2D機能を見つけませんでした。 はありますか? 私はそれがこのようなものだと思います。注意、私はこれをテ...

0  CGRectとタッチ  ( Cgrect and touch ) 
私はccspriteを押すと、このcocos2dアプリでのNSLogが発射されていません。誰かが私を助けてくれる? <事前> <コード> -(BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)eve...

2  コードを通じてアプリの設定を変更する方法  ( How to change the app preference settings through code ) 
デバイス設定アプリでアプリをリストしました。Device App Settingsアプリを介してアプリの設定を変更できます。 今やろうとしていることは逆です。 アプリの中からアプリの設定を変更した場合、それ自身がデバイス設定アプリでその設定を変更できるようにア...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有