38

アプリに雨の粒子効果を追加する必要があります。このアイデアを実際に実行する方法を見つけるのに苦労しています。

この CALayer アプローチ チュートリアル : Linkに従って みましたが、Xcode 5 で利用可能な新しい iOS 7 SpriteKit Particle Emitter を考慮すると、これが最良のアプローチであるかどうかはよくわかりません。

既に.sksファイルを作成しており、階層内にありますが、まだストーリーボード/プロジェクトに追加できません。

そうは言っても、SpriteKit Particle (sks) をビューに正確に追加するにはどうすればよいですか? 私はゲーム開発者ではないので、SpriteKit フレームワークのシーンやレイヤリングなどについてはまったく詳しくありません。これを理解できるように、可能な限り詳細とサンプルコードが必要です

更新: 私は仲間の SO メンバー: AyatollahAndy による回答で提供された指示に従いました。以下の彼の回答を参照してください。を表示することはできましたがSKSceneviewタッチ イベントを受信するとアプリがクラッシュします。私は以下を取得します:ここに画像の説明を入力

ありがとう

4

7 に答える 7

43

最新の Xcode では:

これはとても簡単です。

1. Xcode で、 をクリックして新しい

「SpriteKit パーティクルファイル」

単一の.sksファイルになります。

(注:「SceneKit Particle System File」は選択しないでください。「SpriteKit Particle File」を選択してください。)

ファイルを 1 回クリックし.sksます。右側の多くのコントロールに注目してください。

ここに画像の説明を入力

パーティクルは実際に動きます。これはライブ プレビューです。パーティクルでできることは何でもできます。パフォーマンスが 180 億倍優れていることを除けば、ゲーム エンジンでパーティクルを使用するようなものです。

2. 通常の UIView を任意の場所に配置します。

@IBOutlet weak var teste: UIView! // totally ordinary UIView

3. 次のコードを使用してリンクします。

次のコード スラブは、新しいパーティクル システムを通常の UIView "teste" 内に配置します。

import SpriteKit ...


let sk: SKView = SKView()
sk.frame = teste.bounds
sk.backgroundColor = .clear
teste.addSubview(sk)

let scene: SKScene = SKScene(size: teste.bounds.size)
scene.scaleMode = .aspectFit
scene.backgroundColor = .clear

let en = SKEmitterNode(fileNamed: "SimpleSpark.sks")
en?.position = sk.center

scene.addChild(en!)
sk.presentScene(scene)

これを必要なものに追加します。

きらめくボタンが必要な場合は、ボタンに追加します。

画面全体に虹を浴びせたい場合は、全画面表示に追加します。

それはとても簡単です。


SpriteKit パーティクル ファイル コントロールの使用例:

火花のバーストが必要だとします。

最大値を 50 に設定します...

ここに画像の説明を入力

ヒント - エフェクトが「終了」した場合 (つまり、ループではない場合)、終了したときに を簡単に取り除くことができるようですSKScene。このような:

    ...
    scene.addChild(en!)
    sk.presentScene(scene)
    
    delay(1.5) { sk.removeFromSuperview() }

最後の 1 行のコードで、すべてがクリーンアップされているように見えます。


ところで、パーティクル システムの素晴らしいアイデアが必要な場合は、さまざまなパーティクル アーティストがパーティクル システムを売買している Unity の「アセット ストア」をクリックしてください。彼らの仕事はあなたに素晴らしいアイデアを与えてくれます。

ここに画像の説明を入力

右側のリストで「粒子」をクリックするだけです。ビデオを見る。(革新的な例。)


ノート!Apple は、ストーリーボードで非常に簡単に SKView を作成し、.sksシーンを選択できるようにする予定です。でも ..

ここに画像の説明を入力

…まだ動かない!この投稿の最後の編集時点 (2020 年) では、まだ壊れています。したがって、上記のコードフラグメントが必要です。

于 2017-03-28T17:10:45.490 に答える
7

UIKit 階層内のサブビューとして SKView を追加できます。次のような関数が機能し、エフェクトをサブビューとして UIImageView を作成し、これをメイン ビューに追加できます。必ず SpriteKit にリンクしてください。

UIImageView *NewEffectUIImageViewWithFrame(CGRect frame)
{
    UIImageView *tempView = [[UIImageView alloc] initWithFrame:frame];

    SKView *skView = [[SKView alloc] initWithFrame:CGRectMake(0.0, 0.0, frame.size.width, frame.size.height)];
    [tempView addSubview:skView];

    SKScene *skScene = [SKScene sceneWithSize:skView.frame.size];
    skScene.scaleMode = SKSceneScaleModeAspectFill;
    skScene.backgroundColor = [UIColor clearColor];

    SKEmitterNode *emitter =  [NSKeyedUnarchiver unarchiveObjectWithFile:[[NSBundle mainBundle] pathForResource:@"SparkParticle" ofType:@"sks"]];
    emitter.position = CGPointMake(frame.size.width*0.5,0.0);

    [skScene addChild:emitter];
    [skView presentScene:skScene];

    return tempView;
}

最後に、必要なのはエミッターだけである場合は、CAEmitterLayer代わりに を作成し、それをサブレイヤーとして UIView に追加する方が簡単かもしれません。もちろん、それはプログラムで作成する必要がありCAEmitterLayer、クールな Xcode パーティクル エディタを使用できないことを意味します...

于 2014-02-10T01:53:45.530 に答える
3

実際には、SpriteKit なしでパーティクルを追加する方法があります - CoreAnimation の CAEmitterCells。

このようにして、UIView にパーティクルを簡単に追加できます。パラメータをいじって簡単にコードを取得したい場合は、このアプリ ( Particle X ) を入手してください。

SpriteKitもサポートしているので、外出先で遊んだりパーティクルをデザインしたりしてすぐにコードを入手したい場合は、このアプリが解決策です.

PS。気付いていないかもしれませんが、私はアプリの開発者です。アプリやゲームを設計するときに自分で使用するために作成しました。:)

于 2015-08-18T08:04:18.160 に答える
-1

UIView内部でパーティクル エフェクトを直接使用することはできません。

SKEmitterNodeノード シーン ( ) で定義されたノード ツリーにある必要がありますSKScene。シーン ノードは、ノード ツリーのコンテンツをレンダリングして表示するアニメーション ループを実行します。UIView静的であり、機能しません。

ただし、おそらく 内にシーンを作成することはできますUIViewが、私はそれを試みたことはありません。

于 2013-11-01T11:17:51.190 に答える