ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Flash Action Scriptコミュの【質問】スクリプトを追記するとムービープレビューされなくなる

  • mixiチェック
  • このエントリーをはてなブックマークに追加
みなさんはじめまして。
早速ですが、タイトルの現象に悩まされております。
___________________________________________
■制作環境
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
Adobe Flash CS3 Professional

Windows XP Professional Service Pack 2
Pentium(R) D CPU 3.20GHz
3.19GHz、2.00GB RAM
___________________________________________
■制作状況
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
1.ルート(FLAファイル)の1フレーム目に、#includeで外部ASファイル読み込み。
2.外部ASファイルに定義した関数を実行。
3.ムービープレビューにて状況を確認しながら制作を進める。
4.途中、外部ASファイルのスクリプトが4100行を越えたあたりで下記の現象が発生。
___________________________________________
■現象
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
1.新たに関数を定義するため、以下のスクリプトを記述。

function my_fun(){
}
※処理内容は未記述。

2.ムービープレビューする。
3.ムービープレビューされない(背景色のみ表示)。

以上です。全く意味が分かりません。
もしかしてFlashは、処理可能なスクリプトに制限があるのでしょうか(まさか)?

試しに2フレーム目で#includeさせてみたり、
違うスクリプト(定義済みの関数内に追加の処理)を記述してみてもムービープレビューされません。
印象としては、「これ以上スクリプトを追記しないでくれ!」とFlashに言われているようです(汗)

ちなみに、まとめられそうな処理はまとめており、
さらに+2000行程度のスクリプトを追記する予定です。
また、ファイルは分けずになるべく「追記」で対処したいと思っております(困ったことに)。

説明不足があればご指摘下さい。
それではご指南の程、何卒宜しくお願いいたします。

コメント(8)

> ルルさん

はじめまして。
asのバージョンは2.0でしょうか?
上記条件でテストしてみましたが私の環境では再現できませんでした。

ちなみに、コードを追記した際にコンパイルエラーが出たということは考えられませんでしょうか?
また、その動作しなくなる状態のソースをそのままいくつかのASファイルに分割するとどうなりますでしょうか?
> 4.途中、外部ASファイルのスクリプトが4100行を越えたあたりで下記の現象が発生。
_____
「ムービープレビューされない」のでしょうか?スクリプトが動作しないのではありませんか。

ActionScript 2.0または1.0でしたら、バイトコードに32,767バイトの上限があります。かつて、Macromediaのエンジニアは、2,000行程度に抑えることを推奨していました。

「ActionScript 2.0 Class Bytecode Limit: 32,767 bytes」
http://www.senocular.com/index.php?id=0.34

クラス定義の場合には、書出し時に警告が出たと思います。

「ASOファイルの使用」
http://livedocs.adobe.com/flash/9.0_jp/main/00000800.html
http://mixi.jp/view_bbs.pl?id=42490739&comm_id=580
[新しいトピックを作成する]フォームの注意書きより: =====
http://mixi.jp/add_bbs.pl?id=21394
複数のコミュニティに同じ内容のトピックを作成する行為は固く禁止しております。
=====

[mixi利用規約]より: =====
http://mixi.jp/rules.pl
第14条 禁止事項
...[中略]...
(15)次に掲げるスパム行為を行うこと。
(ア)スパム投稿・スパムメッセージ 一人又は複数のユーザーが、本サイト内の投稿可能な箇所に、同一又は類似の文章を投稿し、又はメッセージで送信する行為。
=====
>kakeruさん

早速ご返答下さいまして誠にありがとうございます。
また、返答が遅くなってしまい大変申し訳ございませんでした。

>asのバージョンは2.0でしょうか?
asのバージョンは2.0です。

>ちなみに、コードを追記した際にコンパイルエラーが出たということは考えられませんでしょうか?
コンパイルエラーは出力されませんでした。

>また、その動作しなくなる状態のソースをそのままいくつかのASファイルに分割するとどうなりますでしょうか?
ASファイルを分割して、該当の処理をさせたいとき(onRelease時など)に#includeさせてみましたが、
分割前と同様の現象が起こります。



>Fumioさん

早速ご返答下さいまして誠にありがとうございます。
返答が遅くなってしまい大変申し訳ございませんでした。

また、「3」の件に関しまして、ご指摘下さいましてありがとうごありがとうございます。
別のコミュニティへの書き込みについては削除にて対処させて頂きました。
[mixi利用規約]の知識不足でご迷惑をお掛けし、大変申し訳ございませんでした。

>「ムービープレビューされない」のでしょうか?スクリプトが動作しないのではありませんか。
ご指摘の通り、厳密に言えばムービープレビューはされておりますので、「スクリプトが動作しない」ということになります。

>ActionScript 2.0または1.0でしたら、バイトコードに32,767バイトの上限があります。かつて、Macromediaのエンジニアは、2,000行程度に抑えることを推奨していました。
まさかとは思っておりましたが、やはり上限が存在するのですね・・・。



恐らく・・・ですが、「2」でFumioさんが仰っている「バイトコードの上限」に達してしまったのではないかと思われます。
これが原因だとすると、このままの状態のASを分割し「#include」しても、
「#include」した場所には同じ内容が書き込まれるので、同様の現象が起こるのは納得がいきます。

そうなると「#include」させないで、いくつかに分割した外部クラスファイルを「import」で読み込むようにコードを書き換えるしかない・・・のではないかと思っております。

試しにASファイルをクラスに書き換えたところ(以下、サンプルコード参照)、onEnterFrameの処理がうまく動作しなくなってしまいました。
これは恐らく私の書き方なり文法なりが間違っている可能性がありますが・・・。

>>次のレスに続く・・・
___________________________________________
■サンプルコード
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
※「index.fla」と同階層に、「functionSet.as」と「concept.as」が入った「asフォルダ」が置いてあります。

[index.fla]
ルートの1フレーム目に以下のコードを記述。

import as.functionSet;
var functionSet = new functionSet();
functionSet.loading_fun();

import as.concept;
_global.concept = new concept();

stop();

[functionSet.as]
functionSet.asに以下のコードを記述(他の部分についてはうまく動作しているので割愛)。

class as.functionSet{

function loading_fun(){

var totalSize:Number = _root.getBytesTotal();
var loadedSize:Number = _root.getBytesLoaded();
var nowLoadedSize:Number = Math.round(loadedSize/totalSize*100);

if (nowLoadedSize == 100) {
functionSet_fun();
//trace("nowLoadedSize = "+nowLoadedSize);
} else if (nowLoadedSize<100) {
loading_fun();
//trace("nowLoadedSize = "+nowLoadedSize);
}

}

function functionSet_fun(){

function naviMotion(){

_root.naviBtn_mc.conceptBtn_mc.onRelease = function(){
_global.concept.concept_open();
}

}
naviMotion();

}

[concept.as]
concept.asに以下のコードを記述(他の部分についてはうまく動作しているので割愛)。

class as.concept{

var speed:Number = 0.5;
var lowspeed:Number = 0.05;

function concept_open(){

_root.attachMovie("contentsBg_mc","contentsBg_mc",5);
_root.contentsBg_mc._x = Stage.width/2;
_root.contentsBg_mc._y = Stage.height/2;
_root.contentsBg_mc._alpha = 95;
_root.contentsBg_mc.DropShadow_distance = 0;
_root.contentsBg_mc.DropShadow_color = 0x9c9b99;
_root.contentsBg_mc.DropShadow_quality =3;
_root.contentsBg_mc._width = Stage.width/2;
_root.contentsBg_mc._height = Stage.height/2;

_root.contentsBg_mc.onEnterFrame = function(){
this._width += ((Stage.width-72)-this._width)*speed;
this._height += (315-this._height)*speed;
this._x += ((Stage.width/2)-this._x)*speed;
this._y += ((Stage.height/2)-this._y)*speed;
}

}

>>次のレスに続く・・・
___________________________________________
■補足説明
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

「functionSet.as」で、

_root.naviBtn_mc.conceptBtn_mc.onRelease = function(){
_global.concept.concept_open();
}

を実行した際に、

_root.attachMovie("contentsBg_mc","contentsBg_mc",5);
_root.contentsBg_mc._x = Stage.width/2;
_root.contentsBg_mc._y = Stage.height/2;
_root.contentsBg_mc._alpha = 95;
_root.contentsBg_mc.DropShadow_distance = 0;
_root.contentsBg_mc.DropShadow_color = 0x9c9b99;
_root.contentsBg_mc.DropShadow_quality =3;
_root.contentsBg_mc._width = Stage.width/2;
_root.contentsBg_mc._height = Stage.height/2;

までは実行されますが、

_root.contentsBg_mc.onEnterFrame = function(){
this._width += ((Stage.width-72)-this._width)*speed;
this._height += (315-this._height)*speed;
this._x += ((Stage.width/2)-this._x)*speed;
this._y += ((Stage.height/2)-this._y)*speed;
}

の処理が実行されません。

ちなみに、元々「#include」していたときのコードを、

class as.クラス名{
}

で包み、エラー回避の為に変数をfunctionの外側に宣言しただけですので、
基本的にコードの記述間違いはないと思います(#includeで実行していた際には動作していました)。

考えられるのは「contentsBg_mc」へのパスが変わるのか、もしくはそもそも「onEnterFrame」が使えないのでしょうか(まさか)?

もし宜しければ、FLAファイルで外部クラスファイルを読み込み、その読み込んだ外部クラスファイル内で、さらに外部クラスファイルに書かれた処理を実行する場合の正しい書き方をご教授頂けますと幸いです。
上記onEnterFrameがうまく動作しない件に関しまして、
問題が解決致しましたのでご報告差し上げます。

変数speedが関数内で宣言されていなかった為、
うまく動作していなかったようです。

初歩的なミスでお手数をお掛けし大変失礼致しました。
お陰様で先に進めそうです。
kakeruさん、Fumioさん、この度は大変お世話になりました。
ありがとうございます。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Flash Action Script 更新情報

Flash Action Scriptのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング