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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   ActionScript 3.0 特設会議室
     素のSpriteを大量にaddChildしただけで処理が重くなる
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
zukkun
Åê¹ÆNo.43911
投稿日時: 2009-11-12 14:11
新米
居住地:
投稿: 2
使用環境:
WindowsXP
Flex SDK 3.3.0
Flash CS4 Pro
素のSpriteを大量にaddChildしただけで処理が重くなる
【開発環境】
・Windows XP SP3
・Flex SDK 3.3.0
・FlashDevelop 3.0.2

上記環境で Flash 開発を行っています。
メインとなる Sprite に、
単純に
for ( var i:int = 0; i < 10000; ++i )
{
    addChild( new Sprite() );
}

と、素の Sprite を多めに追加するだけで、
FlashPlayer に特定の動作で処理負荷がかかります。

処理に負荷がかかる動作は、以下の場合です。

・Stage 上にマウスカーソルが乗っている間
・Stage 上でマウスカーソルを動かしている間

カーソルを動かしている間の方が、とりわけ負荷がかかります。
メインとなる Sprite や、子要素として追加している Sprite には
イベントは設定していません。

これは避けることの出来ない FlashPlayer の動作の仕様なのでしょうか。
また、うまく処理負荷を回避する方法はありますでしょうか。
野中文雄
Åê¹ÆNo.43913
投稿日時: 2009-11-12 23:19
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: 素のSpriteを大量にaddChildしただけで処理が重くなる
「メインとなる Sprite」のDisplayObjectContainer.mouseChildrenプロパティをfalseに設定するといかがですか?

参考:「イベントを制する者、ActionScript 3.0を制す
引用:
zukkunさんは書きました:
メインとなる Sprite に、
単純に
for ( var i:int = 0; i < 10000; ++i )
{
    addChild( new Sprite() );
}

と、素の Sprite を多めに追加するだけで、
FlashPlayer に特定の動作で処理負荷がかかります。

処理に負荷がかかる動作は、以下の場合です。

・Stage 上にマウスカーソルが乗っている間
・Stage 上でマウスカーソルを動かしている間

カーソルを動かしている間の方が、とりわけ負荷がかかります。
メインとなる Sprite や、子要素として追加している Sprite には
イベントは設定していません。


----------------
 

zukkun
Åê¹ÆNo.43914
投稿日時: 2009-11-13 10:49
新米
居住地:
投稿: 2
使用環境:
WindowsXP
Flex SDK 3.3.0
Flash CS4 Pro
Re: 素のSpriteを大量にaddChildしただけで処理が重くなる
野中 様
ご返信ありがとうございます。

メインとなる Sprite に対する mouseChildren = false はすでに試しておりましたが、
問題は改善されませんでした。
mouseEnabled = false もすでに試しています。
(関係ないと思いますが、addChild() する Sprite に対しても mouseEnabled = false, mouseChildren = false も試しました)

目的としているのは、Flash でのパズル的なゲームの作成なのですが、
パズルの操作単位となるブロックの形状が四角形ではない図形を
敷き詰めた形を想定していますので、
1つの Sprite 内に図形を描画した際に、マウス座標値からどのブロックかを判定する式が複雑になりそうというのがあり、
ブロック1つひとつを Sprite として配置し、
マウスのイベントで判定を行おうとしていました。

ブロック数を多くし、ある一線を越えると処理負荷が急激に多くなることがわかり、
原因を調べましたところ、どんな表示物(Sprite)かにかかわらず、
単純に addChild() した数が多いほど負荷が高くなりました。

ですので、素の new Sprite() を大量に addChild() する実験を行った次第です。

挙動からして、イベント通知が怪しいとは思っているのですが、
mouseChildren 以外に関係しそうな設定や仕様などはありますでしょうか。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

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