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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     窓(MovieClip)を開くクラスを作成する
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
hide33
Åê¹ÆNo.44285
投稿日時: 2010-1-16 11:15
半人前
居住地:
投稿: 39
使用環境:
CS4
10.6
窓(MovieClip)を開くクラスを作成する
こんにちは。
今、AS3でFlash内でボタンを押下して、窓(MovieClip)を開いたり閉じたりしています。

下記のように、トップページの窓を開くボタンをtop_btn、トップページの窓をtop_mcにしています。
初期設定はcurrentMC = top_mc;(A)です。
その他複数ボタンも同様の設定をしていて、トップボタンは初期設定で無効、その他のボタンを押すと入れ替わりにその窓(MovieClip)が開くように動作しています。下記の内容をカスタムクラスにして利用していきたいと考えていますが、実行するとボタンは動作し、第2引数のmcは取れているようですが、
TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。at ConOpen/WinOpen()

とエラー表示されて、窓が開かない状態です。
初期設定の(A)を現在フレームに記述していますが、クラス内に設定する方が良いのか、またその場合どのように記述すれば良いのかこの辺りで躓いています。
top_btn.buttonMode = true;
top_btn.addEventListener(MouseEvent.CLICK, open_top);

function open_top(eventObj:MouseEvent):void
{
	if(currentMC != top_mc)
	{
		currentMC.gotoAndPlay("out");
		top_mc.gotoAndPlay(2);
		currentMC = top_mc;
	}
}

//カスタムクラス(作成中)
package
{
	import flash.display.MovieClip;
	import flash.display.Sprite;
	import flash.events.MouseEvent;
	
	public class ConOpen  extends Sprite
	{
		public var currentMC:MovieClip;
		public var my_mc:MovieClip;
		
		public function ConOpen(my_btn:MovieClip, mc:MovieClip)
		{
			my_btn.buttonMode = true;
			my_btn.addEventListener(MouseEvent.CLICK, WinOpen);
			my_mc = mc;
		}
		
		public function WinOpen(eventObj:MouseEvent):void
		{
			trace(my_mc.name);
			if(currentMC != my_mc)
			{
				currentMC.gotoAndPlay("out");
				my_mc.gotoAndPlay(2);
				currentMC = my_mc;
			}
		}
	}
}

//FrameAction
var topOpen:ConOpen = new ConOpen(top_btn, top_mc);

皆さんも同様なクラスを作成なさって利用されていると思いますので、ご存じの方はご教示下さい。宜しくお願いします。
野中文雄
Åê¹ÆNo.44286
投稿日時: 2010-1-16 11:47
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: 窓(MovieClip)を開くクラスを作成する
「第2引数のmcは取れている」というのは、どこでどのように確かめられているのでしょう。ConOpen.WinOpen()の第1ステートメントのtrace()関数ですか。

また、「エラー表示」の原因は、おわかりになったのでしょうか。それが済んでいない場合には、「クラス内に設定する方が良いのか」とか「どのように記述すれば良いのか」の前に、エラーの理由を確かめる方が先ではありませんか。
引用:
hide33さんは書きました:
その他複数ボタンも同様の設定をしていて、トップボタンは初期設定で無効、その他のボタンを押すと入れ替わりにその窓(MovieClip)が開くように動作しています。下記の内容をカスタムクラスにして利用していきたいと考えていますが、実行するとボタンは動作し、第2引数のmcは取れているようですが、
引用:
TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。at ConOpen/WinOpen()

とエラー表示されて、窓が開かない状態です。
初期設定の(A)を現在フレームに記述していますが、クラス内に設定する方が良いのか、またその場合どのように記述すれば良いのかこの辺りで躓いています。

//カスタムクラス(作成中)
package {
	import flash.display.MovieClip;
	import flash.display.Sprite;
	import flash.events.MouseEvent;

	public class ConOpen extends Sprite {
		public var currentMC:MovieClip;
		public var my_mc:MovieClip;

		public function ConOpen(my_btn:MovieClip, mc:MovieClip) {
			my_btn.buttonMode = true;
			my_btn.addEventListener(MouseEvent.CLICK, WinOpen);
			my_mc = mc;
		}

		public function WinOpen(eventObj:MouseEvent):void {
			trace(my_mc.name);
			if (currentMC != my_mc) {
				trace(currentMC);
				// currentMC.gotoAndPlay("out");
				// my_mc.gotoAndPlay(2);
				currentMC = my_mc;
			}
		}
	}
}

なお、重複して投稿されたトピックは、紛らわしいので削除してください。


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

hide33
Åê¹ÆNo.44290
投稿日時: 2010-1-16 14:01
半人前
居住地:
投稿: 39
使用環境:
CS4
10.6
Re: 窓(MovieClip)を開くクラスを作成する
野中さん、ご回答有り難う御座いました。ご指摘のエラー原因が分かりません。ご指摘のあったtrace()関数で確認しましたところ、currentMCがnullになっているようなので、
var currentMC:MovieClip = new MovieClip();
に変更したりしてみましたが解決していません。もうすこしAS3を1から勉強して取り組みたいと思います。
引用:

Fumioさんは書きました:
「第2引数のmcは取れている」というのは、どこでどのように確かめられているのでしょう。ConOpen.WinOpen()の第1ステートメントのtrace()関数ですか。

また、「エラー表示」の原因は、おわかりになったのでしょうか。それが済んでいない場合には、「クラス内に設定する方が良いのか」とか「どのように記述すれば良いのか」の前に、エラーの理由を確かめる方が先ではありませんか。

管理者様、重複している投稿は削除して下さい。
ひろゆき
Åê¹ÆNo.44291
投稿日時: 2010-1-16 14:43
ちょんまげら
居住地: 東京砂漠
投稿: 4403
使用環境:
10.8.5

Flash Professional CS4/CS6/CC

Safari 6.1
Re: 窓(MovieClip)を開くクラスを作成する
せめて、第三者が再現できるような説明が必要ではないでしょうか。

ステージ上には、4つのムービークリップを配置。
(インスタンス名: topMC, baseMC, topBtn, baseBtn)

topMC, baseMCは、11フレームあり。
第1フレームは、stop();
第2?6フレームは、トゥイーンでフェードイン。
第2フレームにフレームラベル: "in"
第6フレームで stop();
第7?11フレームは、トゥイーンでフェードアウト。
第7フレームにフレームラベル: "out"
第11フレームで stop();

ステージの第1フレームに以下のように記述。
var currentMC:MovieClip = baseMC;
currentMC.gotoAndStop("out");

topBtn.buttonMode = true;
topBtn.addEventListener(MouseEvent.CLICK, openTop, false, 0, true);
baseBtn.buttonMode = true;
baseBtn.addEventListener(MouseEvent.CLICK, openBase, false, 0, true);

function openTop(evt:MouseEvent):void {
	if (currentMC != topMC) {
		currentMC.gotoAndPlay("out");
		topMC.gotoAndPlay("in");
		currentMC = topMC;
	}
}
function openBase(evt:MouseEvent):void {
	if (currentMC != baseMC) {
		currentMC.gotoAndPlay("out");
		baseMC.gotoAndPlay("in");
		currentMC = baseMC;
	}
}


----------------
質問する際は、回答者に具体的な情報を与えてください。

hide33
Åê¹ÆNo.44294
投稿日時: 2010-1-16 18:40
半人前
居住地:
投稿: 39
使用環境:
CS4
10.6
Re: 窓(MovieClip)を開くクラスを作成する
ひろゆきさん、野中さんの仰る通りです。記載せずに分かる部分と分からない部分が読んでいる人によって違うのは分かってはいるのですが、申し訳御座いませんでした。

MovieClipの中身はまさに、ひろゆきさんが書かれているコードの通りです。

赤字の部分が
var currentMC:MovieClip = topMC;
currentMC.gotoAndPlay("in");
となっていてswfを再生すると初期状態でtopMCが表示されているものを作成しています。これにあと閉じるクラスも作成を考えているのですが・・・

ひろゆきさん、野中さんどうも有り難う御座いました。

因みにDragAndDropは出来ました。
package
{	
import flash.display.MovieClip;
	import flash.display.Sprite;
	import flash.events.MouseEvent;
	public class DragDrop extends Sprite
	{
		public function DragDrop(my_mc:MovieClip)
		{
			my_mc.buttonMode = true;
			my_mc.addEventListener(MouseEvent.MOUSE_DOWN, onStartDrag);
		}
		
		function onStartDrag(eventObj:MouseEvent):void
		{
			var my_mc:MovieClip = eventObj.target as MovieClip;
			my_mc.startDrag(false);
			my_mc.alpha = 0.5;
			my_mc.addEventListener(MouseEvent.MOUSE_UP, onStopDrag);
		}
		
		function onStopDrag(eventObj:MouseEvent):void
		{
			var my_mc:MovieClip = eventObj.target as MovieClip;
			my_mc.stopDrag();
			my_mc.alpha = 1;
		}
	}
}
<br>
//** FrameAction **//
var hogeDrag:DragDrop = new DragDrop(hoge_mc);
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

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