• 締切済み

ActionScript3.0 雪を降らせる方法

はじめまして! Flashを勉強し始めたばかりの初心者ですが 雪のインスタンスを作成し、ステージの上から下へランダムな大きさで(ぼかしも入れつつ)降ってくるムービーを作りたいと思っています。 色々検索した結果、下記サンプルソースを発見したので とりあえず、 「snow_mc」というムービークリップをflaファイルのライブラリに格納し ParticleSimulatorクラスをリンゲージ設定後、 下記フレームアクションに追加したのですが、、、雪が降ってきません・・ var Snowdrop = new ParticleSimulator(); addChild (Snowdrop); エラーもでてこないのでどこをどう直せばいいかわらず困っております・・ まったくのど素人で申し訳ありませんが どなたかご教授いただけるととっても助かります! ちなみに、使用したクラスは下記です。 <ParticleSimulatorクラス> package{ import flash.display.*; import flash.events.*; public class ParticleSimulator extends Sprite{ private static var GRAVITY:Number = 9.8; private static var ro:Number = 1.205; private static var nyu:Number = 0.00001512; private var myImage:Class; private static var w:int = 685; private static var h:int = 455; public function ParticleSimulatorR(){ var bitmap:Bitmap = new myImage(); addChild(bitmap); for(var i:int = 0 ; i < 100 ; i++){ var l:Number = Math.random() * 0.000005; var p:Particle = new Particle(l*1500000); p.x = w*Math.random(); p.y = h*Math.random(); p.alpha = Math.random()/2 + 0.4; p.diameter = l; p.mass = l * 10; addChild(p); p.addEventListener(Event.ENTER_FRAME, loop); } } public function loop(e:Event):void{ var p:Particle = Particle(e.target); p.t++; p.vy = Math.pow((p.mass * GRAVITY) / (3 * Math.PI * ro * nyu * p.diameter), (1 - Math.exp(-3*Math.PI*ro*nyu* p.diameter * p.t/ p.mass))); //p.x += 1; p.y += p.vy; // マウスからの距離 var distance:Number = Math.sqrt((mouseX - p.x)*(mouseX - p.x) + (mouseY-p.y)*(mouseY-p.y)); // 加速度(距離が近いほど大きく、質量が大きいほど小さく) p.ax = (400 / distance) * 0.1 / (p.mass * 1000000); if(mouseX > p.x) p.ax *= -1; p.vx += p.ax; p.x += p.vx; if(p.x > w || p.y > h){ p.x = w*Math.random(); p.vx = p.ax = 0; p.y = 0; p.t = 0; } } } }

みんなの回答

回答No.2

Tanigucchiです。 Flex でのAS3.0の例ですが参考URLのもので動作します。(Flex SDK 3.0 で検証済み) それぞれのスクリプトを   ParticleSimulator.as   Particle.as   MovingObject.as として保存してビルドしてみてください。 Flashであれば、ParticleSimulator.as の MyImage の部分を合わせて あげれば動作すると思われます。(未検証です)

参考URL:
http://yamasv.blog92.fc2.com/blog-entry-51.html
hatenawave
質問者

お礼

Tanigucchiさん、返信が遅くなり申し訳ありません! ありがとうございます! 実はちょっと別件でたてこんでおりまして・・ 教えていただいたのにまだ試してません。 後日、結果をご連絡させていただきます。 ありがとうございます!!

回答No.1

なんとなく、myImageクラスに画像が埋め込まれていないように感じますので以下を試してください。 private var myImage:Class; の前の行に [Embed(source="backimage.jpg")] //backimage.jpg:背景画像 ところで提示されたソースには Particle の定義 がありませんが そちらは問題ありませんか?

hatenawave
質問者

お礼

Tanigucchiさん、アドバイスをありがとうございます! お礼が遅くなって大変申し訳ございません。 Particleの定義・・そうですね、ないですね。 ちょっと、参考したものがよくなかったのかも知れません。。 よくよく、見てみますと public function ParticleSimulatorR(){ の部分はコンストラクタなので public function ParticleSimulator(){ となるはずの気もします。 うーん。AS3となるとなかなかオープンソースがなくて。。 地道に、本で調べたりするしかないのかもしれません(@_@;)

関連するQ&A