問題タブ [caemitterlayer]
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.
objective-c - アニメーション化されたCAEmitterLayer/Cellのエミッター位置を取得する方法は?
CAEmitterCellを使用してアニメーション化されたCAEmitterLayerがあり、アニメーションは
私のベジェパスは閉じており、4つの位置ポイントから「8」を形成します。私のtimerFunctionを使用して、毎秒CAEmitterLayerの位置を取得しようとします。そのために私は使用します
エミッタークラスで
タイマー機能から。
しかし、アニメーションが実行されているとき、エミッターが画面上で実行されている間、コンソールはすべての呼び出しで同じ位置を吐き出します。
それはなぜですか。また、アニメーション化されたCAEmitterLayer / Cellのエミッター位置を取得するにはどうすればよいですか?
objective-c - タッチジェスチャでCAKeyframeAnimationを制御するには?
CAEmitterLayer
ベジェ パス (4 つの制御点のうち、「8」のような閉じた形) に沿ってアニメーション化されたCAKeyframeAnimation
. ここで、パスに沿って (必ずしもパス上ではなく) タッチ指をスライドさせてアニメーションを制御したいと考えています。これはどのように可能であり、これは可能ですか?
objective-c - 多数のCAEmitterCellを使用してテールを小さくする方法(フェードアウトおよび/またはスケールダウン)
bezierPathに沿ってアニメーション化されたCAEmitterLayerがあり、CEEMitterCellパーティクルは部分的に透明なgaussed-circle.pngで作成されています。これらのパーティクルのライフタイムは0.3で、アニメーション化されたCAEmitterLayer-Particlesの小さなテールになります。最後にテールを小さくし、セルを生涯にわたってalpha=0にフェードアウトさせる必要があります。パラメータ設定のさまざまな組み合わせを試しましたが、機能しません。尻尾の端を太くして、醜く間違って見えました。ここで必要なパラメータ設定は何ですか?これはCAEmitterCellsでも可能ですか?
ios - CAEmitterLayer 短時間繰り返し発光する方法
私は CAEmitterLayer をいじっていますが、現在いくつかの問題に直面しています :(
たとえば、ヒットや爆発のような短いパーティクル効果が必要です (したがって、この場所に小さな UIView があります)。どうすればいいですか?
1、私にはアイデアがありました - パーティクルでエミッターレイヤーを作成し、lifeTime を 0 に設定します。必要なときは、たとえば lifeTime を 1 に設定し、しばらくしてから 0 に戻すことができます。 - しかし、何もしていません。 :(
2、2番目のアイデアは、必要なたびに[CAEmitterLayerレイヤー]を作成し、レイヤーサブレイヤーとして追加することでした。しかし、たとえば10回繰り返すとどうなるか考えています.10のサブレイヤーがあり、1つのアクティブと9つの「デッド」がありますか? 一般的に放出を停止するには?しばらくしてからライフタイムを0に設定し、他のセレクターをremoveFromSuperlayerに設定するためにperformSelectorを持っています...しかし、それは私が望むほどきれいではありません:(別の「適切な」方法はありますか?
サブレイヤーが多すぎるのは、別の問題に関連していると思います... パーティクルを 1 つだけ放出したいのです。そして、私がそれを行うと、それは機能します。しかし、3 つの粒子を放出することもあれば、2 つの粒子を放出することもあります。エミッターを停止しないと、毎回正しい数のパーティクルが与えられます...
質問は…</p>
パーティクルを短時間放出する方法。それらの操作方法 - 停止、親レイヤーからの削除など、正確な数のパーティクルを放出する方法
編集:
次に、ボタンにリンクされたメソッドでこれを行います:
@David Rönnqvistの態度に変更した後、編集および更新
objective-c - タッチ移動したCAEmitterLayerは、タッチポイント後の距離が遅れています...
私はある問題から別の問題につまずきました。最初の問題を解決すると、指が画面上を移動したときに、パーティクルトレイルがタッチ位置のはるか後ろに遅れます。
上書きしてCAEmitterLayerを初期化したときにうまく機能しました
と初期化
私はそれをに変更しました
そして今、エミッターセルは、離れたところに芸者のように移動したタッチポイントをたどります
何故ですか?エミッターが現在放出しているレイヤーを変更したので?助けてください!thnx
iphone - CAEmitterLayer アニメーションのパフォーマンスの改善/最適化 (パスに沿って放出?)
ここに私がこれまでに得たもののビデオがあります。私のMBP + QuickTime + Xcodeは最高ではありません。
http://www.youtube.com/watch?v=DGRwz7n3kNA
これは私が望むものの非常に大まかな草案ですが、アイデアを得ることができます。パフォーマンスが最大の問題ですが、パフォーマンスはさておき、UIImageView (悪魔のようなルーン文字) の背後にあるパーティクルのレンダリング/計算に CPU/GPU 時間を浪費しています。
パスに沿ってパーティクルを放出する方法や、ビューの背後で光るアニメーションを取得するより良い方法を知っている人はいますか? アニメーションを設定するエミッタ ビューのスニペットを次に示します。
objective-c - CAEmitterLayer は、タッチ イベントでランダムな不要なパーティクルを放出します
紙吹雪効果を作成するように を設定しようとしてCAEmitterLayer
いますが、2 つの問題が発生しました。
- セルをゼロ以外に設定してアニメーションを開始するたびに
birthRate
、画面上にランダムに配置されたセルが次々と表示され、正常にアニメーションし、エミッターはその後も適切に放出し続けます。 - が画面に何かを描いているときはいつでも、
emitterCells
私が画面に触れるたびに、エミッターはemitterCells
(一見) ランダムな時間存在する (一見) ランダムな場所に描画します。エミッター内の何もタッチ イベントに関連付けられていません (つまり、意図的にタッチ イベントに何も描画していません) が、レイヤーは複数の埋め込みビューを持つビュー内にあります。触れば触れるほど、細胞が現れます。
エミッターをセットアップし、それを開始および停止するためのコードを次に示します (いったん停止関数を呼び出した後、画面をタップすると、新しいランダム要素の作成が停止します)。
紙吹雪を開始するには:
そしてそれを止めるには:
繰り返しになりますが、いったん開始すると、ランダムな要素が最初に飛び交った後、これは問題なく機能します。すべてが正常にアニメーション化され、その後birthRateがゼロに設定されると、正常に終了します。タッチ イベントに応答しているように見えますが、その理由はわかりません。エミッターレイヤーを別のビューに追加し、そのビューでのユーザー操作を無効にしてから、メイン ビューのサブビューとして追加しようとしましたが、うまくいかないようでした。
どんな助け/洞察も大歓迎です!
ありがとう、サム
performance - UIView self.layer.shouldRasterize = YES およびパフォーマンスの問題
self.layer.shouldRasterize = YES;
UIViews でフラグを使用した経験を共有したいと思います。
スクロールのパフォーマンスを向上させるためにオンになっているクラス階層があります (それらはすべてUIView
、デバイスの画面よりも大きい STATIC サブビューを持っています)。self.layer.shouldRasterize
今日はサブクラスの 1 つを使用CAEmitterLayer
して、素敵なパーティクル エフェクトを作成しました。
粒子の数が非常に少ない (50 個の粒子) にもかかわらず、パフォーマンスは非常に貧弱です。
この問題の原因は何ですか?
objective-c - iOS: 画面上の CAEmitterLayer パーティクルをキャプチャする
iOS デバイスの画面をキャプチャするときに CAEmitterCells (CAEmitterLayer を使用して生成) をキャプチャする方法はありますか?
UIGetScreenImage()は機能しますが、プライベート メソッドであるため使用できません。
UIGraphicsBeginImageContextが機能していないようです。結果の画像からパーティクルが省略されているだけです。
編集:
ビューをキャプチャするために現在使用しているコードは次のとおりです。ここでaroth によって提供されたコードを使用して、実際に画面の 30 秒間のビデオを記録しています。それ自体 (UIView のサブクラス) とそのサブビュー (この例では、層が CAEmitterLayer である UIView を含む) の 25 枚の画像を毎秒記録し、AVAssetWriter を使用して記録を構成します。
かなり長いので、関連する行をここに配置します。XCode の ARC ツールを使用してコードを ARC で編集したため、コードはメモリ管理に関して少し異なる場合があります。
これが役立つことを本当に願っています。ご協力ありがとうございました!
ios - スーパーレイヤーの -renderInContext: が呼び出されたときに CAEmitterLayer がレンダリングされない
私は描画アプリを持っており、ユーザーが描画の一部としてパーティクル エフェクトを使用できるようにしたいと考えています。基本的に、アプリのポイントは、カスタム描画を実行し、カメラ ロールに保存するか、World Wide Web で共有することです。
私は最近このクラスに出会いましたCAEmitterLayer
。これは、パーティクル エフェクトを追加するためのシンプルで効果的な方法だと思います。
CAEmitterLayer
実装を使用して、アプリの画面上にパーティクルを描画することができました。そのため、画面上でのレンダリングは正常に機能します。
を使用して図面の内容をレンダリングしようとすると
起こっていると思うこと
はCAEmitterLayer
、パーティクルを常に「アニメート」している状態です。そのため、レイヤーをレンダリングしようとすると (レンダリングlayers.presentationLayer
と modelLayer も試しました)、アニメーションがコミットされないため、オフスクリーン イメージ レンダリングにパーティクルが含まれません。
CAEmitterLayer
質問オフスクリーンのコンテンツをレンダリングした人はいますか? もしそうなら、どのようにしましたか?
別の質問 OpenGL を使用せず、Cocos2D ではないパーティクル エフェクト システム ライブラリを知っている人はいますか?