トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   ActionScript 3.0 特設会議室
     Spiral Particlesが正常に動作しない件
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
gomajio
Åê¹ÆNo.45437
投稿日時: 2010-8-11 0:19
新米
居住地:
投稿: 2
使用環境:
Spiral Particlesが正常に動作しない件
下記のテクニックに興味を持ち
試しに組み込んでみたのですが、
コンパイルエラーが発生してしまいます。

▼Spiral Particles
http://wonderfl.net/c/hTlh

パッケージ類は全てダウンロードしたのですが、
187行あたりの下記のソース部分でエラーが発生します。

■ hTlh.as ソース187行目あたり

/**
 * PV3DPixelsRenderer は Pixels を Stardust でレンダリングするためのクラスです。
 */
internal final class PV3DPixelsRenderer extends Renderer {
   public function PV3DPixelsRenderer(container:Pixels = null) {
       this._container = container;
   }
   private var _container:Pixels;

   override protected function particlesAdded(e:EmitterEvent):void {
       if (!_container)
           return;
       var particle:Particle3D;
       var iter:ParticleIterator = e.particles.getIterator();
       while (particle = iter.particle as Particle3D) {
           var pixel:Pixel3D = particle.target as Pixel3D;
           _container.addPixel3D(particle.target);
           particle.dictionary[ PV3DPixelsRenderer ] = _container;
           iter.next();
       }
   }

・
・
・
(以下省略)


■ コンパイルエラー内容

hTlh.as、行 187   1023: オーバーライドに対応していません。
hTlh.as、行 200   1023: オーバーライドに対応していません。
hTlh.as、行 211   1023: オーバーライドに対応していません。


エラー内容から判断するに、Renderer.as 内の
パラメータ数と型がマッチしていないと推測しましたので、
Renderer.asをチェックしてみました。


▼stardust1.2 パッケージの Renderer.as 内 21行あたり

/**
 * [Abstract Method] This method listens to the associated emitters
for the <code>Emitter.onParticleAdd</code> signal.
*/
protected function particlesAdded(emitter:Emitter,
particles:ParticleCollection):void {
//abstract method
}

/**
* [Abstract Method] This method listens to the associated emitters for
the <code>Emitter.onParticleRemove</code> signal.
*/
protected function particlesRemoved(emitter:Emitter,
particles:ParticleCollection):void {
//abstract method
}

/**
 * [Abstract Method] This method listens to the associated emitters
for the <code>Emitter.onStep</code> signal.
*/
protected function render(emitter:Emitter,
particles:ParticleCollection, time:Number):void {
//abstract method
}


上記のとおり、オーバーライド元である Renderer.asに記載されている、
particlesAdded、particlesRemoved、renderのメソッドと、
hTlh.as 記載のパラメータのデータ型と数が一致していないため、エラーが発生していると推測し、
データ型を Renderer.as 側に合わせて、
微調整をかけるとコンパイルエラーは発生せずに表示されました。
※ただし、螺旋を描いた3Dの動きで描画がされないため汚いためダメです・・・

ただ、作者が公開されているものは正常に動いているので、
おそらく私の導入したパッケージのソース群がおかしいのか、
なんなのか理解できす、手詰まりな感じです。

オブジェクト指向スクリプティングは初心者レベルということもあり、
皆様の環境では正常に動作するのか、
至らない私にご意見をいただけないでしょうか。

【作成環境】
・Win XP
・Adobe Flash Professional CS 5
・パッケージは hTlh.as にて指定されているものをすべて設置が完了。

何卒よろしくお願い申し上げます。
ゲスト
Åê¹ÆNo.45438
投稿日時: 2010-8-11 7:32
Re: Spiral Particlesが正常に動作しない件
こんにちは。質問されたデモの作者です。

Stardustのバージョン1.1.161で作成したデモなので、バージョン1.2.163では未チェックです。元のライブラリに仕様変更があったようで、私のところでも1.2では同様のコンパイルエラーが発生しました。

※1.2は2010年8月3日にリリースされたもので、デモを作成したときには1.1が最新でした。

ということで、Stardust 1.1で試してみてはいかがでしょうか?

引用:
オブジェクト指向スクリプティングは初心者レベルということもあり、


Stardustは非常に難易度の高いライブラリですので、AS3の基本的なこと(+ある程度の応用テクニック)は習熟してから利用したほうがよいと思います。StardustのRendererをカスタマイズして利用したのがSpriral Particlesのデモです。Rendererのカスタマイズはライブラリ作者の想定以上の使い方なので、ドキュメントにはカスタマイズ方法は掲載されていません。

元のライブラリの仕様を自分で調べて(例えばFlash Builder 4のデバッグで、一行ずつステップインして処理の流れを掴むなど)、修正が必要な箇所を自分で試すぐらいの力量がないと難しいと思います。
gomajio
Åê¹ÆNo.45440
投稿日時: 2010-8-11 10:29
新米
居住地:
投稿: 2
使用環境:
Re: Spiral Particlesが正常に動作しない件
clockmaker 様

こんにちは。早速のご回答ありがとうございます。

ご指摘の通り、Stardust1.1 をインストールしたところ、
正常に動作しました。

引用:
Stardustは非常に難易度の高いライブラリですので、AS3の基本的なこと(+ある程度の応用テクニック)は習熟してから利用したほうがよいと思います。


おっしゃる通りなので、基礎からじっくり修行したいと思います!
 #ちょっと、動いたという成功体験を味わいたかったのです。

このたびはご対応ありがとうございました。




ゲスト
Åê¹ÆNo.45445
投稿日時: 2010-8-11 21:00
Re: Spiral Particlesが正常に動作しない件
無事に動いたようで良かったです。

なお、ちなみに私のほうでDiffを参考にStardust 1.2に対応させたレンダラーを作ってみました。
Diff of Renderer.as r163

今後、Stardust 1.2でレンダラーを作る方がいらっしゃいましたら、参考にして頂ければと思います。

Papervision3DのPixels用のカスタムレンダラー
/**
 * PV3DPixelsRenderer は Pixels を Stardust でレンダリングするためのクラスです。
 */
internal final class PV3DPixelsRenderer extends Renderer {
    public function PV3DPixelsRenderer(container:Pixels = null) {
        this._container = container;
    }
    private var _container:Pixels;
    
    override protected function particlesAdded(emitter:Emitter, particles:ParticleCollection):void {
        if (!_container)
            return;
        var particle:Particle3D;
        var iter:ParticleIterator = particles.getIterator();
        while (particle = iter.particle as Particle3D) {
            var pixel:Pixel3D = particle.target as Pixel3D;
            _container.addPixel3D(particle.target);
            particle.dictionary[ PV3DPixelsRenderer ] = _container;
            iter.next();
        }
    }
    
    override protected function particlesRemoved(emitter:Emitter, particles:ParticleCollection):void {
        var particle:Particle3D;
        var iter:ParticleIterator = particles.getIterator();
        while (particle = iter.particle as Particle3D) {
            var pixel:Pixel3D = particle.target as Pixel3D;
            var container:Pixels = particle.dictionary[ PV3DPixelsRenderer ] as Pixels;
            container.removePixel3D(pixel);
            iter.next();
        }
    }
    
    override protected function render(emitter:Emitter, particles:ParticleCollection, time:Number):void {
        var particle:Particle3D;
        var iter:ParticleIterator = particles.getIterator();
        while (particle = iter.particle as Particle3D) {
            var pixel:Pixel3D = particle.target as Pixel3D;
            pixel.x = particle.x;
            pixel.y = particle.y;
            pixel.z = particle.z;
            iter.next();
        }
    }
}
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops