問題タブ [ccnode]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
2950 参照

iphone - スティック フィギュア、アンカーポイント、アニメーション、またはその他のものを移動する...?

わかりましたので、目的の c で cocos2d を使用して棒人間のゲームを作成しています...さまざまなものをアニメーション化する必要があるため、これらの動きを達成するための最良の方法を提案してください:

  1. 主人公-彼は左下隅の射手で、角度を撃っている場所の角度を変更する必要があるため、上半身を動かすことを除いて、動きません...

  2. 敵 - 矢のスプライトに撃たれると衝突検出されて死ぬ棒人間の群れ。

1と2はどうやって動かせばいいの?アンカーポイントをマスターして使用する必要がありますか? (私は愚かなアンカーポイントが本当に嫌いです。それらは機能するのが非常に難しいです...しかし、それらがより優れている場合はこれらを使用します)または大量のアニメーションを作成するか、または多くのスプライトを単一の動きに結合する別の簡単な方法はありますか?

0 投票する
1 に答える
4357 参照

cocos2d-iphone - cocos2d:CCNode階層のクローンを作成する方法

CCNode階層のクローンを作成しようとしていますが、問題は、すべての変数をタイプごとにリセットして設定する必要があることです。これをより自動的に行う方法はありますか?

基本的に私がやりたいことは次のとおりです。-CCNode*を保存します(たとえば、Pos 10-10の画像と、Pos 100-50のラベルに「Test」というテキストを付けます)。-次に、それを複製して、同じデフォルト値と子を持つ新しいCCNode*を取得します。

変更を取得した後、カスタム値を取得する前のノードのテンプレートのようなものであるため、コピーする必要があります。

タイプごとに大きなif/elseステートメントを使用せずに、すべての階層を(正しいタイプでも)コピーして設定する簡単な方法を知っている場合は、非常に役立ちます^^

ありがとう

0 投票する
2 に答える
1454 参照

cocos2d-iphone - CCNode 再帰的 getChildByTag

私が理解している限り、CCNode::getChildByTagメソッドは直接の子のみを検索します。

しかし、すべての子孫階層でタグによって CCNode の子を再帰的に見つける方法はありますか?

CocosBuilder ccb ファイルから CCNode をロードしています。タグのみを知っているサブノードを取得したいと考えています (階層内の位置/レベルではありません)。

0 投票する
2 に答える
3272 参照

cocos2d-iphone - cocos2d の非長方形 CCNode のアウトライン (ストローク)

このようなアウトラインを動的に作成する必要があります。

赤の 2px アウトライン

CCSprite 用ではなく、1 つの CCNode に統合された複数のアニメーション化された CCSprite 用です。私は考えています:

  1. CCNode のコンテンツをテクスチャにコピーする ( canvasBitmapData.draw(sourceDisplayObject)AS3 のように)
  2. 結果のテクスチャで CCSprite を作成する
  3. スプライトを輪郭の色に着色し、少し拡大します
  4. ノード内の他のスプライトの後ろにスプライトを配置する

ステップ 1 の実行方法がわかりません。また、ステップ 3 のティント スケールではなく、テクスチャの不透明なピクセルの周りに「真のストローク」を描画する方が速いのではないでしょうか?

0 投票する
2 に答える
1524 参照

cocos2d-iphone - Cocos2dの回転クリッピングノード

私はここでクリッピングノードを使用しています:http://www.learn-cocos2d.com/2011/01/cocos2d-gem-clippingnode

ClippingNode.h

ClippingNode.m

ただし、回転したCCNodeをクリップする必要があります。私がそのようなタスクをどのように達成できるかについてのアイデアはありますか?

0 投票する
2 に答える
494 参照

objective-c - CCNode から継承する init メソッド

CCNode から継承する Player クラスでのカスタム init メソッドの作成について質問があります。代わりに別のルートを取り、代わりにクラスメソッドを作成する必要があるかどうかはわかりません:

+ (id) addSprite: (CCSprite*) sprite andSpriteBatchNode: (CCSpriteBatchNode*) spriteBatch;
その他のクラス メソッド ....

クラスにはPlayer、いくつかの便利な init メソッドに沿って、指定された init メソッドがあります。
- (id) init;
- (id) initWithSpriteBatchNode: (CCSpriteBatchNode*) spriteBatch;
- (id) initWithSprite: (CCSprite*) sprite andSpriteBatchNode: (CCSpriteBatchNode*) spriteBatch; //指定されたinitメソッド

Level クラスでこのクラスをインスタンス化すると、カスタムの init メソッドを直接呼び出すことができません。私がしなければならないことは次のとおりです。

Player *player = [Player node];
[player initWithSprite: sprite andSpriteBatchNode: spriteBatch;];//これが正しいかどうか、またはメモリリークするかどうかはわかりません

インスタンスレベルで同じことをしているので、名前の他のメソッドはどちらでも機能するはずです。

お知らせ下さい。

0 投票する
2 に答える
406 参照

cocos2d-iphone - stopAllActions が呼び出された後、CCCallBlock によって保持される CCNode

完全な円または部分的な円のいずれかの円形パスで CCNode を移動するために使用するユーティリティ関数があります。

この関数は非常にうまく機能しますが、CCNode が継続的にパスをたどるようにしたい場合は、渡された Block を介して同じ関数を呼び出します (一種の再帰的ですが、実際にはそうではありません)。

私が見つけた問題は、関数が内部でブロックを使用するため、アクションが実行されている CCNode が保持され、stopAllActions または removeFromParentAndCleanup:YES を呼び出した後でも、CCNode がクリーンアップされ、メモリに残り、割り当て解除されません。これは、ノードが CCNode として表示されていなくても、パフォーマンスに影響を与えているように見えます。

CCNode を移動する関数は次のとおりです。

ノードが移動する円弧が 10 度のステップに分割されていることに注意してください。これは、CCActionInterval サブクラスを記述せずに循環モーションを取得するために行われますが、ブロックまたはセレクターを使用してモーションを完了まで実行し続けることを意味します。

ここで、CCNode が完全な円を継続的に移動するようにするために、次のようにこの関数を呼び出します。

ブロックをまったく渡さないなど、いくつかの異なることを試しましたが、関数をまったく使用しないことを除いて、保持を妨げるものは何もありません。

私が知る限り、XCode doco を読むと、次のようになります。

「メソッドの実装内でブロックを使用する場合、オブジェクト インスタンス変数のメモリ管理のルールはより微妙になります。

参照によってインスタンス変数にアクセスする場合、self は保持されます。インスタンス変数に値でアクセスすると、変数は保持されます。」

したがって、これは、関数内でブロックを使用することで、隠れた保持が発生していることを示しています。

後で stopAllActions を呼び出しても、リリースはトリガーされません。

これが機能する唯一の方法は、ノードの cleanup() メッセージに[self release].

保持を行うコードから分離されているため、これは好きではありません。

私が持っていた新しい考えの 1 つは、何らかの方法で新しい CCActionInterval サブクラスとして書き直すことですが、それで問題が解決するかどうかはまだわかりません。

助言がありますか?

0 投票する
1 に答える
525 参照

iphone - Cocos2d - 2 つの CCNode を相互にスケーリングする方法

Cocos2d に 2 つの CCNode があり、互いに同期して動的にスケーリングしたいと考えています。どちらの CCNode もバックグラウンド ノードです。視覚的に、1 つの CCNode である NodeA は、他の CCNode である NodeB よりも y 方向で上にあります。しかし、以下のコードのように両方のノードを同時にスケーリングすると:

編集 #1 -

ノード B は CCLayer、HUDLayer の一部です。HUDLayer はスケーリングしませんが、HUDLayer の NodeB はスケーリングします。コードは次のようになります

編集の終了 #1

編集#2

編集の終了 #2

編集 #3

答えの1つがCCNodeのrelativeToAnchorPointプロパティをYESに設定することについて話しているこの投稿を見つけました。Googleでこれを行う方法が見つかりません。relativeToAnchorPoint を設定する方法を知っている人はいますか?

編集の終了 #3

NodeA は、y 方向で NodeB の下に落ちます。したがって、これによりいくつかの質問が生じます。

0 投票する
4 に答える
2158 参照

cocos2d-x - cocos2d-X の CCNode の CCTouch イベント

検索しようとしましたが、目的の答えが見つかりませんでした。誰か、CCNode の CCTouch イベントを教えてもらえますか? CCLayer には CCTouchBegan、CCTouchMoved、CCTouchEnded があるので、