★Flash 3D【 Papervision3D 2.0 】情報交換★ (154レス)
★Flash 3D【 Papervision3D 2.0 】情報交換★ http://mevius.5ch.net/test/read.cgi/swf/1227434456/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
リロード規制
です。10分ほどで解除するので、
他のブラウザ
へ避難してください。
41: Now_loading...774KB [] 2009/03/18(水) 22:05:47 ID:60IhFvSD Cubeを綺麗に消去するにはどうすればいいのでしょうか・・・ Cubeを作る→トゥイーン→消す処理を繰り返す処理をしたいのですが、使用メモリを調べているとずっと増え続け、動作もどんどん重くなります 実際に使用したいマテリアルはFlatShadeMaterialなのですが、やはり重くなり、テストでColorMaterialでやってみていますが症状は変わりません マテリアルセット var material:ColorMaterial = new ColorMaterial( 0x00FF00 ); var materialsList:MaterialsList = new MaterialsList( { all:material } ); var cube:Cube = new Cube( materialsList, 300, 300, 300, 1, 1, 1 ); scene.addChild( cube ); トゥイーン後Cubeを削除 Tweener.addTween( cube, { z:-500, time:2, onComplete:tweenEnd, onCompleteParams:[ cube ] } ); public function tweenEnd( cube:DisplayObject3D ):void { var materialsList:MaterialsList = cube.materials as MaterialsList; var allMaterial:MaterialObject3D = materialsList.removeMaterialByName("all") as MaterialObject3D; allMaterial.destroy(); cube.material.destroy(); scene.removeChild( cube ); cube = null; } 因みにエラーは発生していません、訂正が必要な箇所があればどうかご指摘下さい、お願い致します。 http://mevius.5ch.net/test/read.cgi/swf/1227434456/41
43: 41 [sage] 2009/03/19(木) 09:11:40 ID:o2U5xvy9 >>42 返信ありがとうございます SWFProfilerというのを使って、グラフ状でメモリの使用状況を見ながら、>>41のCube作成→トゥイーン→消去を繰り返させているのですが プレビュー中は使用量のグラフがずっと上がりっぱなしの状態でした、使用メモリ値は最後に見た時には15MBなどと出ていました 試しに同じ作業をPlaneでやってみた所、FlatShadeMaterialでもColorMaterialでもグラフは上下し、プレビュー中の使用メモリ値は7MB-9MBの間で動き続けました なので原因は、MaterialsListの消し方が問題なのかなと思い色々と試しているのですが、使用メモリが下がる事が無いんです・・・ http://mevius.5ch.net/test/read.cgi/swf/1227434456/43
47: 41 [sage] 2009/03/20(金) 00:18:12 ID:nPh+mKh4 >>44 返信がりがとうございます 自分の説明不足でしたが、Cube作成→トゥイーン→消去は、作った一つのCubeを出したり消したりのサイクルではなく、 新たにCubeを作り出してトゥイーン後破壊し、また新たに別のcubeを作りトゥイーンさせ破壊・・・というTimerを使った繰り返しの処理なんです var timer:Timer = new Timer( 600 ); timer.addEventListener( TimerEvent.TIMER, timerFunc ); timer.start(); function timerFunc():void{ createCube(); } function createCube():void { Cubeを作成して、>>41のTweenerイベント処理、終了後にtweenEndへ } function tweenEnd( cube:DisplayObject3D ):void { >>41のCubeを削除の処理 } マテリアル未使用Cubeは作り方がわかりませんでした・・・ そもそものCubeを綺麗に削除する方法のセオリーって無いのでしょうか http://mevius.5ch.net/test/read.cgi/swf/1227434456/47
49: 41 [sage] 2009/03/20(金) 18:39:07 ID:nPh+mKh4 >>48 Public PropertiesのShow Inherited Public Propertiesをクリックすると出てきます 調べてみたらCubeにdestroy()がある事を知って、実行してみましたが使用メモリは相変わらずで・・・ ちょっとソースのCube.asクラスのdestroy()関数にtraceを入れてみましたが、 public function destroy():void { trace("test1"); var mat:MaterialObject3D; for each(mat in materials){ trace("test2"); mat.unregisterObject(this); } } cube.destroy()でtrace("test1")は実行されましたが、trace("test2")は反応がありませんでした cube.materialsをtraceすると表示されるので6回ループが起こると思うんですが・・・ mat.unregisterObject(this)の処理の意味もよくわからずでどんどん混乱して来ましたorz http://mevius.5ch.net/test/read.cgi/swf/1227434456/49
55: Now_loading...774KB [sage] 2009/03/21(土) 01:19:02 ID:fKmdslcf Planeはわかったので、次はCube。 頂点やら面情報を持ってるところはPlaneと同じ。頂点情報は共有してるかもしれないけど 今回のテーマ(ちゃんと解放したい)とは関係ないので読んでない。 >>41氏が>>49で書いてるとおり、Cubeはdestoryを持っていて、 MaterialObject3Dを解放する処理が記述されていると。ただこれは後述するけど unregisterObject()っていうメソッドを呼んでるのであって、マテリアルの削除ではない。 CubeはMaterialObject3Dを複数個管理できるMaterialsListクラスでマテリアルを管理している。 Cubeのdestory()では、頂点やら面はほったらかし。 あ、そうだ、Planeでマテリアルにnullを指定した場合は自動的に MaterialObject3D.DEFAULTが使われて、そこではWireframeMaterialクラスっていうマテリアルが 生成される。色はランダム。余談ね。 MaterialsListクラスは、マテリアル情報をDictionaryで管理してる。 マテリアルのインスタンスと、そこから生成した名前(文字列)の両方。 removeMaterial()でMaterialsListから指定したマテリアルを削除できるようだ。 でだ、cubeのdestory()は、マテリアルリストに含まれるマテリアルに対して removeMaterial()は呼んでいなくて、unregisterObject()しているだけ。 これは、Cubeの生成時にマテリアルにCubeを登録( registerObject() )しているので そこから消してる。つまり、描画はCubeではなくてマテリアルがやってるってことだろうかね。 Cubeのdestory()は、なんでremoveMaterial()しないのかは、ここら辺が関わっていて、 例えば、2個のCubeがある時に、それぞれのCubeが同じマテリアルを使っていると、 1つめのCubeの削除と同時にマテリアルの削除はしちゃダメってことになる。もう片方のCubeで そのマテリアルが使えなくなるから。マテリアルとプリミティブは対等な関係じゃないので それぞれ管理しないさいと。 ここまで来たら、あとはサンプルコードを書いて実践したいけど、もう眠いわ。 http://mevius.5ch.net/test/read.cgi/swf/1227434456/55
57: 44 [sage] 2009/03/21(土) 10:06:09 ID:fKmdslcf >>41と>>47について、 > プレビュー中は使用量のグラフがずっと上がりっぱなしの状態でした、 っていうのは、ずっとグラフが上がり続けるって感じ? それとも上がったり下がったりを繰り返しつつも、徐々に最大値が上がっていく感じ? 手元の環境だと、Cube生成すらしてないSWFを作ってプレビューするだけでも メモリ使用量が上がったり下がったりを繰り返しつつも、徐々に最大値が上がってくんだよね。 一応、こっちで>>41と>>47をテストしてみたら、ずっと上がり続けるってことはなくて、 上がったり下がったりを繰り返しつつも、徐々に最大値が上がっていく感じでした。 http://mevius.5ch.net/test/read.cgi/swf/1227434456/57
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.011s